Node.js 在CNAME重定向之前拦截流量
我有以下情况: 用户连接到域:test.com 我想这个域名重定向到例如google.com 为此,我将一条CNAME记录指向google.com:www google.com(TTL:automatic) 有没有可能在test.com发送到google.com之前拦截它的流量?(自定义协议,不是http或https) 我发现了一个名为:native dns的库,我认为它可能托管dns服务器 我将其配置如下:Node.js 在CNAME重定向之前拦截流量,node.js,ubuntu,dns,cname,Node.js,Ubuntu,Dns,Cname,我有以下情况: 用户连接到域:test.com 我想这个域名重定向到例如google.com 为此,我将一条CNAME记录指向google.com:www google.com(TTL:automatic) 有没有可能在test.com发送到google.com之前拦截它的流量?(自定义协议,不是http或https) 我发现了一个名为:native dns的库,我认为它可能托管dns服务器 我将其配置如下: "use strict"; var dns = require('native-dn
"use strict";
var dns = require('native-dns'),
tcpserver = dns.createTCPServer(),
server = dns.createServer();
var onMessage = function (request, response) {
console.log('request from:', request.address);
var i;
response.additional.push(dns.CNAME({
name: 'www.mydomain.com',
data: 'otherdomain.com'
}));
response.additional.push(dns.NS({
name: 'ns1.mydomain.com',
data: '127.0.0.1'
}));
response.send();
};
var onError = function (err, buff, req, res) {
console.log(err.stack);
};
var onListening = function () {
console.log('server listening on', this.address());
//this.close();
};
var onSocketError = function (err, socket) {
console.log(err);
};
var onClose = function () {
console.log('server closed', this.address());
};
server.on('request', onMessage);
server.on('error', onError);
server.on('listening', onListening);
server.on('socketError', onSocketError);
server.on('close', onClose);
server.serve(53, '127.0.0.1');
我想知道的是,我如何才能使这个dns服务器真正发挥作用。我想ping www.mydomain.com并获得otherdomain.com作为答案
目前,我正在使用一个运行节点脚本的ubuntu服务器。ping将从windows 10计算机上执行。在此设置中,您无法拦截test.com上的流量,因为它从未指向您的服务器 当客户端想要连接到test.com时,首先它会通过查找test.com的DNS a记录,尝试将test.com解析为IP地址。您没有此类记录,但有一个CNAME重定向到www.google.com的a记录(或CNAME)。根据DNS请求是否是递归的(在绝大多数情况下,它是递归的),客户机要么接收www.google.com的IP地址,要么接收随后的CNAME引用 请注意,在连接到您的服务之前,整个名称解析过程是如何发生的:CNAME只是让客户端绕过您运行的任何服务
根据代码示例,您只需将到达test.com服务器的所有流量代理给Google,这是截获流量的一个非常好的方法。您所要做的就是不要使用CNAME,因为它表示在网络连接的不同阶段进行转发。我想找到一种不必代理服务的方法,代理将花费太多的服务器电源,因为它是用于游戏的。@MaximGeerinck:如果您想拦截完整的流量,你需要以这样或那样的方式接收完整的流量。如果可以操作客户端网络,则可以在端点或两者之间的某个位置进行操作。但是,如果您只需要知道某个客户端是否尝试连接到该服务,那么可能有一种方法可以做到这一点——让我知道是哪种情况。感谢您的回复,在最好的情况下,我需要知道流量的第一部分(例如用于登录的用户名)。但是,只有知道客户端是否试图连接也是一个好的选择。后者可以通过让每个客户端连接到自己的专用DNS名称(例如,
user.example.org的唯一令牌)并监视DNS名称解析来实现。限制适用(请参阅我最近对这个问题的回答:)。我意识到这可能不太可能或不够准确,但这是我能想到的最好的办法。当然,如果你可以访问客户端计算机/网络,你有更多的选择。经过长时间的搜索,我可能已经找到了一个合适的方案,但无法确定它的理由是否正确。有关更新,请参阅我的原始问题