静看光阴荏苒
不管不顾不问不说也不念

在Linode的VPS上自建NAT64+DNS64服务

开始之前首先你要找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
赞(3)
未经允许不得转载:荒岛 » 在Linode的VPS上自建NAT64+DNS64服务
分享到: 更多 (0)

评论 11

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    My vps need a pretty young jk, thanks :roll:

    橘子4年前 (2020-03-30) Google Chrome 75.0.3770.124 Google Chrome 75.0.3770.124 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • :arrow:

      LALA4年前 (2020-03-30) Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 10 x64 Edition Windows 10 x64 Edition回复
  2. #2

    你那个封面的美女怎么搞的 :?:

    yzhang4年前 (2020-03-30) Google Chrome 80.0.3987.87 Google Chrome 80.0.3987.87 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • xshell吗?设置的透明窗口,后面是桌面壁纸。。

      LALA4年前 (2020-03-30) Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 10 x64 Edition Windows 10 x64 Edition回复
  3. #3

    特地去了解了下原理,该模式需要一台双栈服务器做路由,就是 DNS64,然后发现其实现在有不少大厂也是有提供这个公共服务,比如 Google 的:https://developers.google.com/speed/public-dns/docs/dns64 :oops:

    欧文斯4年前 (2020-03-31) Google Chrome 80.0.3987.132 Google Chrome 80.0.3987.132 Windows 10 x64 Edition Windows 10 x64 Edition回复
    • Google的这个还是要配合NAT64才能用的 :razz:

      LALA4年前 (2020-04-02) Google Chrome 74.0.3729.169 Google Chrome 74.0.3729.169 Windows 10 x64 Edition Windows 10 x64 Edition回复
  4. #4

    我想知道这个ipv6能干嘛用

    夜晚硬邦邦4年前 (2020-04-23) Google Chrome 61.0.3163.100 Google Chrome 61.0.3163.100 Mac OS X  10.15.4 Mac OS X 10.15.4回复
  5. #5

    一般来说开通了IPv6地址的VPS用ip addr显示inet6 …… scope global,而Vultr家的无论IPv4还是v6都是 scope global dynamic noprefixroute,只要没有noprefixroute应该都OK。

    lalala4年前 (2020-05-16) Opera 68.0.3618.63 Opera 68.0.3618.63 Windows 10 x64 Edition Windows 10 x64 Edition回复
  6. #6

    用tunnelbroker是不是也可以路由啊

    ty4年前 (2020-05-31) Safari 10.0 Safari 10.0 iPad iOS 10.0.2 iPad iOS 10.0.2回复
  7. #7

    我测试没有路由怎么办….

    BaiZhi4年前 (2020-07-25) Google Chrome 83.0.4103.61 Google Chrome 83.0.4103.61 Windows 10 x64 Edition Windows 10 x64 Edition回复

分享创造快乐

广告合作资源投稿