DNS-туннелирование через SSH соединение теряет связь

в супер вопрос пользователя UDP трафик через SSH туннель, он описывает, как туннелировать DNS через туннель SSH:

во-первых, на стороне клиента, сделайте следующее:

ssh -N -L 6667:localhost:6667 user@server

затем на стороне сервера этого:

mkfifo /tmp/fifo
nc -k -l 6667 < /tmp/fifo | nc -u ip_of_dns_server 53 > /tmp/fifo

наконец, обратно на стороне клиента сделать это:

mkfifo /tmp/fifo
nc -k -l -u 53 < /tmp/fifo | nc 127.0.0.1 6667 > /tmp/fifo

после этого я могу сделать запрос DNS, как и ожидалось,но только для одного запроса:

client# host m6.fr 127.0.0.1

как я могу держать соединение для больше запросов?

5
задан Community
25.02.2023 21:31 Количество просмотров материала 2873
Распечатать страницу

1 ответ

TL;DR: не используйте Netcat, используйте Socat для экспериментов. Он справляется с чем-то лучше.

почему это не работает не про именованные каналы (даже если это ужасный способ с другими проблемами скрывается), но ограничение для netcat.

как только Netcat получает UDP-соединение, он связывается с ним. Таким образом, он больше не слушает порт 53, он подключен к порту, который отправил исходный пакет, точно так же, как и с TCP. Каждый раз вы делаете запрос DNS, инструмент изменит порт и Netcat никогда не получит запрос. Так что сработает только первый запрос.

при настройке примера, попробуйте эту команду перед первым запросом:

netstat -aunp|grep -w 53
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12316/nc.openbsd 

выполните запрос (только рабочий) и повторите попытку netstat:

# netstat -aunp|grep -w 53
udp        0      0 127.0.0.1:53            127.0.0.1:44335         ESTABLISHED 12316/nc.openbsd

Как видите netcat только что сменил режим: от прослушивания до перебора соединения. Поскольку это UDP, Netcat не будет знать автоматически "установленное соединение" больше нет.

у меня есть доказательство концепции (что заставляет его работать и показывает, что проблема связана с этим режимом UDP), но для этого требуется socat в дополнение к netcat на клиенте. Цель состоит в том, чтобы все запросы достигали netcat, используя тот же UDP source порт. Ничего не меняется на стороне сервера, но я вставляю socat в начале цепочки (так что последняя команда), чтобы заставить исходный порт запроса UDP в Netcat.

во-первых, на стороне клиента, сделать это:

ssh -N -L 6667:localhost:6667 user@server

затем на стороне сервера этого:

mkfifo /tmp/fifo
nc -k -l 6667 < /tmp/fifo | nc -u ip_of_dns_server 53 > /tmp/fifo

наконец, обратно на стороне клиента сделать это:

mkfifo /tmp/fifo
nc -k -l -u 5555 < /tmp/fifo | nc 127.0.0.1 6667 > /tmp/fifo

socat udp4-listen:53,reuseaddr,fork udp:127.0.0.1:5555,sourceport=55550,reuseaddr

теперь я могу сделать несколько запросов.

перед 1-м запросом:

# netstat -aunp|egrep -w '53|5555'
udp        0      0 0.0.0.0:5555            0.0.0.0:*                           12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         

после 1:

udp        0      0 127.0.0.1:55550         127.0.0.1:5555          ESTABLISHED 12736/socat         
udp        0      0 127.0.0.1:5555          127.0.0.1:55550         ESTABLISHED 12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         

после 2-й запрос:

udp        0      0 127.0.0.1:55550         127.0.0.1:5555          ESTABLISHED 12750/socat         
udp        0      0 127.0.0.1:5555          127.0.0.1:55550         ESTABLISHED 12715/nc.openbsd    
udp        0      0 0.0.0.0:53              0.0.0.0:*                           12717/socat         
udp        0      0 127.0.0.1:53            127.0.0.1:53255         ESTABLISHED 12750/socat         

Socat будет страдать той же проблемой, но с fork option, он слушает снова, и кажется, что он обнаруживает предыдущее потерянное "соединение"; I думаю, это вызывает задержку.

вы можете получить старое поведение (работает один раз), если вы просто удалите ,sourceport=55550,reuseaddr участие в команде socat.

1
отвечен A.B 2023-02-27 05:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх