• 首页
  • 归档
  • 关于
  • 搜索
  • 夜间模式
    ©2026  望时代 Theme by OneBlog

    望时代

    搜索
    标签
    # 教程 # Linux # 脚本 # AI # 影音 # 游戏 # 随笔 # 科技 # 认知
  • 首页>
  • >
  • 正文
  • 用Zerotier将VPS作为网关,网卡级全局路由本地的流量

    2026年06月26日 2 阅读 0 评论 4029 字

    用Zerotier将VPS作为网关,网卡级全局路由本地的流量 __2023年5月15日 __3条评论 __289次阅读 __0人点赞 __Tao_Qi 真没想到,Zerotier的玩法还是挺多的。
    由于翻墙不顺的原因来折腾这个软件,不过这对于公司组网啥的也都有帮助,只拿来翻墙属实有点大材小用了。
    可以把本文作为一个思路,大佬们可以沿着这个思路继续折腾,为了便于查看,我就不加权限了,这又不是翻墙教程XD 之前发过一个帖子,在本地是v4单栈,服务器是4 6双栈的情况下,可以把服务器多余的公网IPv6分给本地设备,并且无需NAT即可上网。
    https://www.nodeseek.com/post-3384-1 而这次,由于我想的是,墙目前不管UDP,且很多人反映IPv6 $$裸奔无事,这两个原因,我打算尝试着让本地和VPS通过v6连接,zerotier组网,然后由远程服务器负责转发本机所有的流量。
    如果要经过NAT还好,如果要直接把公网IP分配到远端,则服务器端需要静态公网IP,否则IP一变就不通了(如果拿来代理上网的话),只需要远程访问/组网的话可以不在乎这个,ZT面板上分配内网IP即可。 优点:方便,开机即用,不想用可以一键关闭,还省了其他软件。
    缺点:全局路由,不能灵活分流;速度取决于运营商是否对UDP包QoS;底层用v6容易环路。

      • *

    先看效果:
    本地电脑Win10,服务器美国,v4走CF,v6走HE。服务器和客户端之间走的是v4 UDP(强制指定v6可以通一小会,但很快就会环路,原因不明。这套方法理论上 是可行的,强制最外层用v6通信,但是不知道是因为我服务器v6是HE隧道的原因?还是什么,反正强制指定后,过一会就会环路。表现是Zerotier网卡跑满一千兆无意义数据包,会导致电脑上不了网。不知道是不是Windows自身的问题。当然,可能和ipv6非原生也有关系,因为我为了继续划分子网,接入的是HE的v6隧道。服务器上执行zerotier-cli peers看到连接到的所有客户端都是走的v4)

      • *

    首先创建Zerotier账号和网络,记下16位网络号,然后把两个设备都加入网络。
    zerotier-cli join #加入网络
    zerotier-cli set allowDefault=1 #允许覆写默认路由
    zerotier-cli set allowGlobal=1 #允许全球IP地址转发 然后进ZT后台面板批准,并且分配IP。我因为要把v6公网IP分配过来,所以用的v6是公网,不用开NAT。
    v4的话,如果你是壕,拥有一个段的公网v4的话,也可以直接分配公网IP,就省了NAT了。 我选择的内网IP段是:100.64.0.0/10,2001:db8:0000::/48
    可以在Zerotier面板的Auto-Assign中设置分配范围,新加入的客户端可以自动获取IP。 服务器IP手动分配:100.64.23.40,2001:db8::dd1c
    客户端IP自动分配。 Managed Routes中添加:
    ::/0 经由 2001:db8::dd1c
    0.0.0.0/0 经由 100.64.23.40 100.64.0.0/10 经由 LAN
    2001:db8:0000::/48 经由 LAN
    (经由LAN是写好Destination直接提交即可) 客户端这边,打勾allowManaged(默认勾选),allowGlobal,allowDefault,
    第一个是允许内网IP,第二个允许全球IP,第三个允许覆写默认路由。还有个DNS没搞明白,不用动。
    如果不勾选第二个,那么设置的公网IP不会分配下去。
    如果不勾选第三个,则不会改变默认路由。不需要全局路由时,关掉它即可,相当于总开关(或者禁用网卡也行。 然后需要在sysctl.conf里面开启Linux内核的数据包转发:
    (粘贴到命令行即可,一键生效)
    [code]

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf
    echo "net.ipv6.conf.default.forwarding = 1" >> /etc/sysctl.conf
    
    sysctl -p #生效更改
    

    [/code]

    此时发现客户端v6已经通了,但是v4没有网。这是因为v4是内网IP,无法直接路由(v4也分配公网的壕到这就不用看下去了,双栈已经通了,直接上网冲浪吧)。 登录服务器,执行命令:iptables -t nat -A POSTROUTING -s 100.64.0.0/10 -j MASQUERADE为v4开启NAT。我之前试着指定网卡,但是会有问题,比如不支持Warp,那么就按照源IP来NAT吧。
    如果v6分配的是内网IP,则也无法上网,需要开启NAT:ip6tables -t nat -A POSTROUTING -s fd00:0101:64::/48 -j MASQUERADE(假如IP段是fd00:101:64::/48,换成自己的)
    PS,如果把:101:换成💯貌似还会变成emoji,tg也有这个问题……
    之前就是因为【v6可以直接分配,v4不是公网IP】的原因所以无法通信,我就说嘛,到现在才反应过来是NAT的锅。 然后路由跟踪就通了,把ZT网卡里添加两个国外DNS,因为流量是路由出去的,所以不会被污染。
    总结:开启IPv4的NAT,实现网卡级全局路由。
    貌似不支持桥接,也不知道是不是设置有误。 记录今天折腾的内容,仅供参考。 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议

    1. kenneth说道: 2023年5月15日 下午7:18
    2. Just纱世里说道: 2023年5月15日 下午7:28
    3. Just纱世里说道: 2023年7月24日 下午2:52

    发表回复 取消回复电子邮件地址不会被公开。必填项已用 标注 __ __

    本文著作权归作者 [ doudoudoubao ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    取消回复

    发表留言
    回复

    Copyright©2026  All Rights Reserved.  Load:0.003 s
    Theme by OneBlog V3.7.1
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。