ECS实例上自建SNAT后无法访问公网

说明

本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

问题描述

同一VPC的两台ECS实例,即A实例和B实例,A实例有公网地址,B实例没有公网地址。在A实例上配置好SNAT规则,且在B实例上将路由指向A实例后,B实例还是无法访问公网。

解决方案

说明
  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。

  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。

  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

从B实例中ping A实例的公网地址,然后在两台实例中使用tcpdump命令抓包,发现A实例收到了公网地址的ICMP reply包,而B实例没有收到ICMP reply包。

  1. 在A实例中,执行以下命令,发现FORWARD链默认规则是DROP,导致ICMP reply包被丢弃。

    iptables -nvL
    说明

    若执行 iptables -nL命令,无法查看in和out参数。

  2. 执行以下命令,设置FORWARD链的默认规则为ACCEPT。

    iptables -P FORWARD ACCEPT
  3. 执行以下命令,确认修改成功。

    iptables -nvL

    系统显示类型如下。

适用于

  • 云服务器ECS

  • 轻量应用服务器