我在 Planet VRT-311S VPN 路由器上设置了静态 IP,并将端口 22(UDP 和 TCP)转发到 LAN 上的 Ubuntu 服务器。我仍然无法连接到 Ubuntu 服务器。
我目前正在外部计算机上使用以下命令:
ssh -p 22 <router's ip address>
我仍然无法连接到 Ubuntu 服务器。我该如何解决此问题?
答案1
具有公共 IP 地址的路由设备需要将端口 22 流量转发到防火墙后面的 Ubuntu 服务器。如果您告诉我们它是哪种防火墙/边缘设备,我们也许能够帮助您指明更具体的方向。
编辑:您需要检查流量是否确实被发送到您的 Ubuntu 服务器。运行 tcpdump查看 SSH 流量是否正在到达您的服务器。如果没有,则您仍然有边缘路由器问题。如果是,那么您可以开始关注 Ubuntu 服务器。一旦您弄清楚了,我们可能会为您提供更多帮助。
编辑2:如果您为端口 22 设置了端口转发,路由器将处理所有发往端口 22 的流量的转换,这些流量发往公共 IP 地址,并立即将流量发送到 Ubuntu 服务器。Ubuntu 服务器随后会看到来自路由器的流量,对端口 22 流量的任何响应都会发送到路由器,然后路由器会将其转发给您。路由器通过维护一个谁与哪个端口通信的表并为每个通信者分配唯一的会话来处理所有流量转换。这样,即使是多个人也可以使用外部 IP 地址通过 ssh 与 Ubuntu 服务器通信。
例如:如果您家中的外部 IP 地址为 1.1.1.1,办公室路由器的外部 IP 地址为 2.2.2.2,而 Ubuntu 服务器的本地 IP 为 192.168.1.10(位于 2.2.2.2 路由器后面),则流量流动如下:
- 1.1.1.1 连接到 2.2.2.2:22
- 2.2.2.2:22 被转发到 192.168.1.10:22。
- 192.168.1.10:22 响应 2.2.2.2:22 的路由器(嗯,实际上它响应的是路由器的本地 IP 地址,而不是公共 IP 地址。在这个例子中,它可能是 192.168.1.1:22。)
- 然后路由器将信息转发回您家的公共 IP 1.1.1.1。
答案2
tdpdump 在这里可能有点过头了。只需telnet <yourip> 22
从外部和telnet localhost 22
ubuntu 服务器上执行即可。Ssh 服务器应立即响应类似“SSH-2.0-OpenSSH_5.8p1-hpn13v10”的内容。
如果从本地主机进行 telnet 操作无效,则您的 ssh 服务器存在问题。如果从本地主机进行 telnet 操作有效,但从外部进行 telnet 操作无效,则这可能是与路由器相关的问题。如果两者都有效,则可能是您的 ssh 客户端存在问题。
还有一个猜测:检查服务器上的防火墙规则。你可以运行以下命令打印它们/sbin/iptables -L
。
请使用 telnet 诊断结果和防火墙规则列表更新您的答案,以便我们能够为您提供更好的建议。