logo NodeSeekbeta

【技术贴】通过Zerotier把VPS大把的IPv6分配给远程设备

十分钟没新帖了,论坛真的过气了(bushi
如果我以后搭博客了,可能会把这篇文章完善下发过去,所以转载请注明来源,本贴或者未来的博客都行。
不过就以我的讲话水平,估计难以说清楚吧。

你是否发现,VPS拥有数以万计的IPv6,平时却只能用那个以::1结尾的上网?这是否有些浪费?
这次,我们把它们利用起来,远程分配给不支持v6的设备,让它们也能被全球访问。
论坛老咸鱼应该对我挺眼熟的,事实上,我一直都很喜欢拥抱这些新技术。

需要:
支持v4的服务器,如果你要用Tunnelbroker,则要求v4必须是静态公网IP
如果服务器支持v6且可以继续分配(夏树下述)的话,可以不用HE的tunnelbroker;
Zerotier(软件)

服务器和本地电脑之间,通过v4通信,服务器同时为客户端提供v6地址,接入v6网络和分配全球可达的公网IPv6。
服务器/客户端都可以配置防火墙,设置成只许出不许进也行,看你们的了。
如果服务器拥有公网IPv4,那么它就是一个自建的IPv6隧道,至于如何连接服务器,这就是各位的事情了,我相信各位最擅长的就是这个:)

首先,通过SSH连接VPS,输入如下命令:

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #开启v4的转发,备用,不需要可以#掉。
echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.autoconf = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.default.autoconf = 0" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.accept_ra = 0" >> /etc/sysctl.conf
#vps接受路由通告,充当路由器,转发数据包
sysctl -p

好极了,此时你的VPS会像路由器一样,转发“源地址和目标地址都不是它本身”的数据包。在默认情况下,它是会丢弃那些包的。

然后登入你的VPS供应商后台,先看看它给的v6前缀(子网)可否被路由?
找一个有IPv6的环境去路由跟踪这个网段内部的地址,看看是否会经过VPS/网关?没有的话就说明这个段没被母鸡路由,需要安装ndppd并且进行广播。

这个以后单独开贴说。

>ip -6 route add local 2001:db8:ffff:340::/64 dev lo
#让VPS认为这段IP全部都属于自身lo网卡,此时你PING该段内任意一个IP,都会被VPS应答,如果没有,就说明不可继续分配了。

绿云的/112,Hax的/112(不确定的内容),Virtono的/64和Cloudcone的三个/128都是不可继续分配的。
HE的Tunnelbroker是可以继续分配的,有些VPS厂商应该也支持,但是我没试过,如果有大佬赏我一台V6小鸡的root测试下就好了。

这里假设你的服务器的v6已经工作正常。
我实在是找不到支持分配前缀的商家,以下用的是HE的Tunnelbroker。我就不演示如何接入HE了。不明白的话请点击这里

转发正常的话,安装Zerotier,或者是其他VPN软件也行,但是DHCP需要你自己设置,ZT可以在管理面板分配IP,简单粗暴。

curl -s https://install.zerotier.com | sudo bash

如果报错,说明系统太精简,需要安装curl和sudo

apt update
apt install curl sudo

等待ZT安装成功,去官网注册账号,创建网络,记下16位网络号,输入

zerotier-cli join <你的16位ZT网络号> #加入网络
zerotier-cli set <你的16位ZT网络号> allowDefault=1 #允许覆写默认路由
zerotier-cli set <你的16位ZT网络号> allowGlobal=1 #允许全球IP地址转发

客户端也安装Zerotier并操作。
好极了,然后在Zerotier的后台为每个设备分配地址,允许访问权限(Auth栏打勾),例如你的IPv6静态前缀是2001:db8:0:0::/64的话,

接入HE隧道的VPS作为网关,地址分配 2001:db8:0:0:5161:79ff:fe6f:7269
Windows作为客户端,地址分配 2001:db8:0:0:18f7:d07:905e:69f2
在ZT的Managed Routes中,设置路由:
::/0 经由 2001:db8:0:0:5161:79ff:fe6f:7269
2001:db8:0:0::/64 经由 (不填写,直接提交,显示为经由LAN)
提醒下,2001:db8只能出现在文档中,它不能上网,这里只是示例。

:5161:79ff:fe6f:7269是单词“Sayori(纱世里)”转换成ASCII再按照MAC地址格式转换成EUI-64的IPv6。Windows客户端的v6是脸滚键盘按出来的,无特殊含义。
此时Windows和VPS都获得了IPv6地址,互相PING一下能不能通:

勾选Zerotier客户端的allowGlobal,allowDefault,和allowManaged(默认勾选)
此时路由跟踪一下2606:4700:4700::1111

再打开https://ipv6-test.com/

外网路由跟踪一下:

延迟高的不像话,毕竟是UDP+晚高峰。优化线路白天效果更好些。
然后开启你的加密DNS,访问ipv6.google.com成功打开!
因为6in4 Tunnelbroker无加密,而访问谷歌这一步已经是VPS和HE服务器之间的事情了,VPS到本地电脑是Zerotier加密的UDP包。办公电脑等不方便装某射线的时候,可以顺便用这种方法出去,只是底层是UDP的,电信可能卡得没法子正常用。
联通,下午速度测试(数据有轻微浮动,IP地址是假的):

欢迎步入互联网世界的未来!
如果帮到了您,欢迎给我加鸡腿,我会开心很久的,诶嘿嘿~

12345
  • 我直接手撸
    ip route add blackhole 2001:470:****::/48

    然后目标是固定IP的话
    ip tunnel add abc mode sit remote x.x.x.x local x.x.x.x
    ip link set abc up
    ip route add 2001:470:****:1000::/52 dev abc
    一个/52的段给分出去,当然也可以分更小的,客户端自己玩去

    或者放一个istap
    ip tunnel add abc mode isatap remote any local x.x.x.x
    ip link set abc up
    ip addr add 2001:470:****:1002::1/64 dev abc
    客户端的事情就自行解决

    就是这两种方式传输层的协议号都是41,不是普通的TCP/UDP,NAT下可能不太好用
    楼主的那个没玩过,不知道是不是也是41传输的

  • 好贴,Zerotier是一直想去摸的一个东西
    鸡腿已投喂

  • 好贴,但是看不懂。期待一键脚本

  • 看不懂,但我知道很nb

  • 技术贴 狠狠的顶!

  • xhj007 牛的

  • 技术贴,鸡腿必须给 xhj006

  • mark yct001

  • 问题是数据还是要通过vps转发吗? 这有啥意义呢,跟端口转发好像没啥区别

  • @seesee #8

    端口转发是IPv4时代遗留的东西,这样一折腾,每台接入Zerotier的设备都是公网IP,网关也不用浪费性能去跟踪哪条链接是谁发起的,闭着眼睛转发就行了,过墙只是个副作用。
    单纯的把HE隧道和本地路由器连接的话,要求家宽是公网,还有ddns问题,而且跨墙不加密,随便玩玩就阻断了。

    因为我发现很多人还是很抵触IPv6,但是它现在已经很完善了。VPS厂商如果给一大把v6,很多人只用一个,甚至完全禁用。都不积极推行新协议,再过一百年,v6也取代不了v4。

    我觉得未来v4有可能彻底退网,只供个人、公司之间的内网使用,公网上都是v6单栈也说不定。

  • 好诗,先收藏了

12345

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有14683位seeker

🎉欢迎新用户🎉