前言
Only ipv6又没有ipv4出口的小鸡,在我们想要下载一些GitHub上的软件时无法下载,也无法执行一些需要IPV4的脚本。如果使用赛博菩萨Kasper Dupont提供的免费NAT64https://nat64.net/ ,他的服务器都在欧洲,亚洲延迟很高,网络又会比较慢。这时候,我们可能会考虑用warp,但其实也可以用一台低价低配的双栈小鸡(nat也可以),搭建nat64或则配置全屋双栈SOCKS5代理实现,本次教程是自建NAT64服务器:自建NAT64服务器访问v4的时候用的是v4机的出口,访问v6还是用v6本机出口。
准备工作
一个双栈小鸡:同时拥有IPv4和IPv6(本次用的一台年付3美元的nat)
开放双栈小鸡v6的8888端口
项目地址:https://github.com/ysshz-ns/nat64
此时我们的在Only ipv6的小鸡上执行
wget -qO- bench.sh | bash
没有任何反应,这是因为此脚本需要有IPV4才可以。
开始部署
找出IPv6子网
输入
ip -6 route
你会看到类似这样的内容:2400:1234:1234:1234::/64 dev eth0 proto kernel metric 256 pref medium
这显示了你的/64子网和网络接口。记下来,后面要用!
为IPv4映射选择一个/96前缀
从你的子网中选一个/96前缀的幸运数字用于映射IPv4地址。如果你的子网是2400:1234:1234:1234::/64,那么可以用2400:1234:1234:1234:1234::/96,这种格式用96位作为IPv6前缀,32位用来嵌入IPv4地址。记得把示例中的1234换成你自己的。
添加本地路由
ip -6 route add local 2400:1234:1234:1234:1234::/96 dev lo
设置NDP代理
NDP代理的目的是让你的服务器能够回应针对NAT64前缀的NDP和RA请求。
Alpine
安装npd6
apk add npd6
配置npd6(记得把/96
和eth0
替换成自己的实际值)
cat > /etc/npd6.conf <<EOF
prefix=2400:1234:1234:1234:1234:: #刚才的/96
interface=eth0
ralogging=off
listtype=none
listlogging=off
collectTargets=100
linkOption=false
ignoreLocal=true
routerNA=true
maxHops=255
pollErrorLimit=20
EOF
启动服务
rc-update add npd6
service npd6 start
Debian/Ubuntu
安装ndppd
apt install ndppd
配置ndppd(记得把/96
和eth0
替换成自己的实际值)
cat > /etc/ndppd.conf <<EOF
proxy eth0 {
rule 2400:1234:1234:1234:1234::/96 {
static
}
}
EOF
启动服务
systemctl enable ndppd && systemctl start ndppd
RHEL/CentOS
安装ndppd
dnf install ndppd
配置ndppd(记得把/96
和eth0
替换成自己的实际值)
cat > /etc/ndppd.conf <<EOF
proxy eth0 {
rule 2400:1234:1234:1234:1234::/96 {
static
}
}
启动服务
systemctl enable ndppd && systemctl start ndppd
测试本地路由设置
在刚才的/96地址后面随便加,例如2400:1234:1234:1234:1234::12
ping -6 2400:1234:1234:1234:1234::12
如果遇到问题,检查一下防火墙是开的,ICMPv6是通的。
下载NAT64服务器
curl -fsSL -o nat64 https://github.com/ysshz-ns/nat64/releases/download/v1.0.0/nat64
chmod +x nat64
如果是Alpine
apk add libc6-compat
如果墙里访问墙外,可能要开启tcp-brutal加速,在项目github上有更详细的说明。
配置iptables重定向流量
安装iptables
apt install iptables
配置iptables重定向流量
ip6tables -t mangle -A PREROUTING -d 2400:1234:1234:1234:1234::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1
记得把/96换成你的。
运行服务
./nat64
设置DNS64(Only v6小鸡)
你可以选择两种DNS64部署模式
服务器端DNS64:你可以在双栈服务器上同时运行DNS64和NAT64。不推荐,比较慢。
客户端DNS64:在你的纯IPv6客户端机器上运行DNS64,只在双栈服务器上运行NAT64。这种方法通常更好,因为它提供:
更快的DNS解析(本地DNS查询)
对通过NAT64的流量有完全控制权
能够选择性地只让某些域名走NAT64
你需要在v6小鸡上安装并配置Unbound,指向你的NAT64服务器的前缀。
Debian/Ubuntu
apt install unbound
Alpine
apk add unbound
RHEL/CentOS
dnf install unbound
配置DNS64
cat > /etc/unbound/unbound.conf.d/dns64.conf <<EOF
server:
module-config: "dns64 iterator"
dns64-prefix: 2400:1234:1234:1234:1234::/96
do-not-query-localhost: yes
forward-zone:
name: "."
forward-addr: 1.1.1.1@53
forward-addr: 8.8.8.8@53
EOF
把2400:1234:1234:1234:1234::和forward-addr对应的DNS换成你的。
配置DNS
echo "nameserver ::1" > /etc/resolv.conf
重启Unbound
systemctl restart unbound
测试
运行脚本
wget -qO- bench.sh | bash
此时会成功运行脚本。
NAT64作为服务运行
回到服务端,此时NAT64还未设置开机启动,此时退出SSH或者重启,NAT64不会启动。
Debian/Ubuntu/RHEL/CentOS
cat > /etc/systemd/system/nat64.service <<EOF
[Unit]
Description=NAT64 Server
After=network.target
[Service]
ExecStart=/path/to/nat64 -p 8888
Restart=always
[Install]
WantedBy=multi-user.target
EOF
启动
systemctl enable nat64 && systemctl start nat64
Alpine
cat > /etc/init.d/nat64 <<EOF
#!/sbin/openrc-run
command=/path/to/nat64
command_args="-p 8888"
pidfile=/run/nat64.pid
depend() {
need net
after network
}
start() {
ebegin "Starting NAT64"
start-stop-daemon --start --make-pidfile --pidfile \${pidfile} --background --exec \${command} -- \${command_args}
eend \$?
}
EOF
设置权限和启动
chmod +x /etc/init.d/nat64
rc-update add nat64 default
service nat64 start
创建启动脚本
为了避免在重启后不会丢失,可以创建启动脚本
Debian/Ubuntu(记得把/96
替换成自己的实际值)
cat > /etc/network/if-up.d/nat64-setup <<EOF
#!/bin/sh
ip -6 route add local 2400:1234:1234:1234:1234::/96 dev lo
ip6tables -t mangle -A PREROUTING -d 2400:1234:1234:1234:1234::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1
EOF
设置权限
chmod +x /etc/network/if-up.d/nat64-setup
Alpine(记得把/96
替换成自己的实际值)
cat > /etc/local.d/nat64-setup.start <<EOF
#!/bin/sh
ip -6 route add local 2400:1234:1234:1234:1234::/96 dev lo
ip6tables -t mangle -A PREROUTING -d 2400:1234:1234:1234:1234::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1
EOF
设置权限
chmod +x /etc/local.d/nat64-setup.start
测试
重启双栈小鸡和Only v6小鸡,然后在Only v6小鸡上执行
wget -qO- bench.sh | bash
此时会成功运行脚本。
在小鸡上下载GitHub上的软件也可以下载了。
至此说明NAT64设置成功。
评论区