Plex über Doppel-NAT

Plex über Doppel-NAT

Ich versuche, das Carrier-Grade-NAT meines ISPs zu umgehen und trotzdem von außen auf meinen Plex-Server zugreifen zu können.

Ich habe zwei Anleitungen gefunden:

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/

Zur Implementierung habe ich eine von DigitalOcean gehostete Ubuntu 16.04-VM mit einer öffentlichen IP. Ich kann von meinem Plex-Server (ebenfalls Ubuntu 16.04) per SSH auf den Remote-Digital-Ocean-Server zugreifen.

Auf meinem Plex-Server führe ich den folgenden Befehl aus:

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

Und lassen Sie das auf einem Bildschirm laufen.

Der Tunnel ist erfolgreich. Vom Remote-Host aus gibt es hier netstat und nc -v zur Loopback-Schnittstelle:

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# 

Aber wie Sie sehen, hört es nicht auf seiner öffentlichen IP. Die einzige andere aktive Schnittstelle neben Loopback ist eth0, der die öffentliche IP-Adresse zugewiesen ist. Wenn ich also versuche, auf :32400 zuzugreifen, remote server public IPbekomme ich nichts.

Wie bringe ich meinen Remote-Server dazu, auf 32400 eth0 zu lauschen und es gleichzeitig an meinen lokalen Server:32400 weiterzuleiten?

Antwort1

Ich hatte bereits eine leere Bindungsadresse. Das Problem bestand darin, dass ich die Bindung an alle Adressen wie folgt angeben musste:

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

Antwort2

Ausman 1 ssh:

-R [bind_address:]port:host:hostport

[…]

Standardmäßig ist der Listening-Socket auf dem Server nur an die Loopback-Schnittstelle gebunden. Dies kann durch die Angabe eines außer Kraft gesetzt werden bind_address. Ein leeres Feld bind_addressoder die Adresse *gibt an, dass der Remote-Socket auf allen Schnittstellen lauschen soll. Die Angabe einer Remote-Bind-Adresse ist nur erfolgreich, wenn die Option des Servers GatewayPortsaktiviert ist (siehe sshd_config(5)).

Am einfachsten ist es, zunächst ein leeres : anzugeben bind_address.

-R :32400:localhost:32400

Beachten Sie das anfängliche :, es macht den Unterschied.

verwandte Informationen