连接RDS实例失败,且ping RDS内网地址时提示Destination Host Unreachable。
问题现象
从ECS实例无法ping通RDS内网地址,返回Destination Host Unreachable。
PING rm-bpxxxx.mysql.rds.aliyuncs.com (172.17.0.31) 56(84) bytes of data.
From xxxx (172.17.0.1) icmp_seq=1 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=2 Destination Host Unreachable
From xxxx (172.17.0.1) icmp_seq=3 Destination Host Unreachable问题原因
原因通常是RDS实例的内网网段与其他服务的网段冲突。
分析过程
- 使用PING命令ping RDS内网地址,可以看到RDS内网IP。从上述例子中,可以看到RDS实例内网IP为 - 172.17.0.31。
- 以Linux系统为例,执行 - route-n命令查看路由,返回信息类似如下。- Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 172.17.2.253 0.0.0.0 UG 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 172.17.0.0 0.0.0.0 255.255.255.0 U 0 0 0 br-350b446c181a- 返回信息显示网卡 - br-350b446c181a的网段为- 172.17.0.0/24,与RDS内网IP地址冲突,导致ECS实例无法路由到RDS实例。- 这种情况通常是容器服务的网段与RDS网段冲突。下面以容器服务为例,介绍如何解决路由冲突问题。 
解决方案
方案一:修改容器服务的默认网段
重要 
- 停止Docker或者修改Docker默认网段会中断业务,建议业务低峰期进行操作。 
- 修改Docker默认网段时请确保与任何现有容器和应用程序的网络设置兼容,以避免潜在的连接问题。 
以Linux系统为例,操作如下。
- 停止Docker服务。 - sudo systemctl stop docker
- 编辑Docker配置文件。Docker配置文件通常位于 - /etc/docker/daemon.json或- /etc/docker/daemon.conf(具体文件名可能有所不同)。- sudo vim /etc/docker/daemon.json- 确保文件内容如下。 - { "bip": "新的网络网段" }- 例如,将新的网络网段设置为192.168.0.0/16。 
- 保存并关闭配置文件。 
- 启动Docker服务使修改生效。 - sudo systemctl start docker
方案二:切换RDS实例的交换机
您可以切换RDS实例的交换机,使实例的交换机网段不与容器服务的网段冲突。
重要 
默认情况下,不同VPC之间无法内网互通。建议仅切换交换机,不切换VPC,这样不会影响其他阿里云服务与RDS实例的内网连接。
相关文档
该文章对您有帮助吗?