转发一篇自己的博客,最新内容以博客为准
在IPv6日益普及的今天,我们仍时常需要访问那些IPv4网络资源(例如GitHub),对于一台只有IPv6地址的服务器来说,这无疑是一大痛点。
本文将带你在一台Debian 12服务器上,使用 Tayga (高性能用户空间NAT64网关)、Unbound (轻量级DNS64服务器) 和 ndppd (NDP代理软件),从零开始搭建一个公共NAT64/DNS64服务,实现纯IPv6的客户机也能够访问纯IPv4的服务。
一、 环境与规划
在开始之前,请确保服务器满足以下条件:
- 操作系统: Debian 12
- 公网IPv4地址: 至少一个可以访问公网的IPv4地址,静态动态都可以
- 公网IPv6地址段: 至少一个静态的
/96
以上的IPv6地址段。 (本文示例:2602:aaaa:bbbb:cccc::/64
,服务器主地址为2602:aaaa:bbbb:cccc::1
)
网卡名称:
用来对外通信的主网卡的名称,根据自身情况填写。 (本文示例: eth0
)
规划NAT64前缀:
我们将从自己的IPv6段中规划出一个/96
的子网,专门用于合成IPv4地址。
- 本文选定的前缀:
2602:aaaa:bbbb:cccc:6464:6464::/96
二、 系统基础配置
-
更新系统:
sudo apt update && sudo apt upgrade -y
-
开启内核转发:
要让服务器能像路由器一样转发数据包,必须开启内核的IP转发功能。# 编辑sysctl配置文件 sudo tee -a /etc/sysctl.conf > /dev/null <<EOT net.ipv4.ip_forward=1 net.ipv6.conf.all.forwarding=1 EOT # 立即应用配置 sudo sysctl -p
三、 配置Unbound (DNS64 服务器)
Unbound负责将只有IPv4地址的域名“欺骗性”地解析成一个包含该IPv4地址的特殊IPv6地址。
-
安装Unbound:
sudo apt install unbound -y
-
创建配置文件:
sudo nano /etc/unbound/unbound.conf.d/dns64.conf
将以下内容完整粘贴进去:
server: interface: :: port: 53 do-ip4: no do-ip6: yes do-udp: yes do-tcp: yes access-control: 2a14:67c0::/29 allow # 自己加白名单进行控制,这里以Alice的IPv6作为示例 access-control: ::1 allow hide-identity: yes hide-version: yes harden-glue: yes harden-dnssec-stripped: yes use-caps-for-id: yes edns-buffer-size: 1472 prefetch: yes num-threads: 1 msg-cache-size: 32m rrset-cache-size: 64m module-config: "dns64 validator iterator" dns64-prefix: 2602:aaaa:bbbb:cccc:6464:6464::/96 forward-zone: name: "." forward-addr: 2606:4700:4700::1111@53 forward-addr: 2606:4700:4700::1001@53 forward-addr: 2001:4860:4860::8888@53 forward-addr: 2001:4860:4860::8844@53
四、 配置Tayga (NAT64 网关)
Tayga是执行协议转换的核心。
-
安装Tayga:
sudo apt install tayga -y
-
编辑配置文件:
sudo nano /etc/tayga.conf
清空文件内容,然后完整粘贴以下配置:
# 创建名为 nat64 的虚拟网络接口 tun-device nat64 # 为Tayga内部通信分配一个私有IPv4地址 ipv4-addr 192.168.255.1 # 定义NAT64前缀,必须与Unbound配置中的dns64-prefix一致 prefix 2602:aaaa:bbbb:cccc:6464:6464::/96 # 定义用于映射IPv6客户端的私有IPv4地址池 dynamic-pool 192.168.255.0/24 # 数据存储目录 data-dir /var/spool/tayga
五、 配置UFW防火墙
配置UFW,允许流量在不同接口之间进行转发,并对外放行DNS服务端口
-
添加转发策略:
# 允许从 nat64 转发到 eth0 sudo ufw route allow in on nat64 out on eth0 # 允许从 eth0 转发到 nat64 sudo ufw route allow in on eth0 out on nat64
-
放行DNS服务端口:
sudo ufw allow 53
六、 配置ndppd (NDP代理)
这是让外部客户端能够找到我们服务器上合成的IPv6地址的关键一步。
我在这里踩坑踩了好久,不知道什么原因,我的系统上使用net.ipv6.conf.eth0.proxy_ndp = 1
并不能成功代理NDP,最后换用了ndppd才解决。
-
安装ndppd:
sudo apt install ndppd -y
-
编辑配置文件:
sudo nano /etc/ndppd.conf
粘贴以下配置内容:
proxy eth0 { router yes timeout 500 ttl 30000 rule 2602:aaaa:bbbb:cccc:6464:6464::/96 { static } }
七、 启动所有服务
全部配置完成之后,启用全部服务。
-
设置全部服务开机自启,并同时启动所有服务:
sudo systemctl enable --now unbound sudo systemctl enable --now tayga sudo systemctl enable --now ndppd
八、 最终验证
- 找一台只有IPv6连接的客户机。
- 将其DNS服务器地址设置为您的NAT64服务器的公网IPv6地址(
2602:aaaa:bbbb:cccc::1
)。 - 在客户机上,访问任何一个只有IPv4的网站:
成功返回结果,大功告成!curl -v http://ipinfo.io