分享一下最近我对我的 ZeroTier 做了什么!用 ZeroTier 节点作为网络出口!
22 December 2024 at 18:46
Doiiars:
之前一直以来,我都在使用 zerotier 搭建内部局域网,但是我也想,为什么我不能用 zeortier 的某个节点作为出站节点?经过几周的休息(?),这周突然有空把这玩意做了。我分享一下具体细节。其实跟着官方文档走就不错了。
核心步骤就是配置转发和配置持久化问题。
为什么选择 ZeroTier ?
- 完全免费且开源
- 配置简单,维护成本低
- 支持跨平台
- 性能优秀,延迟低
前期准备
- 一台可用作出口节点的服务器(可以是 VPS 或者树莓派)
- 基本的 Linux 命令行操作知识
- root 或 sudo 权限
具体步骤
第一步:配置出口节点
- 创建 ZeroTier 网络(如果没有,先去官网创建)
- 安装 ZeroTier:
# 加入网络
sudo zerotier-cli join <你的网络 ID>
- 开启 IPv4 转发:
# 编辑配置文件
sudo nano /etc/sysctl.conf
# 添加以下内容
net.ipv4.ip_forward = 1
# 重载配置
sudo sysctl -p
# 验证设置
sudo sysctl net.ipv4.ip_forward
第二步:配置网络接口
- 获取网络接口名称:
ip link show
- 设置环境变量:
export ZT_IF=zthnhhqofq # 你的 ZeroTier 接口名
export WAN_IF=eth0 # 你的外网接口名
- 配置 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 管理面板)
- 进入 Central > Network > Settings > Managed Routes
- 添加路由规则:
0.0.0.0/0 via <你的路由节点 ZeroTier IP>
第四步:客户端配置
- 在托盘应用中,找到对应网络的 "Allow Default" 选项并启用
- 为方便使用,可以添加以下命令到
~/.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 的新思路。