雙 NAT 上的 Plex

雙 NAT 上的 Plex

我試圖繞過我的 ISP 運營商級 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/

為了實現,我有一個由 digitalocean 託管的 ubuntu 16.04 VM,它有一個公共 IP。我可以從我的 plex 伺服器(也是 ubuntu 16.04)透過 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 除了環回之外唯一的其他活動介面是 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

[…]

預設情況下,伺服器上的偵聽套接字將僅綁定到環回介面。這可以透過指定bind_address.空bind_address或位址*表示遠端套接字應偵聽所有介面。只有在GatewayPorts啟用了伺服器的選項(請參閱參考資料)時,指定遠端 bind_address 才會成功sshd_config(5)

因此,首先嘗試的最簡單的方法是指定一個空bind_address

-R :32400:localhost:32400

注意開頭的:,它有差別。

相關內容