![如何通过 ssh 查找端口是否被路由器阻止](https://linux22.com/image/1421156/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20ssh%20%E6%9F%A5%E6%89%BE%E7%AB%AF%E5%8F%A3%E6%98%AF%E5%90%A6%E8%A2%AB%E8%B7%AF%E7%94%B1%E5%99%A8%E9%98%BB%E6%AD%A2.png)
我在消费级 NAT(家庭路由器)后面部署了多台服务器。我的客户端定期通过端口 3000 连接到这些服务器,我在防火墙上为端口 3000 和端口 22 打了一个洞,用于 ssh 调试。
有时客户端无法连接到一个或多个服务器。我该如何调试这种情况?我想知道失败是由于防火墙阻止我的客户端造成的,还是服务器/客户端代码中的错误造成的。
答案1
您应该使用 netcat,它是一个 Linux 命令行实用程序,允许在远程机器上动态创建服务器或客户端,并在您的机器上创建相应的服务器或客户端,然后您从一端发送消息,如果另一端收到消息,则端口是打开的。 https://www.digitalocean.com/community/tutorials/how-to-use-netcat-to-establish-and-test-tcp-and-udp-connections-on-a-vps
答案2
不确定是否真正了解你的情况。
但我心里想着三件事。
首先,如果您的所有计算机都位于同一网络上的路由器后面,则不会阻止任何内容(路由器阻止来自外部的端口,而不是来自内部的端口)。
其次,如果您可以使用 SSH,并且您的应用程序正在使用端口 3333,那么您的 SSH 服务器可能没有监听端口 3333。SSH 默认使用端口 22,如果您想使用端口 3333 进行 ssh,您需要将所有机器配置为使用该端口而不是 22。
最后,也许您的防火墙只是阻止了该端口,请查找 iptables 文档以打开该端口(这是许多发行版使用的防火墙)。