1. 现象描述
-
背景:将基于
t2.micro的 WireGuard 镜像(AMI)迁移并启动为t3.micro实例。 -
症状:客户端显示已连接(Handshake 成功),有发送流量,但无法打开任何网页,无法 Ping 通外网。
2. 核心原因分析
-
网卡名称变更:
t2实例使用 Xen 虚拟化,网卡名通常为eth0或enX0;而t3及更高版本使用 AWS Nitro 系统,网卡名变为ens5。 -
iptables 规则失效:WireGuard 的配置文件中硬编码了旧的网卡名,导致 NAT 转发(MASQUERADE)找不到出口,流量在服务器端被丢弃。
3. 关键修复步骤
第一步:定位真实网卡名
在服务器执行以下命令,确定当前起作用的公网网卡:
Bash
ip route show default | awk '/default/ {print $5}'
# 假设输出为 ens5
第二步:修正 WireGuard 配置
编辑 /etc/wireguard/wg0.conf,将 PostUp 和 PostDown 规则中的旧网卡名(如 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 开始跳动,说明流量已经成功转发。