我有一个小型家庭网络,我无法访问该网络上的一台计算机。家庭网络已进行 NAT,我已设置了一些端口转发和动态 DNS。
rye
位于我的家庭网络上。我的路由器面向公众的端口 2222 被转发到rye
的端口 22。sorghum
位于我的家庭网络上。面向公众的端口 22 被转发到sorghum
的端口 22。teff
位于外部网络上。
我现在提出以下奇怪的场景:
- 我可以通过 SSH 从
teff
到dmwit.duckdns.org:2222
,所以我相信动态 DNS 工作正常,端口转发到rye
工作正常,并且rye
正确接受来自其他计算机的连接(即没有在防火墙级别阻止任何事物)。 - 我可以通过 SSH 从
rye
到dmwit.duckdns.org:22
,因此我相信端口转发到sorghum
工作正常,并且sorghum
可以正确接受来自其他计算机的连接。 - 从 开始
rye
,要求 Netcat 连接到 的防火墙sorghum
阻止的端口,sorghum
结果为“没有到主机的路由”,而从 开始teff
要求 Netcat 连接到 ,dmwit.duckdns.org:22
结果为“连接超时”,因此,我相信sorghum
的防火墙没有阻止此连接。 - 我无法通过 SSH 从
teff
到sorghum
(连接超时)。
我觉得这有点令人困惑;有证据表明,链条中的每个环节都运转正常,但整个链条却断裂了。我有两个具体的问题,它们彼此之间有点不相关:
- 如何进一步调试此类问题?我可以使用哪些工具来查找有关问题发生的更多详细信息?
- 我该如何修复它以便能够从 teff ssh 到 sorghum?
编辑:我找到了模糊相关的问题建议尝试 Traceroute。teff
我可以看到端口 22 和 2222 的 Traceroute 输出之间存在显著差异:
% traceroute -p 2222 -T dmwit.duckdns.org
traceroute to dmwit.duckdns.org (75.164.159.92), 30 hops max, 60 byte packets
1 gw-40.galois.com (192.168.40.1) 13.722 ms 13.723 ms 17.016 ms
2 66.162.129.25 (66.162.129.25) 17.957 ms 18.106 ms 18.289 ms
3 64-129-238-66.static.twtelecom.net (64.129.238.66) 18.949 ms sea2-pr2-xe-0-3-0-0.us.twtelecom.net (66.192.243.34) 19.250 ms 64-129-238-66.static.twtelecom.net (64.129.238.66) 19.242 ms
4 64.132.69.2 (64.132.69.2) 20.052 ms 20.291 ms 20.284 ms
5 ptld-agw1.inet.qwest.net (67.14.49.2) 22.658 ms 22.942 ms 22.932 ms
6 207.225.86.146 (207.225.86.146) 22.924 ms 8.583 ms 8.591 ms
7 * * *
8 75-164-159-92.ptld.qwest.net (75.164.159.92) 31.056 ms 29.508 ms 29.714 ms
% traceroute -p 22 -T dmwit.duckdns.org -m 60
traceroute to dmwit.duckdns.org (75.164.159.92), 60 hops max, 60 byte packets
1 gw-40.galois.com (192.168.40.1) 1.660 ms 5.667 ms 5.912 ms
2 66.162.129.25 (66.162.129.25) 5.901 ms 12.563 ms 12.555 ms
3 64-129-238-66.static.twtelecom.net (64.129.238.66) 14.227 ms sea2-pr2-xe-0-3-0-0.us.twtelecom.net (66.192.243.34) 12.796 ms 12.787 ms
4 64.132.69.2 (64.132.69.2) 12.778 ms 12.769 ms 12.762 ms
5 ptld-agw1.inet.qwest.net (67.14.49.2) 13.955 ms 13.946 ms 13.937 ms
6 207.225.86.146 (207.225.86.146) 13.931 ms 10.297 ms 10.256 ms
7 * * *
8 * * *
9 * * *
10 * * *
11 * * *
<snip>
第二行继续这样下去 20 行(如果增加最大跳数,还会继续下去)。我不太确定如何解释这一点,所以添加第三个问题:
- 这个 traceroute 输出是什么意思?
答案1
您是否已验证 teff 端没有传出 SSH 阻止?您演示了可以从 teff 连接到端口 2222 上的家庭系统,但端口 22 上可能存在传出阻止。如果您尚未验证可以从 teff 进行传出端口 22 连接,请尝试ssh github.com
从 teff 进行。您应该会看到有关 github.com 密钥的提示。您是否已验证在外部网络和内部家庭网络之间的分界点处有适当的防火墙规则,以允许来自 teff 的 IP 地址在端口 22 上的传入连接?我看到 dmwit.duckdns.org 没有对端口 22 上的 Internet 连接开放,而且您似乎只验证了 sorghum 可以从内部家庭网络地址访问,这并不一定意味着存在适当的防火墙规则允许来自其他地方的端口 22 连接。查看 sorghum 上的防火墙日志;您是否在日志中看到任何内容表明尝试从 teff 连接到端口 22?您可以使用以下方式尝试从 teff 以外的系统进行连接:SSH 服务器连通性测试然后检查 Sorghum 防火墙日志,查看是否记录了任何活动,即使防火墙阻止了连接,Sorghum 至少也应该可以通过互联网上的 22 端口访问。
答案2
尝试设置 sshd 以监听 sorghum 上除端口 22 之外的其他端口(> 1024)。这可能是提供商特定于 teffs 端的传出或 rye's/sorghum 端的传入。一些提供商会阻止某些保留端口,一个很好的例子是端口 25 smtp,因为没有提供商喜欢处理垃圾邮件发送者扫描其网络以查找开放中继的情况。无论如何,我确信这可能是原因,端口在基本 syn 测试中显示为已过滤,这可能意味着它可能在 rye/sorghums 端(入口)的提供商级别被过滤
“过滤”意味着这些端口被识别为被网络路径上的某些东西阻止。它可能是目标上的防火墙,但也可能是审计和目标机器之间任何中间主机上的过滤规则。
我能够确认同一网络内的多个地址具有相同的过滤行为。不过,我建议您阅读服务提供商的 AUP 政策,因为您可能会被限制使用默认端口。祝您好运,先生。
答案3
- 您可以使用 tcpdump(8) 和/或 wireshark(1) 等工具来查看哪些数据包到达和来自有问题的主机。因此,如果您看到 TCP SYN 数据包到达,但没有发送应答,这是由于本地防火墙(或路由)造成的。但是,如果您根本看不到 TCP SYN 数据包到达,则意味着某个防火墙在它到达您的主机之前将其丢弃。例如,您的路由器默认防火墙配置,或您的 ISP 认为在您的主机上运行的服务违反了其 ToS 和/或安全风险。
- 我建议将面向公众的端口更改
22
为例如2223
。如果它有效,则意味着 ISP 防火墙或您的家庭路由器阻止了端口 22。 - 这意味着位于第 6、7 或 8 跳的路由器(由于第 7 跳的路由器处于静默状态,因此不明确)正在丢弃目标端口为 22 的数据包(而不是端口为 2222 的数据包)。同样,这可能是您的 ISP 防火墙或家庭路由器防火墙或本地配置(例如,路由器可能为自己保留端口 22 以进行远程管理,并从外部端口断开与它的连接)。我怀疑是本地路由器。同样,最简单的检查方法是将面向公众的端口更改为 2223
sorghum