侧边栏壁纸
  • 累计撰写 25 篇文章
  • 累计创建 10 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

自建NAT64服务器——让IPV6访问IPV4

Joe
Joe
2025-10-10 / 0 评论 / 0 点赞 / 27 阅读 / 0 字

前言

Only ipv6又没有ipv4出口的小鸡,在我们想要下载一些GitHub上的软件时无法下载,也无法执行一些需要IPV4的脚本。如果使用赛博菩萨Kasper Dupont提供的免费NAT64https://nat64.net/ ,他的服务器都在欧洲,亚洲延迟很高,网络又会比较慢。这时候,我们可能会考虑用warp,但其实也可以用一台低价低配的双栈小鸡(nat也可以),搭建nat64或则配置全屋双栈SOCKS5代理实现,本次教程是自建NAT64服务器:自建NAT64服务器访问v4的时候用的是v4机的出口,访问v6还是用v6本机出口

准备工作

  1. 一个双栈小鸡:同时拥有IPv4和IPv6(本次用的一台年付3美元的nat)

  2. 开放双栈小鸡v6的8888端口

项目地址:https://github.com/ysshz-ns/nat64

此时我们的在Only ipv6的小鸡上执行

wget -qO- bench.sh | bash

没有任何反应,这是因为此脚本需要有IPV4才可以。

开始部署

找出IPv6子网

输入

ip -6 route

img

你会看到类似这样的内容: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(记得把/96eth0替换成自己的实际值

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(记得把/96eth0替换成自己的实际值

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(记得把/96eth0替换成自己的实际值

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部署模式

  1. 服务器端DNS64:你可以在双栈服务器上同时运行DNS64和NAT64。不推荐,比较慢。

  2. 客户端DNS64:在你的纯IPv6客户端机器上运行DNS64,只在双栈服务器上运行NAT64。这种方法通常更好,因为它提供:

  3. 更快的DNS解析(本地DNS查询)

  4. 对通过NAT64的流量有完全控制权

  5. 能够选择性地只让某些域名走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设置成功。

0

评论区