zerotier 内网穿透

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

一.配置 Linux 的数据转发和路由控制

  • Linux 系统内核可以通过 sysctliptables 两个命令控制网络数据转.
  • 查看内核 IP 转发设置,0 表示处于关闭状态:
  • $ sudo sysctl net.ipv4.ip_forward
  • net.ipv4.ip_forward = 0
  • 编辑配置文件开启 Linxu 内核的 IP 数据转发:
  • sudo vim /etc/sysctl.conf
  • 将第 28 行的注释去掉,设置 net.ipv4.ip_forward=1
  • net.ipv4.ip_forward=1 # lin 28
  • 激活配置文件设置:
  • $ sudo sysctl -p
  • net.ipv4.ip_forward = 1
  • 查看内核 IP 转发设置,1 表示开启状态:
  • $ sudo sysctl net.ipv4.ip_forward
  • net.ipv4.ip_forward = 1

二.查看网口信息

$ ifconfig
可以发现,在 Ubuntu 上 enp123s0f0 用来接入真实物理网络,zt7u3fcxwr 用来接入 zerotier 虚拟网络. 注意后续命令中使用网口名称的地方~
使用 iptables 启用 enp123s0f0 及zt7u3fcxwr  的网络地址转换和 IP 伪装:
sudo iptables -t nat -A POSTROUTING -o enp123s0f0 -j MASQUERADE
sudo iptables -t nat -A POSTROUTING -o zt7u3fcxwr -j MASQUERADE

iptables -I FORWARD -i zthxxxx -j ACCEPT
iptables -I FORWARD -o zthxxxx -j ACCEPT
iptables -t nat -I POSTROUTING -o zthxxxx -j MASQUERADE





允许流量转发和跟踪活动连接:
sudo iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
接下来设置从zt7u3fcxwr 到 enp123s0f0 流量转发。 反向规则不是必需的,因为在本文所述场景下没有用到:
sudo iptables -A FORWARD -i zt7u3fcxwr -o enp123s0f0 -j ACCEPT

linux流量转发

iptables -t nat -A POSTROUTING -o vmbr0(真实网卡) -j MASQUERADE

iptables -A FORWARD -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT

 iptables -A FORWARD -i zero网卡 -o vmbr0(真实网卡) -j ACCEPT

安装 apt-get install iptables-persistent

netfilter-persistent save (保持iptables规则)

  1. 加入网络命令‌:
    • 加入网络:zerotier-cli join 网络ID
    • 查看当前连接的网络列表:zerotier-cli listnetworks
  2. 查看状态和服务命令‌:
    • 查看Zerotier服务状态:zerotier-cli info
    • 启动Zerotier服务:sudo systemctl start zerotier-one.service
    • 设置Zerotier服务开机自启动:sudo systemctl enable zerotier-one.service
    • 停止Zerotier服务:sudo systemctl stop zerotier-one.service

流量转发

sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state –state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT

这三条 iptables 规则用于配置网络地址转换(NAT)和数据包转发;

含义如下:

  1. 规则 1: sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE这条规则在 nat 表的 POSTROUTING 链中添加了一条规则。-o $PHY_IFACE 表示这条规则适用于所有通过 $PHY_IFACE 这个网络接口(通常是物理接口)出去的数据包。-j MASQUERADE 指定了 NAT 操作中的伪装(masquerading)。这意味着,当数据包从 $PHY_IFACE 发送出去时,其源 IP 地址会被替换为 $PHY_IFACE 的 IP 地址。这通常用于允许内部网络通过一个公共 IP 地址进行外部通信;
  2. 规则 2: sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT这条规则在 filter 表的 FORWARD 链中添加了一条规则。-i $PHY_IFACE 表示适用于从 $PHY_IFACE 这个接口进入的数据包,-o $ZT_IFACE 表示这些数据包要转发到 $ZT_IFACE 这个接口。-m state --state RELATED,ESTABLISHED 指定了只有那些与已有连接相关或已经建立的连接的数据包才被接受(ACCEPT)。这个规则通常用于允许来自外部网络的返回流量进入内部网络,从而支持诸如 HTTP 会话等;
  3. 规则 3: sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT这条规则在 filter 表的 FORWARD 链中添加了一条规则。-i $ZT_IFACE 表示适用于从 $ZT_IFACE 这个接口进入的数据包,-o $PHY_IFACE 表示这些数据包要转发到 $PHY_IFACE 这个接口。-j ACCEPT 表示这些数据包会被接受并转发。这条规则允许来自 $ZT_IFACE 的流量经过路由器转发到 $PHY_IFACE,从而实现网络之间的数据传输;总结:
  • 第一条规则用于设置源地址伪装,允许内部网络设备通过一个公共 IP 地址进行外部通信;
  • 第二条规则允许返回流量和已经建立的连接的数据包从外部网络进入内部网络;
  • 第三条规则允许来自内部网络的数据包被转发到外部网络;

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注