Plex через двойной NAT

Plex через двойной NAT

Я пытаюсь обойти NAT операторского уровня моего интернет-провайдера и при этом иметь возможность доступа к своему серверу Plex извне.

Я нашел два руководства:

http://www.donaldsimpson.co.uk/2016/10/24/tunneling-out-of-carrier-grade-nat-cgnat-with-ssh-and-aws/

https://amoss.me/2017/05/port-forwarding-behind-a-carrier-grade-nat/

Для реализации у меня есть виртуальная машина Ubuntu 16.04, размещенная на digitalocean, которая имеет публичный IP. Я могу подключиться по ssh с моего сервера plex (также Ubuntu 16.04) к удаленному серверу Digital Ocean.

На моем сервере Plex я запускаю следующую команду:

ssh -nNTv -R 32400:localhost:32400 root@<public IP of remote host>

И оставьте это работать на экране.

Туннель успешен. С удаленного хоста вот netstat и nc -v на интерфейс loopback:

root@Ubuntu1604:~/.ssh# nc -v 127.0.0.1 32400
Connection to 127.0.0.1 32400 port [tcp/*] succeeded!

root@Ubuntu1604:~/.ssh# netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:32400         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp6       0      0 ::1:32400               :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
root@Ubuntu1604:~/.ssh# 

Но как вы видите, он не прослушивает свой публичный IP. Единственный другой активный интерфейс помимо loopback — это eth0, которому назначен публичный IP-адрес. Поэтому если я попытаюсь получить доступ к remote server public IP:32400, я ничего не получу.

Как мне заставить мой удаленный сервер прослушивать 32400 eth0, продолжая при этом пересылать его на мой локальный сервер:32400?

решение1

У меня уже был пустой адрес привязки, проблема была в том, что мне нужно было указать привязку ко всем адресам, например так:

ssh -nNTv -R 0.0.0.0:32400:localhost:32400 root@<public IP of remote host>

решение2

Отman 1 ssh:

-R [bind_address:]port:host:hostport

[…]

По умолчанию прослушиваемый сокет на сервере будет привязан только к интерфейсу loopback. Это можно переопределить, указав bind_address. Пустой bind_addressили адрес указывает, что удаленный сокет должен прослушивать все интерфейсы. Указание удаленного bind_address будет успешным только в том случае, если включена опция *сервера (см. ).GatewayPortssshd_config(5)

Поэтому проще всего сначала попробовать указать пустой bind_address:

-R :32400:localhost:32400

Обратите внимание на начальную букву :, она имеет значение.

Связанный контент