В этом небольшом руководстве рассказывается, как отправлять 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 через порт 53 192.168.1.1 и получать ответы. Настройте переадресацию UDP на TCP на вашем компьютере
Теперь нам нужно сделать противоположное тому, что было сделано выше на локальной машине. Вам нужен привилегированный доступ для привязки 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
Этот пример (я думаю, что ответ Джона указывает на то же самое в другом месте), описывает, как получить доступ к службам UDP / DNS другого компьютера через соединение TCP / SSH.
В конце этой страницы есть еще один комментарий со ссылкой на '
socat
'.Тот же доступ UDP / DNS сделан с помощью,
См. Примеры сокатов для большего.
источник
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (по крайней мере, OpenSSH) поддерживает простые VPN. Используя опцию
-w
илиTunnel
вssh
клиенте, вы можете создатьtun
устройство на обоих концах, которое можно использовать для пересылки любого вида IP-трафика. (См. ТакжеTunnel
на странице руководстваssh_config(5)
.) Обратите внимание, что для этого требуется OpenSSH (и, вероятно, привилегии root) на обоих концах.источник
ip tuntap add
.tun
устройство следующим образом:sudo ip tuntap add mode tun
но когда-либо использовал-w
опцию, подобную этой:ssh $Server -w $port
я получаюTunnel device open failed. Could not request tunnel forwarding.
Что я делаю не так?Или вы можете просто использовать ssf (который был разработан для этого варианта использования) с помощью простой команды:
Сторона клиента:
Эта команда перенаправляет локальный порт 53 (dns) на порт 192.168.1.1 через безопасный туннель между localhost и server.foo.com.
Вам понадобится ssf-сервер (вместо вашего сервера ssh или рядом с ним ):
Кстати, клиентская и серверная части ssf работают на Windows / Linux / Mac. Это пользовательское приложение, поэтому вам не нужно настраивать / подключать или использовать VPN.
Чтобы перенаправить порт 53, вам потребуются права администратора - независимо от того, какой инструмент вы используете.
Для получения дополнительной информации, подробностей, варианта использования или загрузки: https://securesocketfunneling.github.io/ssf/
источник
Я не смог заставить
nc
работать SNMP, потому что клиенты SNMP продолжают выбирать новый исходный порт UDP, и несколько из них могут быть активны одновременно.Вместо этого я написал пост, описывающий, как это сделать
socat
в этом посте , используя SNMP в качестве примера. По сути, используя два терминала, начиная с обзора:Терминал один:
Это создает пересылку SSH TCP-порта 10000 и запускает socat на сервере. Обратите внимание, как IP-адрес коммутатора упоминается в командной строке socat как «коммутатор».
Терминал два:
Это настраивает сокат на клиенте. Это должно сделать это.
источник
VPN - лучшее решение, если у вас есть доступ к порту UDP.
Если у вас есть доступ только к TCP-порту SSH, то SSH-туннель так же хорош, как VPN, по крайней мере, для проверки связи и обратного отслеживания пакетов.
источник