我设置了一个自托管服务器,但无法通过 ssh 进入,而且我在调试问题时遇到了麻烦。这是我在运行带有详细日志记录的 ssh 时收到的错误:
OpenSSH_9.4p1, OpenSSL 3.1.2 1 Aug 2023
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 2: include /etc/ssh/ssh_config.d/*.conf matched no files
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts' -> '/home/insomnia/.ssh/known_hosts'
debug3: expanded UserKnownHostsFile '~/.ssh/known_hosts2' -> '/home/insomnia/.ssh/known_hosts2'
debug2: resolving "databunker.monster" port 22
debug3: resolve_host: lookup databunker.monster:22
debug3: ssh_connect_direct: entering
debug1: Connecting to databunker.monster [96.245.8.33] port 22.
debug3: set_sock_tos: set socket 3 IP_TOS 0x48
debug1: connect to address 96.245.8.33 port 22: Connection timed out
ssh: connect to host databunker.monster port 22: Connection timed out
只有在尝试 ssh 进入域或公共 IP 时才会遇到此问题。当我在本地网络上使用私有 IP 时,我可以毫无问题地 ssh 进入。
我有一台 Verizon CR1000B 路由器,并在我的网络设置中设置了以下内容:
- 在高级 > 安全和防火墙 > 端口转发下,我有原始端口 = 22、协议 = TCP、转发到端口 = 22 和计划 = 始终
- 在高级 > 安全和防火墙 > 端口转发规则下,我将协议 = TCP、源端口 = 任意、目标端口 = 单个,并将 22 设置为端口。
我没有在服务器上设置任何 iptables 规则。另外值得一提的是,我只尝试从通过同一网络连接到互联网的计算机通过 ssh 进入服务器。
答案1
这可能是路由器的缺陷(尝试从外部 IP 进行 ssh 验证)。我认为端口映射仅在通过 WAN 接口的数据包中有效。这与“发夹式 NAT”相关(但不完全相同)。
当然,问题出在 TCP 级别 - 我们知道这一点是因为您收到了连接超时消息 - 所以我们知道这与数据包处理/转发/NAT 有关。