Ubuntu 服务器 SSH 连接问题(可能是路由器)

Ubuntu 服务器 SSH 连接问题(可能是路由器)

我有一台使用 Ubuntu 12.04 设置的服务器。我已经安装了 OpenSSH,并且尝试使用此命令(已修改为正确的值)从另一个网络上的另一台计算机访问它:

ssh [email protected]

当我在同一个网络中的任何其他计算机上时能够连接,但是当我尝试从不同的网络 ping 我的服务器 IP 时,我得到的只是:

Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
ping: sendto: No route to host
Request timeout for icmp_seq 4
ping: sendto: Host is down
Request timeout for icmp_seq 5
ping: sendto: Host is down
Request timeout for icmp_seq 6
ping: sendto: Host is down
Request timeout for icmp_seq 7
ping: sendto: Host is down
Request timeout for icmp_seq 8
ping: sendto: Host is down
Request timeout for icmp_seq 9
ping: sendto: Host is down
Request timeout for icmp_seq 10

通过我的搜索,我发现ping有时并不可靠,所以我尝试了一下telnet my_ip,但仍然无法连接。

我假设这是路由器的问题,也可能是防火墙的问题,但我不确定是什么问题。

我确保端口 22 已打开,使用http://www.yougetsignal.com/tools/open-ports/

服务器所在的网络由 Netgear 路由器运行。ifconfig(Ubuntu 终端):

eth0      Link encap:Ethernet  HWaddr 6c:3b:e5:b8:64:3e  
          inet addr:192.168.1.5  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6e3b:e5ff:feb8:643e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:83734 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47851 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:35300099 (35.3 MB)  TX bytes:6103273 (6.1 MB)
          Interrupt:16 

eth1      Link encap:Ethernet  HWaddr 6c:3b:e5:b8:64:3f  
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:456 errors:0 dropped:0 overruns:0 frame:0
          TX packets:456 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:49255 (49.2 KB)  TX bytes:49255 (49.2 KB)

我尝试访问的网络由 Verizon 路由器运行。ifconfig(Mac 终端):

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=2b<RXCSUM,TXCSUM,VLAN_HWTAGGING,TSO4>
    ether a8:20:66:07:eb:a4 
    media: autoselect (none)
    status: inactive
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 20:c9:d0:32:05:02 
    inet6 fe80::22c9:d0ff:fe32:502%en1 prefixlen 64 scopeid 0x5 
    inet 192.168.1.69 netmask 0xffffff00 broadcast 192.168.1.255
    media: autoselect
    status: active
fw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 4078
    lladdr 00:3e:e1:ff:fe:7a:36:b0 
    media: autoselect <full-duplex>

还有什么原因可能导致该问题?

答案1

总结:您需要在路由器上配置端口转发,或将 SSH 服务器设置在 DMZ 之外,或类似操作。然后,使用路由器的 IP 地址,而不是服务器的 IP 地址。

根据您的评论,您正在使用ssh [user]@192.168.0.[some number]。仅当您连接到同一网络时,此功能才有效。

为什么?因为(据我所知,可能是)您的路由器有一个公共 IP,而您网络内的每台计算机都有一个私有 IP。您的公共 IP 如下所示:71.32.87.80。它非常随机,偶尔会更改。您的私有 IP 看起来像您在 SSH 命令中输入的 IP;它是在您连接时由路由器分配给您的计算机的。使用给定路由器的每台计算机都分配有一个私有 IP。

但是,由于流量经过路由器,因此流量就像来自路由器一样,因此也是来自您的公共 IP。这就是为什么如果网站使用基于 IP 地址的逻辑,网络内的每台计算机看起来都会一样。这也是私有 IP 和公共 IP 概念的来源:您的公共 IP 是每个人都能看到的 IP。除了您的路由器之外,没有人能看到您的私有 IP。

假设您的服务器已连接到路由器 A。当您在路由器 A 上并连接到 时192.168.0.x,您正在连接到一台也连接到路由器 A 的计算机 - 您的服务器。当您不在路由器 A 上时 - 假设您在路由器 B 上 - 并连接到 时192.168.0.x,您正在连接到连接到路由器 B 的某台计算机 -不是你的服务器。您的连接甚至从未离开路由器 B 的网络。

因此,您需要连接到路由器 A 的公共 IP,而不是服务器的私有 IP。然后,您需要配置路由器 A 以将入站流量转发到您的服务器。这实际上使路由器 A 的 IP 充当您的服务器的入站流量 IP。

注意:我意识到这个解释在易懂性方面不是最好的。请告诉我我可以做些什么来改进它。

答案2

我觉得这可能是 netfilter 问题。你检查过你的 Netgear 是否将端口 22 转发到你的服务器了吗?

如果您安装了 GUI,请添加包 gufw,如果没有,我相信有一种方法可以通过命令行,只是我不是 Ubuntu 用户。

然后确保允许从端口 22 上的“所有”进行访问,或者如果您知道远程 IP,则最好将它们添加为允许规则以保证您的安全。

相关内容