Использование netcat для преобразования DNS-запросов UDP в TCP-DNS-запросы
Я использую Debian 9 в изолированной сети и мне нужны службы DNS для разрешения внешних имен хостов.
(Я уверен, что некоторые будут удивляться, почему мне нужно разрешать внешние имена хостов, если я нахожусь в изолированной сети, но это более детально, чем нужно здесь, чтобы задать мой вопрос. Достаточно сказать, что это нужно существует.)
На изолированном хосте, с которого мне нужно разрешить имена внешних хостов, я настроил этот туннель SSH:
ssh -N -L localhost:53:192.168.13.14:53 myUserId@jumpServer
Здесь 192.168.13.14 - DNS-сервер, который может разрешать все имена глобально. Этот SSH-туннель пересылает все, что слышно на локальном TCP- порту 53, на TCP- порт 53 на 192.168.13.14.
Я могу использовать dig для разрешения имени хоста, указав, что запрос должен выполняться с использованием TCP-порта 53, а не обычного UDP-порта 53:
root@isolatedHost:~# dig @localhost +vc example.com ; <<>> DiG 9.10.3-P4-Debian <<>> @localhost +vc example.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53054 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;example.com. IN A ;; ANSWER SECTION: example.com. 3600 IN A 93.184.216.34 ;; Query time: 133 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Dec 20 15:21:01 MST 2017 ;; MSG SIZE rcvd: 56
Ключ к созданию этого примера в том, что:
- dig имеет флаг «+ vc +» («виртуальный канал»), который позволяет вам использовать TCP вместо обычного UDP
- Наш сервер имен (тот, что на 192.168.13.14) настроен на прием обычных рекурсивных запросов по TCP, а также обычного UDP
Конечно, копать это особенное. Можно сказать использовать TCP, а не UDP. В общем случае случайного приложения, вызывающего локальную библиотеку распознавателя, запрос всегда будет выполняться через обычный UDP.
Проблема с моим SSH-туннелем заключается в том, что SSH может пересылать только TCP- порты. Он не может пересылать порты UDP. Итак, мне нужен способ конвертировать все DNS-запросы из обычного UDP в TCP. Затем они могут выйти из нашей изолированной сети через SSH-туннель и добраться до сервера имен.
Первое, что приходит на ум, это netcat:
nc -u -l -p 53 | nc localhost 53
Это, к сожалению, не работает, и я пока не уверен, почему.
У кого-нибудь есть решение для пересылки UDP-запросов UDP, если это изолированная сеть, с использованием netcat в сочетании с туннелем SSH или иным способом?
0 ответов на вопрос
Похожие вопросы
-
9
В чем разница между командами "su -s" и "sudo -s"?
-
4
Требуется хороший бесплатный образ Ubuntu Server VMWare
-
4
Каковы различия между основными дистрибутивами Linux? Я замечу?
-
-
2
Ограничить использование процессора для Flash в Firefox?
-
2
Как мне заставить мой микрофон работать под Debian GNOME?
-
2
Конки установки - образцы / идеи?
-
3
Каковы различия между оконными менеджерами Linux?
-
1
Переключить настройки DNS для каждого пользователя Windows?
-
2
ThunderBird / Синхронизация освещения с SE k770i
-
4
Файловая система Linux