外部 SSH 连接失败

外部 SSH 连接失败

我玩了一天系统管理员,并设置了一个新的 Ubuntu 12.04 盒子。该盒子有 2 个 NIC - 1 个用于内部连接,一个用于外部连接。我能够使用内部 ip (ssh) 通过 ssh 进入盒子[电子邮件保护]),但不能通过外部名称或 IP。最终,我得到了非常熟悉的“操作超时”消息。

对于经验丰富的管理员来说可能有用也可能没用的信息:

  • 我的 iptables 中没有任何花哨的东西(默认内容)
  • 我的sshd_config盒子可以随时随地监听一切
  • Telnet 也失败(telnet 172.XXX.XXX.XXX 22
  • 当我尝试连接时,我的/var/log/auth.log/var/log/syslog文件甚至没有闪烁。
  • 详细的 tcpdump 似乎表明请求正在到达机器。

    $ sudo tcpdump -vvv -s 1600 -i any port 22 | grep "172.XXX.XXX.XXX"
    71.XXX.XXX.XXX.43784 > 172.XXX.XXX.XXX.ssh: Flags [S], cksum 0xde3e (correct), seq 613836537, win 65535, options [mss 1380,nop,wscale 4,nop,nop,TS val 806048442 ecr 0,sackOK,eol], length 0
    

到目前为止,我已经完全不知所措了,只有谷歌能让我走到这一步。我不确定还能尝试什么。如果有人能提供任何见解、额外的调试方法或以任何其他方式阐明这一点,我将不胜感激。

当前 iptables

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

网络状态

请注意,我当前通过内部 IP 通过 SSH 进入该框。

$ sudo netstat -pant |grep ":22"
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      10691/sshd      
tcp        0      0 172.XXX.XXX.XXX:22         172.XXX.XXX.105:49948      ESTABLISHED 10055/sshd: me
tcp6       0      0 :::22                   :::*                    LISTEN      10691/sshd    

请求路由

这是关于外部请求从开始到结束如何路由的高级概述:

  1. ssh [email protected]
  2. my.domain.net 解析为 12.XXX.XXX.37
  3. 12.XXX.XXX.37 将请求传递到外部路由器
  4. 路由器将数据转发到防火墙
  5. 防火墙将 SSH 请求转发到 172.XXX.XXX.XXX(有问题的盒子)
  6. 172.XXX.XXX.XXX 显然决定它不喜欢传入的请求并将其忽略。

当然,最后一步是我正在尝试修复的。:-)

谢谢。

答案1

您可以route | grep default在虚拟机上使用来查找默认网关。如果不是路由器,端口将从这里转发,这是问题的根源 - 虚拟机将数据包发送回默认网关,而不是端口转发路由器。

相关内容