![SSH 服务器对公共互联网不可见](https://linux22.com/image/1440912/SSH%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AF%B9%E5%85%AC%E5%85%B1%E4%BA%92%E8%81%94%E7%BD%91%E4%B8%8D%E5%8F%AF%E8%A7%81.png)
我在一台 Ubuntu (Server) 14.04 机器上安装了 OpenSSH Server。我可以通过本地网络连接,但无法通过互联网连接。我在路由器上设置了端口转发。
我努力了:
- 将端口 22 更改为另一个(随机)端口,以确保不是因为我的 ISP 阻止了端口 22
- 暂时禁用防火墙进行测试。这两种方法都无法解决问题。
知道为什么我无法连接吗?错误是:
连接到地址端口:连接被拒绝
d
输出如下netstat
:
netstat -apn | grep: 42530
(No info could be read for "-p": geteuid()=1000 but you should be root.)
tcp 0 0 0.0.0.0:42530 0.0.0.0:* LISTEN -
tcp 0 116 192.168.2.23:42530 192.168.2.11:58944 ESTABLISHED -
tcp6 0 0 :::42530 :::* LISTEN -
答案1
我会尝试一种不同的方法 - 我会做两件事 - 第一件事是在另一个端口上执行另一个 SSH 实例(不要忘记在路由器中进行端口转发) - 以 root 身份执行如下命令
/usr/sbin/sshd -p 2222 -d
这将在端口 2222 上启动另一个 SSHD 实例,并启用调试功能 - 因此它不会进入后台。然后我会尝试远程连接它,看看发生了什么。(在远程端,我还会输入类似
ssh -v ip.地址
这样我就能了解谈判的进展情况。
如果我没有看到客户端和服务器之间有任何通信,下一步就是在服务器上使用 tcpdump 来查看流量是否到达和/或离开服务器。例如:
/usr/sbin/tcpdump -n -i eth0 端口 2222
这可以测试端口转发是否正常工作 - 至少流量是否通过路由器转发并返回到路由器。
答案2
问题是路由器显然阻止了来自网络内部的到其公共 IP 的连接。如果我尝试从本地网络外部进行连接,它会接受这些连接。奇怪...