![如何调试 SSH 端口转发](https://linux22.com/image/17732/%E5%A6%82%E4%BD%95%E8%B0%83%E8%AF%95%20SSH%20%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91.png)
这是一个扩展ssh 端口转发以从任何地方访问我的家用计算机
我尝试了那里提到的事情,但我无法ssh
使用我的机器。
Netgear 路由器端口转发设置:
Start Port: 22
End Port: 22
Server IP Address: IP address of by FreeBSD box
/etc/ssh/sshd_conf
我的 FreeBSD 盒子:
PasswordAuthentication yes
AllowUsers root
X11Forwarding yes
AllowTcpForwarding yes
我如何尝试连接:
我已注册dyndns.com
并获得了映射到我的外部 IP 地址的 URL。
从我家庭网络中的另一台机器上,我这样做:
ssh -l root my_dyndns_ip
这只是超时。
另一方面,我可以 pingmy_dyndns_url
成功。
调试:
我该如何解决这个问题,以便我可以ssh
从任何地方访问my_dnydns_url
?
我尝试查看 Netgear 路由器的日志,但 ssh 尝试失败后,路由器上未生成任何登录信息。
我也调查过/var/log/messages
但找不到任何东西。
编辑:0 在详细模式下运行 ssh (按照 @jasonwryan 建议):
我注意到一件奇怪的事情:当我通过 ssh 访问 dyndns.com 提供的 url 时,它试图连接到其他 IP 地址,而不是我从 Whatismyip.com 获得的 IP 地址。这不是错的吗?
编辑:1 dyndns 的问题现已解决。
现在,当我尝试 ssh 时,它超时并出现错误:连接超时
编辑:2 iptables 或 NAT 与此有什么关系吗?
编辑:3
我ssh
从-d option
捕获调试消息开始。
当我从 wlan 中的任何其他机器 ssh 到 freebsd 盒子时,它工作正常并且我可以看到日志。
但是当我 ssh 到外部 ip(应该将其转发到我的 freebsd 盒子)时,我什至没有看到任何日志 - 这意味着请求甚至没有到达 freebsd 盒子。并且超时了。
答案1
我认为你的问题不在于端口转发,而是路由器中 NAT 配置的另一个选项。
首先,确保如果您使用 LAN IP,则可以从网络上的另一台计算机成功进行 SSH。这可以确保 SSH 正常工作。
二、在另一台机器上测试网络外使用公共IP。这可确保端口转发正常工作。
第三,在同一台机器上进行测试网络外并使用 DynDNS URL。这可确保 DynDNS 正常工作。
如果所有这些都成功,那么您的配置没有任何问题(我假设是正确的),您的问题只是从以下位置访问公共 IP(直接或通过 DynDNS)网络内部。这意味着您的路由器需要有NAT反射启用(如果可能)将内部请求路由为公共 IP 的外部请求。
答案2
您的 sshd 服务器是否正在侦听端口 22,请尝试添加:
Port 22
到你的配置。
如果这不起作用,请尝试转发高于 1024 的端口(某些 ISP 不允许在低于 1024 的端口上传输非商业订阅者流量)。另外,请确保如果您这样做,您会更改我刚刚告诉您的conf中的行以反映相同的值。
答案3
尝试将 ssh 端口更改为 443 - 如果您能够连接到此端口,则客户端和您的家庭 PC 之间存在代理
记录防火墙中所有丢弃和转发的数据包,它可以让您找到不正确的转发规则
尝试使用 nmap(或其他工具)(端口 <1024)扫描您的外部 IP - 防火墙日志记录应显示断开的连接,并且在客户端您应该看到打开的端口
从客户端到您的家庭 PC 进行跟踪路由 - 之间是否存在任何意外的主机,这些主机是否正确转发端口?
答案4
尝试使用 tcptraceroute 来调试是否可以先访问远程端口。如果某些机器阻塞了端口,您可以在输出中看到。尝试使用 netstat -atun 查看两台计算机上打开的端口/连接。