如何为AWS Lightsail纯IPv6 Ubuntu 22实例配置NAT64服务以访问IPv4网络?
我来帮你搞定这个问题!你遇到的情况很典型:纯IPv6实例能正常访问IPv6服务,但碰IPv4就完全不通,而NAT64服务刚好能解决这个“翻译”问题——通过特殊的DNS服务器把IPv4地址转换成IPv6可识别的地址,再通过NAT网关转发流量。
因为Lightsail实例确实是通过DHCP获取网络配置的,我们可以保留DHCP分配的IPv6地址,只覆盖DNS设置,不用动IP本身。下面是具体的实操步骤:
1. 先备份当前的网络配置(安全第一!)
Lightsail的Ubuntu 22实例默认用netplan管理网络,配置文件通常是/etc/netplan/50-cloud-init.yaml(由cloud-init生成)。先备份一份以防万一:
sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.bak
2. 编辑netplan配置,添加NAT64的DNS服务器
用文本编辑器打开配置文件,比如nano:
sudo nano /etc/netplan/50-cloud-init.yaml
找到你的网卡(通常是eth0)的配置块,保留dhcp6: true(继续用DHCP获取IPv6),同时添加NAT64的DNS服务器地址。修改后的配置大概是这样:
network: ethernets: eth0: dhcp6: true dhcp4: false # 纯IPv6实例,直接禁用DHCP4 nameservers: addresses: [2a01:4f8:c2c:123f::1, 2a01:4f8:c2c:123e::1] version: 2
这里的两个IPv6地址就是你提到的NAT64服务的域名服务器,它们会自动把IPv4域名解析成纯IPv6实例能访问的特殊IPv6前缀地址。
3. 应用配置并验证
保存文件后,让netplan加载新配置:
sudo netplan apply
然后检查DNS是否生效:
systemd-resolve --status eth0 | grep "DNS Servers"
如果输出里能看到刚才设置的两个IPv6地址,就说明配置成功了!
4. 测试IPv4访问
现在再试试ping你之前访问失败的地址:
ping wordpress.org
这次应该能收到回复,不会再显示100%丢包了。如果还是有问题,先检查安全组是否允许实例的IPv6出站流量(Lightsail默认是允许的,但可以确认下),或者重启实例让配置彻底生效。
临时生效的快速测试方法(不用改配置文件)
如果你想先临时测试下效果,不用修改永久配置,可以用resolvectl命令直接设置当前会话的DNS:
sudo resolvectl dns eth0 2a01:4f8:c2c:123f::1 2a01:4f8:c2c:123e::1
这个设置重启后会消失,适合快速验证NAT64是否能正常工作。
备注:内容来源于stack exchange,提问作者Pavel Chuchuva

