IPv6 Only 服务器如何实现 IPv4 网站访问:我的实战踩坑指南

最近接手了一台 IPv6 Only 的云服务器,本以为只是简单配置一下就能正常使用,结果发现很多常用网站和服务都还是 IPv4 的。经过几天的折腾和踩坑,终于找到了几种可靠的解决方案。今天就把我的实战经验分享给大家,希望能帮到遇到同样问题的朋友。
为什么需要 IPv4 访问能力?
虽然 IPv6 正在普及,但现实是:GitHub、Docker Hub、各种包管理源,甚至很多公司的内部系统仍然主要使用 IPv4。如果你的服务器无法访问这些资源,连基本的软件安装和更新都会成为问题。
方案一:使用 DNS64 + NAT64 服务
这是最简单直接的方案,不需要在服务器上安装额外软件。DNS64 会自动将 IPv4 域名解析为 IPv6 地址,然后通过 NAT64 网关进行转换。
修改 resolv.conf 使用支持 DNS64 的 DNS 服务器:
# 备份原配置
sudo cp /etc/resolv.conf /etc/resolv.conf.backup
# 使用 Cloudflare 的 DNS64 服务
echo "nameserver 2606:4700:4700::64" | sudo tee /etc/resolv.conf
echo "nameserver 2606:4700:4700::6400" | sudo tee -a /etc/resolv.conf
测试一下是否生效:
# 测试 IPv4 网站访问
ping -6 google.com
curl -6 https://www.github.com
# 查看解析结果,应该看到 IPv6 地址
nslookup google.com
踩坑提示:某些云服务商的网络配置可能会覆盖 resolv.conf,如果发现配置被重置,需要检查网络管理服务(如 systemd-resolved 或 NetworkManager)的配置。
方案二:搭建 TAYGA NAT64 网关
如果你需要更稳定的解决方案,或者对第三方 DNS 服务不放心,可以自己搭建 NAT64 网关。我选择了 TAYGA,配置相对简单。
安装和配置 TAYGA:
# Ubuntu/Debian
sudo apt update
sudo apt install tayga
# 创建配置目录和文件
sudo mkdir -p /etc/tayga
sudo tee /etc/tayga.conf << 'EOF'
tun-device nat64
ipv4-addr 192.168.255.1
prefix 64:ff9b::/96
dynamic-pool 192.168.255.0/24
data-dir /var/lib/tayga
EOF
启动和配置网络:
# 启动 TAYGA
sudo tayga
# 配置网络接口
sudo ip link set nat64 up
sudo ip addr add 64:ff9b::1 dev nat64
sudo ip route add 64:ff9b::/96 dev nat64
# 设置 IPv4 转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE
经验分享:TAYGA 的配置需要仔细检查 IP 地址段,确保不与现有网络冲突。第一次配置时,我因为 IP 段冲突折腾了好几个小时。
方案三:使用 SOCKS5 代理
对于临时的 IPv4 访问需求,或者只需要让特定应用访问 IPv4 网络,SOCKS5 代理是个轻量级的选择。
安装和配置 Dante SOCKS5 服务器:
# 安装 Dante
sudo apt install dante-server
# 配置 Dante
sudo tee /etc/danted.conf << 'EOF'
logoutput: /var/log/danted.log
internal: eth0 port = 1080
external: eth0
method: username none
user.privileged: root
user.notprivileged: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: connect disconnect
}
EOF
启动服务并测试:
# 启动 Dante
sudo systemctl start danted
sudo systemctl enable danted
# 测试代理
curl --socks5 localhost:1080 https://ipv4.google.com
方案对比和选择建议
经过实际测试,三种方案各有优劣:
- DNS64 + NAT64:配置简单,适合大多数场景,但依赖第三方服务
- 自建 NAT64:稳定性最好,可控性强,但配置相对复杂
- SOCKS5 代理:灵活轻量,适合临时需求,但需要应用支持代理
我个人建议:先尝试方案一,如果满足需求就直接使用。如果需要更高的稳定性和控制权,再考虑方案二。
常见问题排查
在配置过程中,我遇到了几个典型问题:
# 检查 DNS 解析
nslookup -query=AAAA google.com
# 测试网络连通性
ping6 -c 3 2001:4860:4860::8888
# 查看路由表
ip -6 route show
# 检查防火墙规则
iptables -L -n
ip6tables -L -n
如果遇到连接问题,记得检查服务器的防火墙设置,确保相关端口是开放的。
希望这篇教程能帮你顺利解决 IPv6 Only 服务器的 IPv4 访问问题。如果在实践中遇到其他问题,欢迎在评论区交流讨论!


DNS64方案确实简单好用,我试了效果不错