095thum16.png

视频地址:https://youtu.be/PNaF6fs2FlM

节点加入网络命令、然后面板中勾选验证


zerotier-cli join Network_ID

子网路由


#通过ip add sh或ip a命令查看zerotier接口以及本地物理接口
#把相应的接口名称赋值给变量

PHYSICAL_IFACE=<物理网卡接口名字>
ZEROTIER_IFACE=<zerotier接口名字>

#开启内核转发
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

#添加防火墙转发规则

iptables -t nat -A POSTROUTING -o $PHYSICAL_IFACE -j MASQUERADE iptables -A FORWARD -i $PHYSICAL_IFACE -o $ZEROTIER_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i $ZEROTIER_IFACE -o $PHYSICAL_IFACE -j ACCEPT iptables-save

#保存规则,持久化,重启后仍有效

sudo apt install iptables-persistent -y
sudo iptables-save > /etc/iptables/rules.v4

子网路由落地机一键脚本


#!/bin/bash

# 脚本功能:自动获取物理网卡和 ZeroTier 网卡接口名称,并设置 iptables 规则以支持 NAT 和转发

# 检查是否以 root 权限运行
if [ "$EUID" -ne 0 ]; then
    echo "此脚本需要以 root 权限运行,请使用 sudo 执行"
    exit 1
fi

# 自动获取物理网卡接口名称
# 假设物理网卡是系统中主要的以太网接口(非 lo 和虚拟接口)
PHYSICAL_IFACE=$(ip link show | grep -E '^[0-9]+: (en|eth|wlan)[0-9a-z]*:' | awk '{print $2}' | sed 's/://' | head -n 1)

if [ -z "$PHYSICAL_IFACE" ]; then
    echo "错误:未找到物理网卡接口,请检查系统网络配置"
    exit 1
fi

echo "检测到的物理网卡接口: $PHYSICAL_IFACE"

# 自动获取 ZeroTier 网卡接口名称
# ZeroTier 接口通常以 zt 开头
ZEROTIER_IFACE=$(ip link show | grep -E '^[0-9]+: zt[a-z0-9]+:' | awk '{print $2}' | sed 's/://' | head -n 1)

if [ -z "$ZEROTIER_IFACE" ]; then
    echo "错误:未找到 ZeroTier 网卡接口,请确保 ZeroTier 已安装并加入网络"
    exit 1
fi

echo "检测到的 ZeroTier 网卡接口: $ZEROTIER_IFACE"

# 启用内核转发
echo "启用内核转发..."
sysctl -w net.ipv4.ip_forward=1

# 确保内核转发在重启后依然生效
if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; then
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
fi
echo "内核转发已启用并设置为开机生效"

# 设置 iptables 规则
echo "设置 iptables 规则..."
iptables -t nat -A POSTROUTING -o "$PHYSICAL_IFACE" -j MASQUERADE
iptables -A FORWARD -i "$PHYSICAL_IFACE" -o "$ZEROTIER_IFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i "$ZEROTIER_IFACE" -o "$PHYSICAL_IFACE" -j ACCEPT

# 保存 iptables 规则
echo "保存 iptables 规则..."
iptables-save > /etc/iptables/rules.v4

# 安装 iptables-persistent 以确保规则在重启后依然有效
echo "安装 iptables-persistent..."
apt update
apt install iptables-persistent -y

# 再次保存规则,确保持久化
iptables-save > /etc/iptables/rules.v4

echo "配置完成!"
echo "物理网卡接口: $PHYSICAL_IFACE"
echo "ZeroTier 网卡接口: $ZEROTIER_IFACE"
echo "内核转发已启用"
echo "iptables 规则已设置并保存"

ACL的简单实用


# 允许指定ip间的icmp协议数据包

accept
    ipprotocol 1
    ipsrc 192.168.191.16/32 or ipsrc 192.168.191.84/32
    # ztsrc 7e435d4dae ztdest e636f3f601
    ;


# 丢弃所有的icmp协议数据包

drop
  ipprotocol 1
  ;


# 定义一个tag 名为deptartment id=1000(id必须唯一)
# 其中该有两个枚举值,分别为不同部门,sales、admin

tag department
  id 1000
  enum 10 sales
  enum 20 admin
;

# 部门枚举值差异为0的主机,之间icmp协议被允许

accept
  ipprotocol 1
  and tdiff dept 0
;


发表评论