借助HE+Zerotier 0成本让你所有不带IPV6的机器拥有一个公网地址
最近看到相关的信息居多,然后很多机器没有IPV6的地址
然后兴趣使然,研究了一个上午,顺便把教程给写了出来
大家有兴趣的话可以来看看,我看看还有哪些内容需要进行补充的
因为是刚写完的教程,了解的不多,有错误点帮忙指正一下
奇怪的想法[待测试]
国内自建Moon节点
然后自己家的移动是带/64的PD的
那我是不是就可以把自己的家的IPV6下发给国内的VPS了呢!!!
文章大纲
创建HE账户、就近创建隧道
机器设置HE Tunnel、创建对应的网卡
创建Zerotier One账户,并且设置对应的IPV4+IPV6地址
机器加入Zerotier Network自动分发地址
docker-compose 启动Zerotier-cli客户端
一个HE账户
一台Linux系统,文章为Debian11
一个可用的
/48 /64
PD的IPV6,文章使用HE免费IPV6
设置机器的sysctl.conf
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.proxy_ndp = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 2" >> /etc/sysctl.conf
sysctl -p
使用HE 创建隧道
创建完成之后,会获得一个IPV6 /64
的网络块
只有热门的地区才能申请/48
的网络块
IPv6 Tunnel Block
这里获取到了一个IPV6的地址
Routed IPv6 Prefixes : 2001:470:36:826::/64
IPv6 Tunnel Endpoints
Server IPv4 Address:216.218.221.42
Server IPv6 Address:2001:470:35:826::1/64
Client IPv6 Address:2001:470:35:826::2/64
机器设置IPV6地址
将显示出来的内容复制下来,下面需要用到
连接到自己的debian系统
vim /etc/network/interfaces
local 10.10.201.213
修改为自己机器的外网网卡的IP,建议显示什么就填什么建议将IPV4的
allow-hotplug
设置为auto
否则重启网卡概率会失联
重启网卡
方法一 [基本] [建议使用]
/etc/init.d/networking restart
方法二 [简单]
![](https://www.gcore.icu/wp-content/uploads/2024/01/image-1705045526945.png)
**借助itdog查询地址**
查询地址 : https://www.itdog.cn/ping_ipv6/2001:470:35:826::2
![](https://www.gcore.icu/wp-content/uploads/2024/01/image-1705045535706.png)
**成功获取到可用IPV6**
**因为有延迟返回,所以该地址是成功设置上的了**
## 使用Zerotier One来广播IPV6
- 只要连接上zerotier one的所有机器,都可以获得一个ipv6的公网地址
- 建议国内用户不要这么操作,体验很差,国外的机器没有ipv6都可以获得一个不错的体验
- 创建 [Zerotier One
账户](https://www.nodeseek.com/jump?to=https%3A%2F%2Fmy.zerotier.com%2F)
- 创建网络,由下图可见 Network ID为 `856127940cf3995d`
![](https://www.gcore.icu/wp-content/uploads/2024/01/image-1705045552453.png)
**提前规划好 内网 IPV4 + IPV6 以及公网IPV6
内网IPV4**
> 我这边使用的是
> 100.64.251.1~100.64.251.254
> 你们可以自行设置,无需和我一样,任意设置即可
![](https://www.gcore.icu/wp-content/uploads/2024/01/image-1705045585829.png)
**内网IPV6**
- 两个选项默认打开,无需修改任何
- 记住`ZeroTier RFC4193`这个后续路由需要用到
ZeroTier 6PLANE (/80 routable for each device)
公网IPV6 HE Tunnel
回到HE找到Routed IPv6 Prefixes的地址 本文以
/64
作为演示Routed IPv6 Prefixes :
2001:470:36:826::/64
借助IPV6在线计算器
在线IPV6计算器 : https://zh.rakko.tools/tools/27/
路由设置
HE Tunnel机器加入Zerotier
856127940cf3995d
是自己创建的Network ID
上文有提及
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join 856127940cf3995d
sudo zerotier-cli set 856127940cf3995d allowGlobal=true
sudo zerotier-cli set 856127940cf3995d allowDefault=1
查看Zerotier Webui的机器信息
会自动两个内网的IPV6地址
会自动分配一个内网的IPV4地址
会分配一个HE Tunnel
/64
的地址
请注意下图红框的地址
红框的地址为 ZeroTier RFC4193 (/128 for each device) 的地址
在路由设置的 Via中需要用到,自行替换
配置IPV6广播
安装 ndppdapt-get -y install ndppd
/etc/ndppd.conf
ens18
替换为自己的外网网卡地址
route-ttl 30000
address-ttl 30000
proxy ens18 {
router yes
timeout 500
autowire no
keepalive yes
retries 3
promiscuous no
ttl 30000
rule 2001:470:36:826::/64 {
auto
autovia no
}
}
重启服务,验证
sudo systemctl restart ndppd
sudo systemctl status ndppd
你会发现有Error 不要慌,再重启一次
正常了
其他的机器加入zerotier one 测试IPV6
以亚马逊AWS Debian为例
curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join 856127940cf3995d
sudo zerotier-cli set 856127940cf3995d allowGlobal=true
sudo zerotier-cli set 856127940cf3995d allowDefault=1
查看信息
root@ip-172-31-2-228:~# ifconfig
ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 172.31.2.228 netmask 255.255.240.0 broadcast 172.31.15.255
inet6 fe80::87b:d8ff:fee5:87d6 prefixlen 64 scopeid 0x20<link>
ether 0a:7b:d8:e5:87:d6 txqueuelen 1000 (Ethernet)
RX packets 33376 bytes 38576966 (38.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 11951 bytes 1224372 (1.2 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 258 bytes 26489 (26.4 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 258 bytes 26489 (26.4 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ztcfw5idkr: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 2800
inet 100.64.251.215 netmask 255.255.255.0 broadcast 100.64.251.255
inet6 2001:470:36:826:0:c2:a026:26f5 prefixlen 64 scopeid 0x0<global>
inet6 fc89:92be:c9c2:a026:26f5::1 prefixlen 40 scopeid 0x0<global>
inet6 fd85:6127:940c:f399:5d99:93c2:a026:26f5 prefixlen 88 scopeid 0x0<global>
inet6 fe80::5c5b:53ff:fe2a:b2d2 prefixlen 64 scopeid 0x20<link>
ether 5e:5b:53:2a:b2:d2 txqueuelen 1000 (Ethernet)
RX packets 1948 bytes 2811480 (2.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 871 bytes 85221 (85.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看到已经获取到了IPV6
地址为 2001:470:36:826:0:c2:a026:26f5
借助ITdog进行测试
aws机器安装nginx测试IPV6访问情况
apt-get -y install nginx
借助ITdog进行测试 Nginx
zerotier docker容器内运行
docker-compose.yaml
version: '3'
services:
zerotier-one:
image: henrist/zerotier-one
container_name: zerotier-one
restart: unless-stopped
network_mode: host
cap_add:
- NET_ADMIN
- SYS_ADMIN
devices:
- /dev/net/tun
volumes:
- ./zerotier-one:/var/lib/zerotier-one
剩下的内容懂得都懂了!
不建议国内的机器这么玩,体验一定不好
别问我ipv6有什么用,问就是没啥用,就是玩