自建NAT64服务器,原生ipv6访问ipv4,便宜鸡拉免费鸡,将白嫖进行到底

最近纯ipv6有点小火,但ipv4访问总是个问题。看到有用warp/wg拉的,有用ss拉的,但总归不是正统路子。

NAT64是v6原生访问v4的手段,相信赛博菩萨Kasper Dupont提供的免费NAT64https://nat64.net/ 也有很多人用过,但他的服务器都在欧洲,亚洲延迟很高。自建NAT64的话网上又没有太多资料。比起测速脚本,建图床,这个赛道简直太空了好吧。

我拿LXC 256M的双栈NAT🐔建了个NAT64,便宜🐔拉免费机,完全不浪费。

打一下我的github项目,有钱的捧个钱场,没钱的留个🌟🌟也好

言归正传。

准备工作

你需要:

  • 一个双栈小鸡(同时拥有IPv4和IPv6)
  • Root权限
  • systemd/openrc相关知识
  • 已安装Linux系统(下面会有Alpine、Debian/Ubuntu和RHEL/CentOS的例子)
  1. 找出你的IPv6子网
    ip -6 route
    你会看到类似这样的内容:2001:db8🔢:/64 dev eth0 proto kernel metric 256 pref medium

这显示了你的/64子网和网络接口。记下来,后面要用!

  1. 为IPv4映射选择一个/96前缀
    从你的子网中选一个/96前缀的幸运数字用于映射IPv4地址。如果你的子网是2001:db8🔢:/64,你可以用2001:db8:1234:64:ff9b::/96,这种格式用96位作为IPv6前缀,32位用来嵌入IPv4地址。

  2. 添加本地路由

ip -6 route add local 2001:db8:1234:64:ff9b::/96 dev lo
  1. 设置NDP代理
    NDP代理的目的是让你的服务器能够回应针对NAT64前缀的NDP和RA请求。

Alpine:

# 安装npd6
apk add npd6

# 配置npd6
cat > /etc/npd6.conf <<EOF
prefix=2001:db8:1234:64:ff9b::  # 你选择的前缀
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
cat > /etc/ndppd.conf <<EOF
proxy eth0 {
  rule 2001:db8:1234:64:ff9b::/96 {
    static
  }
}
EOF

# 启动服务
systemctl enable ndppd
systemctl start ndppd

RHEL/CentOS:

# 安装ndppd
dnf install ndppd

# 配置同Debian
# 然后启动服务
systemctl enable ndppd
systemctl start ndppd

记得把2001:db8🔢64:ff9b::和eth0替换成你自己的实际值哦!

  1. 测试本地路由设置
ping -6 2001:db8:1234:64:ff9b::1234

如果遇到问题,检查一下防火墙是开的,ICMPv6是通的。

注意:有些云厂商对流量有限制。比如Oracle Cloud会过滤掉那些没有绑定到VNIC的IPv6地址的流量。龟壳一生黑。

  1. 下载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重定向流量:

ip6tables -t mangle -A PREROUTING -d 2001:db8:1234:64:ff9b::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1

运行服务器:

./nat64
  1. 设置DNS64
    你可以选择两种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: 2001:db8:1234:64:ff9b::/96
  do-not-query-localhost: yes

forward-zone:
  name: "."
  forward-addr: 1.1.1.1@53
  forward-addr: 8.8.8.8@53
EOF

将2001:db8🔢64:ff9b::/96替换为你实际的NAT64前缀,并调整forward-addr为你的DNS服务器。

重启Unbound并配置DNS:

systemctl restart unbound
echo "nameserver ::1" > /etc/resolv.conf
  1. NAT64作为服务运行
    对于systemd系统:
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

对于使用OpenRC的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
  1. 创建启动脚本,让你的设置在重启后不会丢失
    Alpine:
cat > /etc/local.d/nat64-setup.start <<EOF
#!/bin/sh

ip -6 route add local 2001:db8:1234:64:ff9b::/96 dev lo
ip6tables -t mangle -A PREROUTING -d 2001:db8:1234:64:ff9b::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1
EOF

chmod  x /etc/local.d/nat64-setup.start

Debian/Ubuntu:

cat > /etc/network/if-up.d/nat64-setup <<EOF
#!/bin/sh

ip -6 route add local 2001:db8:1234:64:ff9b::/96 dev lo
ip6tables -t mangle -A PREROUTING -d 2001:db8:1234:64:ff9b::/96 -p tcp -j TPROXY --on-port=8888 --on-ip=::1
EOF

chmod  x /etc/network/if-up.d/nat64-setup

测试

访问http://test.ustc.edu.cn,如果能访问,说明NAT64设置成功

结论 - 赚到啦!

你现在已经在一个超便宜的小鸡上搭建了一个完美运行的NAT64网关!这让你可以:

在超级便宜的纯IPv6小鸡上运行服务(我们说的是每年1-2美元那种便宜!)
从纯IPv6网络访问只支持IPv4的服务
省下一大笔钱的同时获得完整的互联网访问
整个设置甚至可以在最小的容器上运行,几乎不占资源。把这个和便宜的IPv6 VPS套餐结合起来,你就能在获得完整互联网访问的同时省下一大笔钱。

点赞
  1. crane1867说道:

    好帖!

  2. yuandatou说道:

    教程很好,但是在上网的情况下会发生:

    要买两个鸡,归咎于两个鸡的SLA和网络,创建复杂,按这个理论只要上网,还不如直接转发
    转发还不如直接用B鸡直接用。。总之就是一塌糊涂

    除非A鸡高配但是没V4的情况下可以这样 如果两只都是半斤八两的鸡 那就一言难尽 自我毁灭

  3. 云上拾荒者说道:

    @duanzhang #90
    有这么几种可能

    1. nat64没有运行权限,试试运行
      chmod a+x nat64
    2. 缺乏libc依赖包,试试运行
      apk add libc6-compat

    应该就可以了

发表回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮