从我的 LAN 内部拒绝 SSH 连接

nix*_*xer 5 ssh router port-forwarding

我在 Fedora 19 上使用ssh.

Ssh 已启动并正在运行,我可以在输入 lan ip 时连接。但是,当我尝试使用我的服务器名称 ( blahblah.no-ip.org) 时,连接被拒绝。No-ip 已经作为服务运行并且工作正常(发送正确的 ip)。

我已经在我的路由器上设置了端口转发,我还更改了ssh服务和路由器端口转发的端口(以防我心爱的 ISP 决定阻止这些端口)。但是我仍然拒绝连接,当nmap我看到主机名时,我看到 ssh 端口已关闭。

不过有一件事:我在同一个外部 ip 下有两台 PC(我已经将端口转发设置为正确的内部 ip)。当我nmap blahblah.no-ip.org打开端口 23 和 80 时。80 看起来不错,但我从来没有在我的机器上启动 telnet 服务。

还有什么想法可以尝试吗?路由器是zte zxv10,端口转发设置正确。我这样说是因为我已经为 deluge 设置了端口转发并且它工作正常。

cjm*_*cjm 9

无法从同一 LAN 内部连接到端口转发的公共 IP 地址。为了解释这一点,我需要一个例子。

假设您的路由器的私有 IP 为 192.168.1.1,公共 IP 为 10.1.1.1。您的服务器位于 192.168.1.2 端口 2222。您设置了从 10.1.1.1:1111 到 192.168.1.2:2222 的端口转发。

如果 Internet (10.3.3.3) 上的某人想与您交谈,他们会生成一个数据包:

Source: 10.3.3.3 port 33333
Dest:   10.1.1.1 port 1111
Run Code Online (Sandbox Code Playgroud)

您的路由器在 10.1.1.1 上收到数据包并重写它:

Source: 10.3.3.3 port 33333
Dest:   192.168.1.2 port 2222
Run Code Online (Sandbox Code Playgroud)

您的服务器收到该数据包并发送回复:

Source: 192.168.1.2 port 2222
Dest:   10.3.3.3 port 33333
Run Code Online (Sandbox Code Playgroud)

您的路由器在 192.168.1.1 上收到该数据包并重写它:

Source: 10.1.1.1 port 1111
Dest:   10.3.3.3 port 33333
Run Code Online (Sandbox Code Playgroud)

连接有效,每个人都很高兴。

现在假设您从 LAN (192.168.1.3) 内部连接。您生成一个数据包:

Source: 192.168.1.3 port 33333
Dest:   10.1.1.1 port 1111
Run Code Online (Sandbox Code Playgroud)

您的路由器在 10.1.1.1 上收到数据包并重写它:

Source: 192.168.1.3 port 33333
Dest:   192.168.1.2 port 2222
Run Code Online (Sandbox Code Playgroud)

您的服务器收到该数据包并发送回复:

Source: 192.168.1.2 port 2222
Dest:   192.168.1.3 port 33333
Run Code Online (Sandbox Code Playgroud)

这就是我们遇到问题的地方。由于目标 IP 在您的 LAN 上,您的服务器不会将该数据包发送到路由器进行重写。相反,它直接将其发送到 192.168.1.3。但是那台机器并不期待来自 192.168.1.2 端口 2222 的响应。它期待来自 10.1.1.1 端口 1111 的响应。因此它拒绝侦听这个“虚假”数据包,并且事情不起作用。

我解决这个问题的方法是配置我的路由器(它也为我的 LAN 提供 DNS)以在我查找我的 DDNS 主机名时返回我服务器的私有 IP 地址。这样,当我在家庭网络上时,我直接连接到服务器并跳过端口转发。(此解决方案仅在您的端口转发不更改端口号,仅更改 IP 地址时才有效。并且每个公共主机名只能有 1 个服务器。)