Туннелирование трафика сервера через SSH, когда переадресация портов в сети недоступна?

Настроить

Дома у меня есть маленькая Raspberry Pi 3, которая запускает сервисы, которые доступны в интернете. Например, это работает HTTP-сервер. Я назову этот сервер raspberry, я могу управлять raspberry удаленно через SSH: я открыл порт 22 на моем маршрутизаторе дома и, следовательно, трафик на мой общедоступный IP-адрес для этого порта направляется raspberry, Все идет нормально.

raspberry Русская архитектура arm64 и это работает FreeBSD что делает невозможным (по-видимому, я пытался взломать, но не играли в кости) для меня, чтобы запустить игровой сервер (UrbanTerror 4.3) на нем.

У меня также есть другая машина, которая является ThinkPad (позже: thinkpad) Бег OpenBSD и у него есть amd64 архитектура, которая фактически позволяет мне запускать нужный сервер. От thinkpad Я могу получить доступ raspberry с помощью SSH.

Вопрос

Я в настоящее время не дома, но в другой сети, фактически за границей. У меня есть непреодолимое желание разместить свой сервер сейчас, но я не смог сделать это на raspberry, как я сказал.

Будет ли каким-то образом возможно запустить сервер на thinkpad и туннель весь трафик через raspberry (так как я могу выставить это в Интернете, тогда как здесь, за границей, у меня нет прав администратора на маршрутизатор)?

По сути, я хочу запустить сервер на thinkpad как будто я на нем raspberry с точки зрения сетей. То есть сервер появится в браузерах серверов, и игроки смогут подключиться: трафик будет raspberry например, через порт 27900 и он будет отправлен через Интернет через SSH thinkpad,

PS Я понимаю, что это может привести к снижению производительности из-за ретрансляции трафика через SSH, но я все еще хотел бы попробовать.

Заранее спасибо и простите за длинный пост!

РЕДАКТИРОВАТЬ 2018-12-14: вот что я уже пробовал

Так что для этого мне нужен обратный SSH-туннель. Я создал туннель из thinkpad вот так

ssh -N -R :27960:localhost:27960 <raspberry's public IP>

Туннель создан успешно. Я проверил с netstat на raspberry и он действительно слушает *:27960 (но TCP; это проблема? UrbanTerror, как и другие игры, использует UDP). Теперь я запустил сервер на thinkpad и снова с netstat Я видел, что он слушает *:27960 (UDP).

Я попытался открыть клиент UrbanTerror на thinkpad и подключение к <raspberry's IP>, но это не сработало. Для отладки я попробовал то же самое во время работы

tcpdump -n -e -ttt -i ue0 | grep 27960

на raspberry, Когда я попытался присоединиться к своему серверу через raspberry из UrbanTerror в дампе появилось следующее:

188.112.111.89.27961 > 192.168.0.33.27960: UDP, length 16
192.168.0.33 > 188.112.111.89: ICMP 192.168.0.33 udp port 27960 unreachable

(Я сократил вывод для краткости)

188.112.111.89 текущий публичный IP thinkpad а также 192.168.0.33 конечно raspberry, Почему порт 27960 недостижим? Очевидно, согласно netstat, thinkpad слушает на этом порту.

Просто для проверки подключения я попробовал запустить nc -l 27960 на thinkpad а также nc localhost 27960 на raspberry Я мог общаться в обоих направлениях без проблем.

Я думаю также стоит упомянуть, что у меня есть OpenBSD "s pf фильтр пакетов работает на обеих машинах, но я отключил его для устранения неполадок.

2 ответа

Есть несколько способов сделать это. Проще всего временно создать туннель SSH к веб-интерфейсу маршрутизатора через raspberry, Откройте UDP на маршрутизаторе, чтобы thinkpad (Сервер UrbanTerror использует только UDP, а порт по умолчанию - 27960). После этого игроки смогут подключаться к вашему общедоступному IP.

Если вы не хотите открывать другой порт на маршрутизаторе. Каждый игрок должен иметь доступ к SSH к вашему raspberry и сделать туннель переадресации порта SSH через порт TCP 22 и выполнить ретрансляцию UDP на TCP на своей машине. Вы можете сделать это с помощью socat:

Raspberry side: socat tcp4-listen:27900,reuseaddr,fork UDP:`thinkpad`:27960

Players side: socat -T15 udp4-recvfrom:27960,reuseaddr,fork tcp:localhost:27900

Если я правильно тебя понял, ты и твой thinkpad находятся за границей, raspberry дома, и вы можете удаленно настроить свой маршрутизатор дома, чтобы открыть новые порты на raspberry,

TCP против UDP имеет большое значение, потому что ssh Можно только туннелировать TCP. Таким образом, вы также должны конвертировать между ними.

Задержка в полной настройке будет очень заметна.

Вам нужно

1) Настройте маршрутизатор дома для переадресации UDP-порта 27960 на raspberry,

2) На raspberry, конвертировать с socat между UDP и TCP, последний говорит на порт 27900.

3) Создайте ssh-туннель из thinkpad к raspberry; направление будет зависеть от socat команды. Скажем, порт 27900 с обеих сторон.

4) На thinkpadиспользовать socat снова конвертировать между TCP 27900 и UDP 27960.

IIRC Вы должны быть немного осторожны, какой из вариантов UDP использовать с socat так что работает в обоих направлениях. Мне нужно проверить это, но у меня сейчас нет времени, поэтому я не могу дать вам конкретные команды прямо сейчас. Вы также должны настроить его в правильном порядке, чтобы службы "прослушивания" запускались первыми, прежде чем они получат соединение от других шагов.

Другие вопросы по тегам