Перехват трафика до перенаправления 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, потому что он представляет пересылку на другой стадии сетевых подключений.