开始之前首先你要找Linode的客服申请一个/64的ipv6 pool,并要他们做好路由,一个骚扰客服的例子233:
有人可能第一时间会想到Vultr,因为这家不需要找客服申请,每台VPS开通就有/64的ipv6,但是这家的ipv6没有给你做路由,你得自己用ndppd这种东西,而后续ndppd和jool不兼容会出问题,所以Vultr是不行的。不管你们行不行,反正我这边是不行的。。
在你的LinodeVPS网络界面看到有一个新的ipv6地址块就OK了:
以下步骤使用Debian10,首先安装unbound:
apt -y update apt -y install unbound dnsutils
新建一个配置文件:
nano /etc/unbound/unbound.conf.d/dns64.conf
写入如下配置:
server: verbosity: 2 pidfile: "/var/run/unbound.pid" use-syslog: yes module-config: "dns64 iterator" dns64-prefix: 2600:3c01:e000:0396::/96 dns64-synthall: no interface: ::0 port: 53 access-control: ::0/0 allow forward-zone: name: "." forward-addr: 8.8.8.8
重启/设置unbound开机自启:
systemctl restart unbound.service systemctl enable unbound.service
测试一下DNS64服务能否正常工作,随便找一个不支持ipv6的域名dig看看,如果可以解析出我们伪造的ipv6地址就说明OK了:
接下来安装jool,利用jool来实现NAT64,需要注意的是jool不支持OpenVZ/LXC这类容器虚拟化:
apt -y install linux-headers-$(uname -r) cd /opt wget https://jool.mx/download/jool-dkms_4.0.7-1_all.deb wget https://jool.mx/download/jool-tools_4.0.7-1_amd64.deb apt -y install ./jool-dkms_4.0.7-1_all.deb ./jool-tools_4.0.7-1_amd64.deb
如果你是Debian9,上面这个安装方法会提示依赖问题,可以使用下面这种添加test源的方法安装:
echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list echo "deb-src http://deb.debian.org/debian testing main" >> /etc/apt/sources.list.d/testing.list apt -y update apt -y install linux-headers-$(uname -r) apt -y install jool-dkms jool-tools
不是很推荐添加test源的方法安装,因为这样会把你的系统很多依赖都升级到test版本,系统可能会不稳定,所以最好还是使用Debian10。
把jool自带的服务关闭了:
systemctl stop jool systemctl disable jool
加载jool的模块到内核:
modprobe jool
查看模块加载是否成功:
lsmod | grep jool
如果有类似回显说明OK:
jool 16384 0 jool_common 221184 1 jool nf_defrag_ipv6 20480 1 jool nf_defrag_ipv4 16384 1 jool x_tables 45056 2 jool,ip_tables
现在添加一个实例,实例的ipv6地址池就是Linode分配给我们的:
jool instance add "imlala" --netfilter --pool6 2600:3c01:e000:0396::/96
现在NAT64服务就搭建好了,我们可以测试一下能否工作,在你的另一台只有ipv6的小鸡上更改DNS服务器地址:
nano /etc/resolv.conf
修改成我的这台服务器地址:
nameserver 2600:3c01::f03c:92ff:fe60:7e3
然后简单测试一下:
curl -6 -v hub.docker.com
有类似回显说明我们的NAT64+DNS64服务可以正常工作:
* Connected to hub.docker.com (2600:3c01:e000:396::3df:be06) port 80 (#0) > GET / HTTP/1.1 > Host: hub.docker.com > User-Agent: curl/7.64.0 > Accept: */* > < HTTP/1.1 301 Moved Permanently < content-length: 0 < location: https://hub.docker.com/ < * Connection #0 to host hub.docker.com left intact
回到我们的服务器内删除刚添加的实例/卸载模块:
jool instance remove "imlala" modprobe -r jool
新建一个systemd服务文件:
nano /lib/systemd/system/jool-nat64.service
写入如下配置:
[Unit] Description=JOOL NAT64 After=network.target [Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/sbin/modprobe jool ExecStart=/usr/bin/jool instance add "imlala" --netfilter --pool6 2600:3c01:e000:0396::/96 ExecStop=/usr/bin/jool instance remove "imlala" CapabilityBoundingSet=CAP_SYS_MODULE CAP_NET_ADMIN NoNewPrivileges=yes ProtectSystem=strict ProtectHome=yes InaccessiblePaths=/tmp /dev ProtectKernelTunables=yes ProtectKernelModules=no ProtectControlGroups=yes RestrictAddressFamilies=AF_NETLINK RestrictNamespaces=yes LockPersonality=yes MemoryDenyWriteExecute=yes RestrictRealtime=yes SystemCallArchitectures=native [Install] WantedBy=multi-user.target
使用systemd管理jool:
systemctl start jool-nat64.service systemctl enable jool-nat64.service
My vps need a pretty young jk, thanks
你那个封面的美女怎么搞的
xshell吗?设置的透明窗口,后面是桌面壁纸。。
特地去了解了下原理,该模式需要一台双栈服务器做路由,就是 DNS64,然后发现其实现在有不少大厂也是有提供这个公共服务,比如 Google 的:https://developers.google.com/speed/public-dns/docs/dns64
Google的这个还是要配合NAT64才能用的
我想知道这个ipv6能干嘛用
一般来说开通了IPv6地址的VPS用ip addr显示inet6 …… scope global,而Vultr家的无论IPv4还是v6都是 scope global dynamic noprefixroute,只要没有noprefixroute应该都OK。
用tunnelbroker是不是也可以路由啊
我测试没有路由怎么办….