Перехват трафика до перенаправления CNAME

У меня следующая ситуация:

Пользователь подключается к домену: 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-сервер работоспособным. Я хотел бы пропинговать www.mydomain.com и получить otherdomain.com в качестве ответа.

На данный момент я использую сервер Ubuntu с запущенным скриптом узла. Пинг будет выполняться с машины Windows 10

1 ответ

В этой настройке вы не можете перехватить трафик на test.com, потому что он никогда не направляется на ваш сервер.

Когда клиент хочет подключиться к test.com, он сначала пытается преобразовать test.com в IP-адрес, просматривая запись DNS A test.com. У вас нет такой записи, но CNAME перенаправляет на запись A (или CNAME) www.google.com. В зависимости от того, был ли DNS-запрос рекурсивным (и в подавляющем большинстве случаев он рекурсивный), клиент либо получает IP-адрес www.google.com, либо ссылку CNAME, которая затем следует.

Обратите внимание, как происходит весь процесс разрешения имен до установления какого-либо соединения с вашим сервисом: CNAME просто заставляет клиента обходить любой сервис, который вы запускаете.

Исходя из примера кода, вы просто хотите проксировать весь трафик, поступающий на ваш сервер test.com, в Google, и это отличный способ перехватить трафик. Все, что вам нужно сделать, это не использовать CNAME, потому что он представляет пересылку на другой стадии сетевых подключений.

Другие вопросы по тегам