commit
9d7d6160bc
61
config/sites.yaml
Normal file
61
config/sites.yaml
Normal file
@ -0,0 +1,61 @@
|
||||
# 基础网络参数
|
||||
wg_network: 10.100.0.0/24
|
||||
bridge_network: 172.16.0.0/16
|
||||
vxlan_id: 100
|
||||
hub_port: 51820
|
||||
|
||||
# 全局功能开关
|
||||
features:
|
||||
enable_gretap: true # 是否开启 gretap 桥接(站点接入 Hub)
|
||||
enable_vxlan_between_hubs: true # 是否开启 Hub 之间的 VXLAN Mesh
|
||||
enable_vless: true # 是否通过 VLESS 中转 WG 流量
|
||||
enable_multi_hub: true # 是否支持多 Hub 架构(false 则为单 Hub star 架构)
|
||||
only_wireguard: false # 若为 true,仅使用 WireGuard 点对点,忽略 gretap/vxlan
|
||||
|
||||
# WireGuard Hub 节点配置
|
||||
hubs:
|
||||
- name: hub1
|
||||
wg_ip: 10.100.0.1
|
||||
br_ip: 172.16.0.1
|
||||
public_ip: hub1.example.com
|
||||
|
||||
- name: hub2
|
||||
wg_ip: 10.100.1.1
|
||||
br_ip: 172.16.1.1
|
||||
public_ip: hub2.example.com
|
||||
|
||||
# 各个站点定义
|
||||
sites:
|
||||
- name: site_a
|
||||
wg_ip: 10.100.0.2
|
||||
br_ip: 172.16.0.2
|
||||
hub: hub1
|
||||
public_ip: a.example.com
|
||||
vless:
|
||||
enabled: true
|
||||
endpoint: vless-a.example.com
|
||||
uuid: "11111111-1111-1111-1111-111111111111"
|
||||
transport: ws
|
||||
tls: true
|
||||
path: /wg
|
||||
|
||||
- name: site_b
|
||||
wg_ip: 10.100.0.3
|
||||
br_ip: 172.16.0.3
|
||||
hub: hub1
|
||||
public_ip: b.example.com
|
||||
vless:
|
||||
enabled: false # 此节点不通过 VLESS,直接访问 Hub
|
||||
|
||||
- name: site_c
|
||||
wg_ip: 10.100.1.2
|
||||
br_ip: 172.16.1.2
|
||||
hub: hub2
|
||||
public_ip: c.example.com
|
||||
vless:
|
||||
enabled: true
|
||||
endpoint: vless-c.example.com
|
||||
uuid: "33333333-3333-3333-3333-333333333333"
|
||||
transport: ws
|
||||
tls: true
|
||||
path: /xray
|
||||
157
vpn-overlay/README.md
Normal file
157
vpn-overlay/README.md
Normal file
@ -0,0 +1,157 @@
|
||||
# VPN Overlay 文档
|
||||
|
||||
本项目通过 **WireGuard + VLESS + gretap/VXLAN** 构建跨云、跨平台的大二层互联网络,兼顾穿透、防火墙规避、性能与扩展性。
|
||||
|
||||
---
|
||||
|
||||
## 一、组网概述:核心协议与封装层级
|
||||
|
||||
### 1. WireGuard (WG)
|
||||
- 类型:L3 VPN(UDP 点对点随身障碍线)
|
||||
- 用途:形成低负载加密通道
|
||||
|
||||
### 2. VLESS + XTLS
|
||||
- 类型:TLS/gRPC 路由封装协议
|
||||
- 用途:作为 WireGuard 流量的带容中转
|
||||
|
||||
### 3. gretap over WireGuard
|
||||
- 类型:L2 over L3 over UDP
|
||||
- 用途:支持二层网络,包括 ARP/广播/DHCP
|
||||
|
||||
### 4. VXLAN over WireGuard
|
||||
- 类型:L2 over UDP
|
||||
- 用途:适合多 Hub 分区组网和广播
|
||||
|
||||
---
|
||||
|
||||
## 二、性能、效率、成本、场景对比
|
||||
|
||||
| 对比项 | gretap over WG | VXLAN over WG |
|
||||
|--------|----------------|----------------|
|
||||
| 封装协议 | GRE (L2 over IP) | VXLAN (L2 over UDP) |
|
||||
| 架构 | 点对点 | 多点(支持组播) |
|
||||
| 广播能力 | 完整 L2 广播 | 支持 VXLAN 组播 |
|
||||
| WG 使用 | gretap 用于 local/remote | VXLAN dev 发包 |
|
||||
| 多 Hub 扩展 | 差 | 强(VXLAN ID + 组播) |
|
||||
| 效率 | 高(原生内核支持) | 略低(UDP 重封) |
|
||||
| 云平台兼容 | 需隔缘 GRE | 要求放行 UDP 4789 |
|
||||
| MTU | 推荐 1400-1420 | 同上 |
|
||||
| 平台 | Linux only | 支持 K8s/OpenStack/Linux |
|
||||
|
||||
---
|
||||
|
||||
## 三、示意结构
|
||||
|
||||
### 基本层级
|
||||
```
|
||||
[站点主机]
|
||||
└─ vxlan100 (L2 Overlay over UDP)
|
||||
└─ br0 (虚拟大局域网)
|
||||
└─ wg0 (VPN加密接口)
|
||||
└─ VLESS 客户端 (XTLS/TCP/GRPC)
|
||||
└─ GFW
|
||||
└─ VLESS 服务端 (公网)
|
||||
└─ WireGuard Hub
|
||||
|
||||
### Overlay 网络
|
||||
|
||||
```
|
||||
WG Layer3 网段: 10.100.0.0/24
|
||||
SiteA.wg0: 10.100.0.2 → WG-Hub: 10.100.0.1 → SiteB.wg0: 10.100.0.3
|
||||
|
||||
L2 Bridge br0: 172.16.0.0/16
|
||||
SiteA.br0: 172.16.1.1
|
||||
SiteB.br0: 172.16.2.1
|
||||
```
|
||||
|
||||
### 混合组网 (VXLAN + gretap)
|
||||
|
||||
```
|
||||
WG-Hub-1 === VXLAN === WG-Hub-2
|
||||
| |
|
||||
Site A Site B
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、配置开关说明 & 自动化逻辑
|
||||
|
||||
| 开关 | 默认 | 说明 |
|
||||
|------|------|------|
|
||||
| enable_gretap | true | 启用站点到 Hub 的 gretap 连接 |
|
||||
| enable_vxlan_between_hubs | true | 启用 Hub 间 VXLAN 桥接 |
|
||||
| enable_vless | true | 站点通过 VLESS 转发 WG 流量 |
|
||||
| enable_multi_hub | true | 启用多 Hub 组网 |
|
||||
| only_wireguard | false | 禁用 gretap/VXLAN,仅使用 WG |
|
||||
|
||||
**自动化逻辑**
|
||||
- 如果 vless.enabled: true → 生成 `xray-client.json` + 修改 wg0 endpoint
|
||||
- gretap 启用 → 生成 br0 框架
|
||||
- vxlan 启用 → 生成 vxlan100 和 bridge fdb mapping
|
||||
- only_wireguard = true → 不生成 gretap/VXLAN 结构
|
||||
|
||||
---
|
||||
|
||||
## 五、VXLAN 多 Hub 实现 (bridge fdb broadcast)
|
||||
|
||||
```bash
|
||||
ip link add vxlan100 type vxlan id 100 dev wg0 dstport 4789 group 239.1.1.100 ttl 10
|
||||
|
||||
bridge fdb add 00:00:00:00:00:00 dev vxlan100 dst 10.100.1.1
|
||||
bridge fdb add 00:00:00:00:00:00 dev vxlan100 dst 10.100.2.1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、组网演进实践
|
||||
|
||||
| 阶段 | 架构 | 开关 | 场景 |
|
||||
|------|--------|----------------|------|
|
||||
| 1. P2P | 单点对 | only_wireguard: true | WG 连接测试 |
|
||||
| 2. Site2Site | 多站 | enable_gretap: true | L2 互联 |
|
||||
| 3. Net2Net | 多 LAN 桥接 | enable_gretap + br0 | 应用组织 |
|
||||
| 4. Single Hub | 中心 Hub | enable_multi_hub: true | 合约管理 |
|
||||
| 5. Double Hub | 双中心 | enable_vxlan_between_hubs: true | 多地区融合 |
|
||||
| 6. Multi Hub | 多中心 | 全部开 | 大型实施 |
|
||||
|
||||
### Step-by-Step
|
||||
|
||||
#### 第一步: P2P 模型
|
||||
- 启用 WG 通信
|
||||
- 配置 /etc/wireguard/wg0.conf
|
||||
|
||||
#### 第二步: 二站 L2 通
|
||||
- 启用 gretap
|
||||
- 框架 br0 + 连接 gretap0
|
||||
|
||||
#### 第三步: Net2Net
|
||||
- 多个 LAN 通过 br0 带入 gretap 框架
|
||||
|
||||
#### 第四步: Signal Hub
|
||||
- 各站点 gretap 连接 Hub
|
||||
- 如有需要同时启用 VLESS
|
||||
|
||||
#### 第五步: Double Hub
|
||||
- Hub 间通过 VXLAN 结合 WG 融合
|
||||
- 用 bridge fdb 构建组播 VXLAN
|
||||
|
||||
#### 第六步: Multi Hub 应用
|
||||
- 每个 Hub 都搭建 vxlan100 和 br0
|
||||
- 站点自选最近 Hub
|
||||
- 支持任意云平台
|
||||
|
||||
---
|
||||
|
||||
## 七、扩展建议
|
||||
|
||||
| 类型 | 内容 |
|
||||
|------|------|
|
||||
| 自动部署 | generate_all.sh 一键生成配置 |
|
||||
| YAML 配置 | 集中 config/sites.yaml |
|
||||
| 多平台 | 根据 uname 选择 GRE/VXLAN |
|
||||
| 灾处备份 | 多 Hub 配置切换 |
|
||||
| 状态监控 | Prometheus 搭配 WG Exporter |
|
||||
|
||||
---
|
||||
|
||||
> 本项目支持定制化配置,合适各类场景,有关 YAML 配置、服务启动脚本、应用调试相关内容,请连续跟踪项目文档和 config 文件夹。
|
||||
0
vpn-overlay/config/sites.yaml
Normal file
0
vpn-overlay/config/sites.yaml
Normal file
12
vpn-overlay/gretap/setup_hub_gretap.sh
Normal file
12
vpn-overlay/gretap/setup_hub_gretap.sh
Normal file
@ -0,0 +1,12 @@
|
||||
# 添加 br0 和多个 gretap 接口(每个分支一个)
|
||||
ip link add gretap_a type gretap local 10.100.0.1 remote 10.100.0.2
|
||||
ip link add gretap_b type gretap local 10.100.0.1 remote 10.100.0.3
|
||||
ip link add gretap_c type gretap local 10.100.0.1 remote 10.100.0.4
|
||||
|
||||
ip link add br0 type bridge
|
||||
brctl addif br0 gretap_a
|
||||
brctl addif br0 gretap_b
|
||||
brctl addif br0 gretap_c
|
||||
ip addr add 172.16.0.1/16 dev br0
|
||||
ip link set br0 up
|
||||
|
||||
21
vpn-overlay/gretap/setup_site_gretap.sh
Normal file
21
vpn-overlay/gretap/setup_site_gretap.sh
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
#!/bin/bash
|
||||
|
||||
# 启动 WireGuard
|
||||
wg-quick up wg0
|
||||
|
||||
# gretap to Site A
|
||||
ip link add gretap_a type gretap local 10.100.0.1 remote 10.100.0.2
|
||||
ip link set gretap_a up
|
||||
|
||||
# gretap to Site B
|
||||
ip link add gretap_b type gretap local 10.100.0.1 remote 10.100.0.3
|
||||
ip link set gretap_b up
|
||||
|
||||
# 创建桥接
|
||||
ip link add br0 type bridge
|
||||
ip link set gretap_a master br0
|
||||
ip link set gretap_b master br0
|
||||
ip addr add 172.16.0.1/16 dev br0
|
||||
ip link set br0 up
|
||||
|
||||
0
vpn-overlay/templates/generate_all.sh
Normal file
0
vpn-overlay/templates/generate_all.sh
Normal file
19
vpn-overlay/topology/l2_topology.mmd
Normal file
19
vpn-overlay/topology/l2_topology.mmd
Normal file
@ -0,0 +1,19 @@
|
||||
|
||||
|
||||
graph TD
|
||||
subgraph Hub1
|
||||
H1[Hub1]
|
||||
A[Site A]
|
||||
B[Site B]
|
||||
H1 --> A
|
||||
H1 --> B
|
||||
end
|
||||
|
||||
subgraph Hub2
|
||||
H2[Hub2]
|
||||
C[Site C]
|
||||
H2 --> C
|
||||
end
|
||||
|
||||
H1 <--> H2
|
||||
|
||||
0
vpn-overlay/topology/l2_topology.vsdx
Normal file
0
vpn-overlay/topology/l2_topology.vsdx
Normal file
50
vpn-overlay/vxlan/README.md
Normal file
50
vpn-overlay/vxlan/README.md
Normal file
@ -0,0 +1,50 @@
|
||||
# VXLAN Overlay 工具集
|
||||
|
||||
本目录包含构建与诊断二层 VXLAN Overlay 网络的实用脚本,适用于云主机场景(如 AWS EC2),支持安全模式(保留 eth0 仅用于管理面)。
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ 脚本列表
|
||||
|
||||
| 脚本名称 | 说明 |
|
||||
|----------|------|
|
||||
| `setup_sit_vxlan.sh` | 安全模式部署 VXLAN Overlay 网络,仅桥接 `vxlan + veth` |
|
||||
| `overlay_diag.sh` | 自动诊断 VXLAN 接口、桥接状态、FDB 转发表、Overlay 连通性 |
|
||||
|
||||
---
|
||||
|
||||
## 🚀 使用方法
|
||||
|
||||
### 1️⃣ 初始化 Overlay 网络
|
||||
|
||||
- dev_interface:出口物理网卡(如 ens5)
|
||||
- local_ip:本机内网 IP(VXLAN 使用)
|
||||
- remote_ip:对端节点的内网 IP
|
||||
- br0_ip:本地 Overlay 地址(如 10.255.0.2)
|
||||
- cidr_suffix(可选):默认为 16(设置为 /16 子网)
|
||||
- vxlan_id(可选):默认 100
|
||||
|
||||
示例: bash setup_sit_vxlan.sh ens5 54.65.102.93 18.179.15.13 10.255.0.2 16 100
|
||||
|
||||
### 2️⃣ 诊断 Overlay 网络连通性
|
||||
|
||||
示例:
|
||||
|
||||
bash overlay_diag.sh <local_overlay_ip> <remote_overlay_ip>
|
||||
bash overlay_diag.sh 10.255.0.2 10.255.0.3
|
||||
|
||||
诊断内容:
|
||||
|
||||
- 接口是否存在、是否为 UP 状态;
|
||||
- br0 IP 是否为非 /32 掩码;
|
||||
- bridge fdb 是否学习到对端 MAC;
|
||||
- ping 测试 Overlay 层连通性;
|
||||
- NAT(MASQUERADE)规则是否存在;
|
||||
- VXLAN 报文抓包命令提示(UDP port 4789)。
|
||||
|
||||
### 📦 典型应用场景
|
||||
|
||||
- 构建多节点跨主机的 L2 Overlay 隧道;
|
||||
- 支持 VXLAN over 公网 IP,内部互通 10.255.0.0/16;
|
||||
- 云主机或虚拟机跨可用区桥接;
|
||||
- 上层可用于 gretap、bridge、L2 BGP、广播集群等。
|
||||
78
vpn-overlay/vxlan/overlay_diag.sh
Normal file
78
vpn-overlay/vxlan/overlay_diag.sh
Normal file
@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
# overlay_diag.sh - VXLAN Overlay 自动诊断工具(Pro 版)
|
||||
|
||||
set -e
|
||||
|
||||
if [ $# -ne 2 ]; then
|
||||
echo "用法: $0 <local_overlay_ip> <remote_overlay_ip>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
LOCAL_IP="$1"
|
||||
REMOTE_IP="$2"
|
||||
BR_IF="br0"
|
||||
VETH_A="veth_overlay"
|
||||
VETH_B="veth_peer"
|
||||
VXLAN_IF=$(ip -o link show | grep -o 'vxlan[0-9]\+' | head -n 1)
|
||||
VXLAN_ID=$(echo "$VXLAN_IF" | grep -o '[0-9]\+')
|
||||
|
||||
echo "============================"
|
||||
echo "🔍 VXLAN Overlay 网络诊断工具"
|
||||
echo "============================"
|
||||
echo "📍 本地 Overlay IP: $LOCAL_IP"
|
||||
echo "📍 对端 Overlay IP: $REMOTE_IP"
|
||||
echo "📦 VXLAN 接口: $VXLAN_IF"
|
||||
echo "🆔 VXLAN ID: $VXLAN_ID"
|
||||
echo ""
|
||||
|
||||
# 接口存在性检测
|
||||
for iface in "$VXLAN_IF" "$VETH_A" "$VETH_B" "$BR_IF"; do
|
||||
if ip link show "$iface" &>/dev/null; then
|
||||
echo "✅ 接口 $iface 存在"
|
||||
else
|
||||
echo "❌ 接口 $iface 不存在"
|
||||
fi
|
||||
done
|
||||
echo ""
|
||||
|
||||
# 接口 UP 状态
|
||||
for iface in "$VXLAN_IF" "$VETH_A" "$VETH_B" "$BR_IF"; do
|
||||
state=$(cat /sys/class/net/$iface/operstate 2>/dev/null || echo "unknown")
|
||||
echo "📶 接口 $iface 状态: $state"
|
||||
done
|
||||
echo ""
|
||||
|
||||
# br0 IP 信息
|
||||
br0_ip=$(ip -4 addr show "$BR_IF" | grep -oP 'inet \K[\d.]+/\d+')
|
||||
if [[ "$br0_ip" == */32 ]]; then
|
||||
echo "⚠️ br0 IP 为 /32:$br0_ip → 建议设置为 /16 或其他实际子网"
|
||||
else
|
||||
echo "✅ br0 IP 设置为:$br0_ip"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# FDB 表
|
||||
echo "📡 FDB 转发表 (bridge fdb show dev $VXLAN_IF):"
|
||||
bridge fdb show dev "$VXLAN_IF"
|
||||
echo ""
|
||||
|
||||
# ping 连通性测试
|
||||
echo "🔁 ping 对端 Overlay IP: $REMOTE_IP(从 $VETH_A 发起)"
|
||||
ping -c 3 -I "$VETH_A" "$REMOTE_IP" || echo "⚠️ ping 失败,可能未打通 VXLAN 或对端未启动"
|
||||
echo ""
|
||||
|
||||
# iptables SNAT 检查
|
||||
echo "🧱 iptables NAT 规则检查(是否有 MASQUERADE):"
|
||||
iptables -t nat -S POSTROUTING | grep MASQUERADE || echo "⚠️ 没有检测到 MASQUERADE 规则"
|
||||
echo ""
|
||||
|
||||
# 抓包提示
|
||||
echo "🔬 VXLAN 报文检测提示(需 root 权限):"
|
||||
echo "👉 可运行以下命令查看 VXLAN 报文是否流动:"
|
||||
echo " sudo tcpdump -ni $VXLAN_IF udp port 4789"
|
||||
echo " sudo tcpdump -ni $VETH_B"
|
||||
echo " sudo tcpdump -ni $BR_IF"
|
||||
echo ""
|
||||
|
||||
echo "📌 若 ping 不通但 FDB 存在,可能为对端未配置、未学习或防火墙阻断。"
|
||||
echo "✅ 诊断完成!"
|
||||
28
vpn-overlay/vxlan/setup_hub_vxlan.sh
Normal file
28
vpn-overlay/vxlan/setup_hub_vxlan.sh
Normal file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
VXLAN_ID=100
|
||||
VXLAN_DEV=vxlan100
|
||||
WG_DEV=wg0
|
||||
BRIDGE=br0
|
||||
|
||||
# 本地 WG IP
|
||||
LOCAL_IP=10.100.0.1
|
||||
|
||||
# 远端 Hub WG IPs(去掉本地)
|
||||
PEERS=(
|
||||
10.100.1.1
|
||||
10.100.2.1
|
||||
)
|
||||
|
||||
# 创建 VXLAN
|
||||
ip link add $VXLAN_DEV type vxlan id $VXLAN_ID dev $WG_DEV dstport 4789 local $LOCAL_IP
|
||||
ip link set $VXLAN_DEV up
|
||||
|
||||
# 添加静态 FDB 映射
|
||||
for PEER_IP in "${PEERS[@]}"; do
|
||||
bridge fdb add 00:00:00:00:00:00 dev $VXLAN_DEV dst $PEER_IP
|
||||
done
|
||||
|
||||
# 添加进 br0
|
||||
brctl addif $BRIDGE $VXLAN_DEV
|
||||
|
||||
78
vpn-overlay/vxlan/setup_sit_vxlan.sh
Normal file
78
vpn-overlay/vxlan/setup_sit_vxlan.sh
Normal file
@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
# 安全版 VXLAN Overlay 脚本(参数顺序改为 dev_if + ip 信息)
|
||||
|
||||
set -e
|
||||
|
||||
DEV_IF="$1"
|
||||
LOCAL_IP="$2"
|
||||
REMOTE_IP="$3"
|
||||
BRIDGE_IP="$4"
|
||||
CIDR_SUFFIX="${5:-16}"
|
||||
VNI="${6:-100}"
|
||||
|
||||
if [ -z "$DEV_IF" ] || [ -z "$LOCAL_IP" ] || [ -z "$REMOTE_IP" ] || [ -z "$BRIDGE_IP" ]; then
|
||||
echo "Usage: $0 <dev_interface> <local_ip> <remote_ip> <br0_ip> [cidr_suffix] [vxlan_id]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VXLAN_IF="vxlan${VNI}"
|
||||
BR_IF="br0"
|
||||
VETH_A="veth_overlay"
|
||||
VETH_B="veth_peer"
|
||||
BRIDGE_CIDR="${BRIDGE_IP}/${CIDR_SUFFIX}"
|
||||
SUBNET="$(echo "$BRIDGE_IP" | cut -d. -f1-2).0.0/${CIDR_SUFFIX}"
|
||||
|
||||
echo "🧠 安全模式:仅桥接 $VXLAN_IF 和 $VETH_B,不动 $DEV_IF"
|
||||
|
||||
# 清理旧接口
|
||||
for iface in "$VXLAN_IF" "$BR_IF" "$VETH_A" "$VETH_B"; do
|
||||
if ip link show "$iface" &>/dev/null; then
|
||||
echo "🧹 删除旧接口 $iface..."
|
||||
ip link set "$iface" down || true
|
||||
ip link del "$iface" || true
|
||||
fi
|
||||
done
|
||||
|
||||
# 创建 VXLAN 接口
|
||||
echo "[1] 创建 VXLAN 接口:$VXLAN_IF"
|
||||
ip link add "$VXLAN_IF" type vxlan id "$VNI" dstport 4789 local "$LOCAL_IP" remote "$REMOTE_IP" dev "$DEV_IF"
|
||||
ip link set "$VXLAN_IF" up
|
||||
|
||||
# 创建 veth pair
|
||||
echo "[2] 创建 veth pair:$VETH_A <-> $VETH_B"
|
||||
ip link add "$VETH_A" type veth peer name "$VETH_B"
|
||||
ip link set "$VETH_A" up
|
||||
ip link set "$VETH_B" up
|
||||
|
||||
# 创建桥接 br0
|
||||
echo "[3] 创建 br0 桥接设备"
|
||||
ip link add "$BR_IF" type bridge
|
||||
ip link set "$VXLAN_IF" master "$BR_IF"
|
||||
ip link set "$VETH_B" master "$BR_IF"
|
||||
ip link set "$BR_IF" up
|
||||
|
||||
# 配置 IP 和子网掩码
|
||||
echo "[4] 配置 br0 地址:$BRIDGE_CIDR"
|
||||
ip addr add "$BRIDGE_CIDR" dev "$BR_IF"
|
||||
|
||||
# 启用 SNAT
|
||||
echo "[5] 启用 IP 转发 + SNAT(出口:$DEV_IF,子网:$SUBNET)"
|
||||
sysctl -w net.ipv4.ip_forward=1
|
||||
iptables -t nat -C POSTROUTING -s "$SUBNET" -o "$DEV_IF" -j MASQUERADE 2>/dev/null || \
|
||||
iptables -t nat -A POSTROUTING -s "$SUBNET" -o "$DEV_IF" -j MASQUERADE
|
||||
|
||||
# 自动触发 ARP 学习
|
||||
REMOTE_LAST_OCTET="$(echo "$REMOTE_IP" | awk -F. '{print $4}')"
|
||||
if [[ "$REMOTE_LAST_OCTET" -eq 2 ]]; then
|
||||
REMOTE_BR_IP="10.255.0.3"
|
||||
else
|
||||
REMOTE_BR_IP="10.255.0.2"
|
||||
fi
|
||||
|
||||
echo "[6] 触发 ARP 学习 ping:$REMOTE_BR_IP ← from $VETH_A"
|
||||
ping -c 1 -I "$VETH_A" "$REMOTE_BR_IP" || true
|
||||
|
||||
echo "✅ 安全 Overlay 构建完成:"
|
||||
echo " - vxlan: $VXLAN_IF"
|
||||
echo " - bridge: $BR_IF (IP: $BRIDGE_CIDR)"
|
||||
echo " - SNAT 子网:$SUBNET → $DEV_IF"
|
||||
19
vpn-overlay/wireguard/hub1_wg0.conf
Normal file
19
vpn-overlay/wireguard/hub1_wg0.conf
Normal file
@ -0,0 +1,19 @@
|
||||
# wg0.conf
|
||||
[Interface]
|
||||
PrivateKey = <hub_priv>
|
||||
Address = 10.100.0.1/24
|
||||
ListenPort = 51820
|
||||
|
||||
# Site A
|
||||
[Peer]
|
||||
PublicKey = <a_pub>
|
||||
AllowedIPs = 10.100.0.2/32
|
||||
|
||||
# Site B
|
||||
[Peer]
|
||||
PublicKey = <b_pub>
|
||||
AllowedIPs = 10.100.0.3/32
|
||||
|
||||
# Site C
|
||||
...
|
||||
|
||||
10
vpn-overlay/wireguard/site_a_wg0.conf
Normal file
10
vpn-overlay/wireguard/site_a_wg0.conf
Normal file
@ -0,0 +1,10 @@
|
||||
# wg0.conf
|
||||
[Interface]
|
||||
PrivateKey = <a_priv>
|
||||
Address = 10.100.0.2/24
|
||||
|
||||
[Peer]
|
||||
PublicKey = <hub_pub>
|
||||
AllowedIPs = 10.100.0.1/32
|
||||
Endpoint = <hub_public_ip>:51820
|
||||
PersistentKeepalive = 25
|
||||
15
vpn-overlay/xray/GRPC-XTLS-client.json
Normal file
15
vpn-overlay/xray/GRPC-XTLS-client.json
Normal file
@ -0,0 +1,15 @@
|
||||
"inbounds": [{
|
||||
"port": 443,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [...],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "grpc",
|
||||
"grpcSettings": {
|
||||
"serviceName": "vpn"
|
||||
},
|
||||
"security": "xtls"
|
||||
}
|
||||
}]
|
||||
15
vpn-overlay/xray/TCP-XTLS-client.json
Normal file
15
vpn-overlay/xray/TCP-XTLS-client.json
Normal file
@ -0,0 +1,15 @@
|
||||
"inbounds": [{
|
||||
"port": 443,
|
||||
"protocol": "vless",
|
||||
"settings": {
|
||||
"clients": [...],
|
||||
"decryption": "none"
|
||||
},
|
||||
"streamSettings": {
|
||||
"network": "tcp",
|
||||
"security": "xtls",
|
||||
"xtlsSettings": {
|
||||
"alpn": ["h2", "http/1.1"]
|
||||
}
|
||||
}
|
||||
}]
|
||||
Loading…
Reference in New Issue
Block a user