AWS EC2 实例迁移后 WireGuard 连通但无法上网的深度排查与修复

1. 现象描述

  • 背景:将基于 t2.micro 的 WireGuard 镜像(AMI)迁移并启动为 t3.micro 实例。

  • 症状:客户端显示已连接(Handshake 成功),有发送流量,但无法打开任何网页,无法 Ping 通外网。

2. 核心原因分析

  • 网卡名称变更t2 实例使用 Xen 虚拟化,网卡名通常为 eth0enX0;而 t3 及更高版本使用 AWS Nitro 系统,网卡名变为 ens5

  • iptables 规则失效:WireGuard 的配置文件中硬编码了旧的网卡名,导致 NAT 转发(MASQUERADE)找不到出口,流量在服务器端被丢弃。

3. 关键修复步骤

第一步:定位真实网卡名

在服务器执行以下命令,确定当前起作用的公网网卡:

Bash

ip route show default | awk '/default/ {print $5}'
# 假设输出为 ens5

第二步:修正 WireGuard 配置

编辑 /etc/wireguard/wg0.conf,将 PostUpPostDown 规则中的旧网卡名(如 eth0)替换为新网卡名(如 ens5):

1. 修改配置文件

使用 sed 命令可以直接替换配置文件中的 eth0(如果你不习惯用编辑器,这最快):

Bash

sed -i 's/eth0/ens5/g' /etc/wireguard/wg0.conf

2. 重启 WireGuard 服务

让修改后的配置立即生效:

Bash

systemctl restart wg-quick@wg0

3. 开启内核转发(重要补丁)

有时候镜像迁移后内核参数会重置,执行这一步确保系统允许流量通过:

Bash

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

第三步:手动修正路由转发规则

手动更新 iptables:

Bash

# 删除旧规则
iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE 
# 添加新规则
iptables -t nat -A POSTROUTING -o ens5 -j MASQUERADE

4. 验证技巧

使用 iptables -t nat -L -n -v 查看 MASQUERADE 规则的 pkts 计数。如果计数从 0 开始跳动,说明流量已经成功转发。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部