Обратный туннель UDP через ssh (с использованием socat) - PullRequest
0 голосов
/ 23 декабря 2011

Я хочу настроить обратный туннель udp, потому что мне нужно подключиться к моему серверу openvpn с удаленного компьютера, а сервер openvpn находится за NAT. Для этого я использую socat и ssh. Команда tcp tunnel:

socat exec:"ssh removeserver \"socat tcp-listen:10000,fork -\"" tcp-connect:localhost:22

работает правильно, и тогда я могу создать ssh-соединение с удаленным сервером: 10000.

Но когда я хочу сделать то же самое с udp:

socat exec:"ssh removeserver \"socat udp-listen:10000,fork -\"" udp-connect:localhost:1194

и затем попытаться создать соединение openvpn, я получаю следующую ошибку:

2011/12/23 13:27:43 socat[28241] E read(3, 0x80c3b08, 8192): Connection refused

Сначала кажется, что туннель работает, поскольку оба файла журнала (сервер и клиент) имеют записи для попытки подключения. Но соединение не может быть установлено.

1 Ответ

1 голос
/ 30 мая 2014

Я только что попробовал это, и я считаю, что причина его неудачи в том, что ssh-часть туннеля не сохраняет размеры дейтаграммы UDP.То есть.14-байтовые дейтаграммы и 22-байтовые дейтаграммы объединяются на другом конце в 26-байтовые дейтаграммы.Openvpn не работает в этом сценарии.

Я добился успеха в проверке концепции с такой же конструкцией, как эта, но там, где есть программа, которая читает дейтаграммы UDP и превращает их в поток tcp спрефиксы длиной в бит (т. е. поток длины, байты, длина, байты и т. д.) и, очевидно, также делает обратное.

С этим я смог туннелировать openvpn.

...