Трафик UDP через туннель SSH

Заголовок в значительной степени подводит итог его. Я хотел бы отправить трафик UDP через туннель SSH. А именно, я должен смочь отправить пакеты UDP через туннель и иметь сервер смочь передать их обратно мне с другой стороны. Я знаю, как сделать это для соединений TCP. Это - это возможный с UDP?

66
задан 09.10.2009, 18:31

3 ответа

Это маленькое руководство говорит Вам, как отправить трафик UDP через SSH использование инструментов, которые прибывают стандарт (ssh, nc, mkfifo) с большинством подобных UNIX операционных систем.

Выполнение UDP, туннелирующего посредством соединения SSH

Шаг за шагом Откройте порт передачи TCP со своим соединением SSH

На Вашей локальной (локальной) машине соединитесь с удаленной машиной (сервер) SSH с дополнительной-L опцией так, чтобы SSH с портом вперед TCP:

local# ssh -L 6667:localhost:6667 server.foo.com

Это позволит соединениям TCP на номере порта 6667 Вашей локальной машины быть переданными номеру порта 6667 на server.foo.com через безопасный канал. Установите TCP к UDP вперед на сервере

На сервере мы открываем слушателя на порте TCP 6667, который передаст данные к порту UDP 53 из указанного IP. Если Вы хотите сделать DNS, передающий как я, можно взять IP первого сервера имен, который Вы найдете в/etc/resolv.conf. Но сначала, мы должны создать FIFO. FIFO необходим, чтобы иметь двухстороннюю связь между этими двумя каналами. Простой канал оболочки только связался бы, оставил стандартный вывод процесса стандартному входу правильного процесса.

server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo

Это позволит трафику TCP на порте сервера 6667 быть переданным трафику UDP на 192.168.1.1's порт 53, и ответы для возвращения. Установите UDP к TCP вперед на Вашей машине

Теперь, мы должны сделать противоположность того, что было сделано верхнее на локальной машине. Вам нужен priviledged доступ для привязки порта UDP 53.

local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo

Это позволит трафику UDP на порте локальной машины 53 быть переданным трафику TCP на порте локальной машины 6667. Наслаждайтесь своим локальным сервером DNS :)

Поскольку Вы, вероятно, предположили это теперь, когда запрос DNS будет выполнен на локальной машине, например, на локальном порте UDP 53, это будет передано локальному порту TCP 6667, затем порту TCP сервера 6667, затем к серверу DNS сервера, порт UDP 53 из 192.168.1.1. Для наслаждения сервисами DNS на локальную машину поместите следующую строку как первый сервер имен в/etc/resolv.conf:

nameserver 127.0.0.1
36
ответ дан 07.12.2019, 08:14

Этот пример (я думаю, что ответ John's указывает на то же самое на другое место), описывает, как получить доступ к сервисам UDP/DNS другой машины по TCP/соединению SSH.

Мы передадим локальный трафик UDP/53 к TCP, затем трафик TCP с механизмом перенаправления портов SSH к другой машине, затем TCP к UDP/53 на другом конце.
Как правило, можно сделать это с openvpn.
Но здесь, мы сделаем это с более простыми инструментами, только openssh и netcat.

В конце той страницы, другой комментарий со ссылкой на'socat',
Тот же доступ UDP/DNS сделан с,

Сторона сервера: socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53
Сторона клиента: socat udp4-listen:53,reuseaddr,fork tcp:localhost:5353

Отошлите socat примеры для больше.

27
ответ дан 07.12.2019, 08:14

SSH (по крайней мере, OpenSSH) имеет поддержку простого VPNs. Используя -w или Tunnel опция в ssh клиент, можно создать a tun устройство в обоих концах, которые могут использоваться для передачи любого вида трафика IP. (См. также Tunnel в странице руководства ssh_config(5).) Отмечают, что это требует OpenSSH (и вероятно полномочия пользователя root) в обоих концах.

20
ответ дан 07.12.2019, 08:14

Теги

Похожие вопросы