分享一下最近我对我的 ZeroTier 做了什么!用 ZeroTier 节点作为网络出口!

58 天前
Doiiars  Doiiars

之前一直以来,我都在使用 zerotier 搭建内部局域网,但是我也想,为什么我不能用 zeortier 的某个节点作为出站节点?经过几周的休息(?),这周突然有空把这玩意做了。我分享一下具体细节。其实跟着官方文档走就不错了。

核心步骤就是配置转发和配置持久化问题。

为什么选择 ZeroTier ?

前期准备

  1. 一台可用作出口节点的服务器(可以是 VPS 或者树莓派)
  2. 基本的 Linux 命令行操作知识
  3. root 或 sudo 权限

具体步骤

第一步:配置出口节点

  1. 创建 ZeroTier 网络(如果没有,先去官网创建)
  2. 安装 ZeroTier:
# 加入网络
sudo zerotier-cli join <你的网络 ID>
  1. 开启 IPv4 转发:
# 编辑配置文件
sudo nano /etc/sysctl.conf

# 添加以下内容
net.ipv4.ip_forward = 1

# 重载配置
sudo sysctl -p

# 验证设置
sudo sysctl net.ipv4.ip_forward

第二步:配置网络接口

  1. 获取网络接口名称:
ip link show
  1. 设置环境变量:
export ZT_IF=zthnhhqofq  # 你的 ZeroTier 接口名
export WAN_IF=eth0       # 你的外网接口名
  1. 配置 iptables 规则:
# 启用 NAT
sudo iptables -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE

# 允许转发
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i $ZT_IF -o $WAN_IF -j ACCEPT

# 安装 iptables-persistent 使规则持久化
sudo apt-get install iptables-persistent
sudo netfilter-persistent save

第三步:网络配置(在 ZeroTier 管理面板)

  1. 进入 Central > Network > Settings > Managed Routes
  2. 添加路由规则:0.0.0.0/0 via <你的路由节点 ZeroTier IP>

第四步:客户端配置

  1. 在托盘应用中,找到对应网络的 "Allow Default" 选项并启用
  2. 为方便使用,可以添加以下命令到 ~/.bashrc
tunnel()
{
 sudo zerotier-cli set $nwid allowDefault=1
}

notunnel()
{
 sudo zerotier-cli set $nwid allowDefault=0
}

常见问题解决

验证配置

配置完成后,你可以通过以下命令检查 IP:

curl -4 ifconfig.co  # 检查 IPv4
curl -6 ifconfig.co  # 检查 IPv6

官方文档参考: https://docs.zerotier.com/exitnode/

题外话

我测试了一下,ip 的确变成了是出口节点的 ip 。

但是有一个问题:

google 和 youtube 我莫名其妙的无法访问。而 newbing 等其他网站却不受影响。 原因我还没有排查出来。

还有就是,这样的出站方式,中间流量由 zerotier 保证和控制。因此,实际上这样的流量路由转发,并没有主流的集中魔法协议的那种伪装防护功能。其实用性存疑。但是这给了一个如何利用 zerotier 的新思路。

2804 次点击
所在节点    宽带症候群
15 条回复
xzpjerry731
58 天前
我这样配用了很久了,你最后那个问题有可能是 DNS 的问题吧,试试在“出口节点”劫持全部 DNS 请求试试
Redhut
58 天前
不能过墙,需要搭配其他协议伪装,国内还可以用用
anonymity
58 天前
zt 会被 qos 吧
Levox
58 天前
如果是 windows 如何作为网关?
wtks1
58 天前
现在 udp 别说跨境了,就算是跨省都被 qos 的惨不忍睹
yunisky
58 天前
我的玩法是,一定范围的区域内用 zt 组网 ,基本上形成 mesh 的效果,区域间另搞一个 zt 网络或者用 wg 充当骨干,区域间的连接选互联延迟最低+带宽最大+性价比最高的节点互联
区域内所有节点 ospf ,区域间节点 bgp ,在边界上的节点 ospf+bgp 双向引入
这样基本上形成了一个有点大的私网,在这个私网里的某些节点上装 ipsec 并做 NAT ,基本上从任何一个节点接入之后,就可以从其他任意一个部署了 ipsec 的节点出局了
试了一下,虽然网络本身对系统资源消耗有点大,但是确实可用
xdeng
58 天前
frp 是不是也能解决
sbboy
58 天前
我有个 zerotier 的问题想请教一下,我有同一网段下的两台机器,它们都安装了 zerotier ,它们之间用路由器分配的 IP 测速有千兆的网速,zerotier 显示直连,zerotier IP ping 延迟比路由器 IP ping 略高 0.5ms 左右,但是 zerotier IP 之间测速就不到百兆,还不稳定,请问这该怎么办呢?
starryloki
58 天前
@sbboy 排查一下 MTU 是否正确
fortitudeZDY
57 天前
这么看其实 tailscale 作了出口节点还是简化了很多,最多要求配置一下出口的 ip_forward ,不过折腾有折腾的快乐:)
fortitudeZDY
57 天前
而且 tailscale 如果启用出口,会把本机的 dns 上游设置为出口上 tailscale 暴露在仅 tailscale 成员可访问的 doH ,这样在某些场景上还是非常方便的
Doiiars
44 天前
@xzpjerry731 请问这个具体如何操作?
xzpjerry731
43 天前
@Doiiars clash 和 surge tun 模式都支持 dns hijack ,直接配*:53 就行
Doiiars
42 天前
。。。为什么我无法回复了。
Doiiars
42 天前
我说一下如何解决这种情况下的 dns 问题

打开 53 端口的防火墙,允许 DNS 流量。

重定向来自 ZeroTier 网络的 DNS 流量到本地 DNS 服务器。

持久化 DNS 配置,确保规则和配置在重启后依然生效。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1099429

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX