You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

EC2 Ubuntu实例SSH至外部非AWS服务器时的DNS解析及路由问题

EC2 Ubuntu实例SSH至外部非AWS服务器时的DNS解析及路由问题

看起来你碰到了两个关联的问题:DNS域名解析失败,以及能ping通目标服务器IP但SSH提示无路由。结合你已经开启VPC的DNS主机名和解析选项、本地机器能正常连接的情况,咱们一步步来排查解决:

一、先解决DNS解析问题

从你ping stream.test.northwestmedia.com提示“Name or service not known”来看,EC2实例的DNS配置大概率出了问题,你可以按以下步骤排查:

  • 查看当前实例的DNS服务器配置:执行命令 cat /etc/resolv.conf,看看输出里的nameserver字段。AWS VPC默认会提供内网DNS服务器(通常是VPC网段的第二个IP,比如10.0.0.2),如果这里是空的或者配置了错误的服务器,就会导致解析失败。
  • 临时替换DNS服务器测试:如果默认DNS不行,你可以手动编辑/etc/resolv.conf,添加公共DNS服务器,比如:
    echo "nameserver 1.1.1.1" >> /etc/resolv.conf
    
    然后再尝试ping域名,看是否能正常解析。
  • 检查VPC的DHCP选项集:如果临时替换DNS后正常,那可能是VPC的DHCP选项集配置有问题。登录AWS控制台的VPC服务,找到对应VPC的DHCP选项集,确认Domain name servers是否设置为AmazonProvidedDNS(AWS默认DNS)或者你需要的公共DNS地址,避免自定义的DHCP选项覆盖了正确配置。

二、再处理SSH无路由的问题

你能ping通目标IP 169.45.82.189,说明网络层连通性没问题,但SSH提示“No route to host”,大概率是端口层面的拦截或者路由配置问题:

  • 检查EC2实例的安全组出站规则:确保安全组的Outbound规则里,允许TCP协议的22端口访问目标IP 169.45.82.189/32(或者对应的网段)。默认安全组一般允许所有出站流量,但如果是自定义安全组,可能限制了特定端口或IP。
  • 检查目标非AWS服务器的防火墙/安全策略:因为你的本地机器能正常SSH连接,说明目标服务器允许你本地IP访问22端口,但可能没有放开EC2实例的公网IP(或者VPC的NAT网关公网IP,如果实例在私有子网)。你需要在目标服务器的防火墙里添加EC2实例的公网IP到允许列表。
  • 确认EC2实例的网络环境:如果实例在私有子网,必须确保VPC配置了NAT网关,否则私有子网的实例无法正常访问外部服务器的特定端口(虽然可能ping通部分IP,但端口转发会有问题)。如果是公有子网,确认实例已经分配了公网IP或者弹性IP。
  • 追踪路由路径:执行命令 traceroute -T -p 22 169.45.82.189,这个命令会追踪SSH数据包的传输路径,能帮你定位是在哪一跳出现了阻塞,方便针对性排查。

总结一下,先搞定DNS解析的问题,确保能正常解析目标域名,再通过安全组、防火墙和路由配置排查SSH连接的端口拦截问题,应该就能解决啦。

备注:内容来源于stack exchange,提问作者Rooster242

火山引擎 最新活动