通过双重 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 连接到远程 digital ocean 服务器。

在我的 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。除 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

[…]

默认情况下,服务器上的侦听套接字将仅绑定到环回接口。这可以通过指定 来覆盖bind_address。空的bind_address或地址*表示远程套接字应侦听所有接口。仅当GatewayPorts启用服务器的选项时,指定远程 bind_address 才会成功(请参阅sshd_config(5))。

因此,最简单的尝试就是指定一个空的bind_address

-R :32400:localhost:32400

注意首字母:,它会产生不同。

相关内容