【问题标题】:Intercepting Traffic before CNAME redirection在 CNAME 重定向之前拦截流量
【发布时间】:2015-12-01 15:16:28
【问题描述】:

我有以下情况:

用户连接到域:test.com

我希望此域重定向到例如 google.com

为此,我已将 CNAME 记录指向 google.com:www google.com(TTL:自动)

是否有可能在将 test.com 上的流量发送到 google.com 之前拦截它? (自定义协议,不是 http 或 https)

我找到了一个名为:native-dns 的库,我认为它可能会托管一个 dns 服务器?

我是这样配置的:

"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 机器执行

【问题讨论】:

    标签: node.js ubuntu dns cname


    【解决方案1】:

    在此设置中,您无法拦截 test.com 上的流量,因为它永远不会指向您的服务器。

    当客户端想要连接到 test.com 时,首先它会尝试通过查找 test.comtest.com 解析为 IP 地址/em> 的 DNS A 记录。您没有这样的记录,但有一个 CNAME 重定向到 www.google.com 的 A 记录(或 CNAME)。根据 DNS 请求是否是递归的(在绝大多数情况下,它递归的),客户端要么收到 www.google.com 的 IP 地址,要么然后它遵循的 CNAME 引用。

    请注意,在与您的服务建立任何连接之前,整个名称解析过程是如何发生的:CNAME 只是让客户端绕过您运行的任何服务。

    根据代码示例,您只需将到达 test.com 服务器的所有流量代理到 Google,这是拦截流量的绝佳方式。您所要做的就是使用 CNAME,因为它代表网络连接不同阶段的转发。

    【讨论】:

    • 我想找到一种方法,我不必代理服务,代理会消耗太多的服务器功率,因为​​它是用于游戏的。
    • @MaximGeerinck:好吧,如果你想拦截完整的流量,你需要以一种或另一种方式接收完整的流量。如果您可以操纵客户端网络,则可以在端点或介于两者之间的某个地方完成。但是,如果您只需要知道给定客户端是否尝试连接到服务,那么可能有一种方法可以做到这一点——让我知道是哪种情况。
    • 感谢您的回复,在最好的情况下,我需要知道流量的第一部分(例如用于登录的用户名)。但只知道客户端是否尝试连接也是一个不错的选择
    • 后者可以通过让每个客户端连接到他们自己的专用 DNS 名称(例如unique-token-for-user.example.org)并监控 DNS 名称解析来完成。有限制(请参阅我最近对这个问题的回答:stackoverflow.com/questions/33920352/…)。我意识到这可能不太可能或不够准确,但这是我能想到的最好的结果。当然,如果您可以访问客户端计算机/网络,您还有更多选择。
    • 经过很长时间的搜索,我可能找到了一个合适的场景,但无法弄清楚它的推理是否正确。请参阅我的原始问题以获取更新
    猜你喜欢
    • 2016-03-14
    • 2021-02-08
    • 1970-01-01
    • 2015-08-22
    • 2017-04-20
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多