我正在尝试通过公共 IP 地址的 SSH 启用对我的家庭服务器的 SSH 访问。但 SSH 服务器没有响应来自公共 IP 地址的请求。来自本地 IP 的连接工作正常。
我已经在路由器中设置了端口转发,并且在路由器防火墙和服务器 iptables 防火墙中都允许连接。
在 iptables 中,我有以下规则:
pkts bytes target prot opt in out source destination
117 7052 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh
每次我尝试建立连接时,我都能看到“pkts”字段递增。
我还可以从 WireShark 中看到服务器在端口 22 上接收到 TCP SYN 数据包,但没有匹配的传出 ACK 数据包。
我还进行了检查,/etc/ssh/sshd
以确保其中不存在任何会根据 IP 地址进行区分的东西。
我已经使用 journalctl 查看了日志,但当我尝试建立连接时,它们没有显示任何内容。我尝试使用 手动运行 sshd /usr/sbin/sshd -d
,但当我尝试建立连接时没有任何输出。
现在我不知道问题可能出在哪里。还有什么可以根据 IP 地址阻止连接?
答案1
好吧,我发现了这个问题,它与 ssh 完全无关。我的服务器配置了错误的网关地址,因此它无法将数据包发送到 WWW——只能发送到 LAN 上的其他机器。这是一个愚蠢的错误,但它导致了我意想不到的行为。如果我在 WireShark 中更仔细地观察,我就会看到服务器发送 ARP 数据包来搜索错误的网关。