Настроить

Дома у меня есть маленькая 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 фильтр pf но я отключил его для устранения неполадок.

2 ответа2

1

Есть несколько способов сделать это. Проще всего временно создать туннель 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
0

Если я вас правильно понял, вы и ваш 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 чтобы он работал в обоих направлениях. Мне нужно проверить это, но у меня сейчас нет времени, поэтому я не могу дать вам конкретные команды прямо сейчас. Вы также должны установить его в правильном порядке, чтобы службы "прослушивания" запускались первыми, прежде чем они получат соединение от других шагов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .