如何调试 SSH 端口转发

如何调试 SSH 端口转发

这是一个扩展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 与此有什么关系吗?

编辑:3ssh-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 查看两台计算机上打开的端口/连接。

相关内容