ダブルNAT経由のPlex

ダブルNAT経由のPlex

私は ISP のキャリア グレード NAT を回避し、外部から Plex サーバーにアクセスできるようにしようとしています。

2つのガイドを見つけました:

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/

実装するには、パブリック IP を持つ、digitalocean がホストする Ubuntu 16.04 VM が必要です。Plex サーバー (同じく Ubuntu 16.04) からリモートの Digital Ocean サーバーに SSH 接続できます。

Plex サーバーで次のコマンドを実行します。

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

そしてそれを画面で実行したままにします。

トンネルは成功しました。リモート ホストからループバック インターフェイスに netstat と nc -v を実行します。

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 でリッスンしていません。ループバック以外のアクティブなインターフェイスは、パブリック IP アドレスが割り当てられている eth0 のみです。そのため、remote server public IP:32400 にアクセスしようとしても何も返されません。

リモート サーバーを 32400 eth0 でリッスンさせながら、それを localserver: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

[…]

デフォルトでは、サーバ上のリスニング ソケットはループバック インターフェイスにのみバインドされます。 を指定することにより、これを上書きできますbind_addressbind_addressまたはアドレス は*、リモート ソケットがすべてのインターフェイスでリッスンする必要があることを示します。リモート bind_address の指定は、サーバのGatewayPortsオプションが有効になっている場合にのみ成功します ( を参照sshd_config(5))。

したがって、最初に試す最も簡単な方法は、空を指定することですbind_address

-R :32400:localhost:32400

最初の に注意してください:。違いが生じます。

関連情報