Tha*_*tos 5 networking ssh tcp
我在 NAT 路由器后面有一个 SSH 服务器。与 SSH 服务器位于同一 (NAT'd) 网络上的机器只能使用 LAN IP 连接到 SSH 服务器,而不能使用 WAN IP。为什么?
我的网络看起来像这样:
(the Internet, via Comcast)
|
| (cable line)
comcast modem. ? External IP of a.b.c.d,
| internal IP of 10.1.10.1 on 10.1.10.0/24
|
|
box running sshd (10.1.10.201)
Run Code Online (Sandbox Code Playgroud)
我在执行 NAT 的 Comcast 路由器后面运行 SSH 服务。使用上面获得的 IP 地址,我可以ssh me@«that IP»
从 Internet 上的任何地方运行,并接收我的 SSH 服务。如果我在路由器内部的 10.1.10.0/24 网络中运行相同的命令,连接将超时。
Comcast 路由器设置为在标准端口上将端口转发到 SSH 机器。
sshd
回答 ping该设备是一块垃圾SMC Networks SMCD3G。
在sshd
机器上执行wireshark ,同时尝试ssh 10.1.10.201
提供正常的流量。尝试ssh a.b.c.d
给出以下结果:
Source Destination Info
10.1.10.11 10.1.10.201 39946 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201 10.1.10.11 ssh > 39946 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0
10.1.10.11 10.1.10.201 39946 > ssh [RST] Seq=1 Win=0 Len=0
10.1.10.11 10.1.10.201 39946 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201 10.1.10.11 [TCP Previous segment lost] ssh > 39946 [SYN, ACK] Seq=46941561
10.1.10.11 10.1.10.201 39946 > ssh [RST] Seq=1 Win=0 Len=0
(the last three lines repeat)
Run Code Online (Sandbox Code Playgroud)
数据包似乎到达那里,但连接机器正在发送 RST。为什么?
从客户端(运行 SSH 的机器)来看,稍后的尝试如下所示:
Source Destination Info
10.1.10.11 a.b.c.d 40212 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201 10.1.10.11 ssh > 40212 [SYN, ACK] Seq=0 Ack=1 Win=5792 Len=0 MSS=1460
10.1.10.11 10.1.10.201 40212 > ssh [RST] Seq=1 Win=0 Len=0
10.1.10.11 a.b.c.d [TCP Retransmission] 40212 > ssh [SYN] Seq=0 Win=14600 Len=0 MSS=1460
10.1.10.201 10.1.10.11 [TCP Previous segment not captured] ssh > 40212 [SYN, ACK] Seq=15635206
10.1.10.11 10.1.10.201 40212 > ssh [RST] Seq=1 Win=0 Len = 0
(the last three lines repeat)
Run Code Online (Sandbox Code Playgroud)
唯一突出的是我不断收到“未捕获上一个片段”(它不是?似乎就在那里),并且来自客户端的序列号确实是确定性的。(他们不是应该从一个随机点开始,然后从那里增加吗?)
正如我在评论中所说。为了能够在 LAN 内使用您的公共 IP,您需要一些称为NAT Loopback
或NAT hairpinning
的东西NAT reflection
。
你可以在这里读到它
据我在互联网上找到的,您的...呃...“SMC Networks SMCD3G”不支持“NAT Loopback”。
您有两个选择:
10.1.10.201 fake_or_real_hostname
您可以在主机文件中添加一行。
您可以像这样连接ssh me@fake_or_real_hostname
。
您可以运行自己的本地 DNS 服务器。这是一些解释。
我解决了与您遇到的同样的问题,方法是运行我自己的本地 DNS 服务器,该服务器递归到非本地域的 OpenDNS,并使用本地 DNS A 和 PTR 记录创建区域,将我的外部主机名解析为该主机的 LAN IP。
在这两种情况下,最好使用主机名而不是 IP。如果您的公共 IP 变化很大,您可以使用动态主机名服务来获取主机名(例如 myname.dyndns.org)。它也更容易记住。如果您选择选项 1,您可以将此名称添加到您的主机文件中。
其中一些是:
DynDNS
FreeDNS
ZoneEdit
No-Ip
我的调制解调器可以选择自动向这些服务注册 IP 更改。还有一些桌面实用程序可以在您的公共 IP 更改时更新它。
归档时间: |
|
查看次数: |
5617 次 |
最近记录: |