跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 世界
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠

GPU技术交流论坛

  1. 主页
  2. 版块
  3. 知识交流
  4. 运维部署交流
  5. WireGuard 多节点组网教程

WireGuard 多节点组网教程

已定时 已固定 已锁定 已移动 运维部署交流
1 帖子 1 发布者 101 浏览 1 关注中
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • F 离线
    F 离线
    fushinn
    写于 最后由 编辑
    #1

    WireGuard 多节点组网教程

    网络拓扑概述

    本教程介绍如何使用WireGuard构建一个4节点的安全网络架构,实现多个网段间的互联互通。

    网络拓扑图

    ┌─────────────────────────────┐    ┌─────────────────────────────┐
    │          节点A              │◄──►│          节点B              │
    │    OpenWrt路由器            │    │    OpenWrt路由器            │
    │                             │    │                             │
    │ 本地网段: 192.168.1.0/24    │    │ 本地网段: 192.168.2.0/24    │
    │ WG IP: 10.0.0.1/32          │    │ WG IP: 10.0.0.2/32          │
    │ 监听端口: 51820             │    │ 监听端口: 51821             │
    │ 外部地址: nodeA.example.com │    │ 外部地址: nodeB.example.com │
    └──────────────┬──────────────┘    └──────────────┬──────────────┘
                   │                                  │
                   │            ┌─────────────────────────────┐│
                   └───────────►│          节点C              │◄┘
                                │    公网服务器 (中心节点)     │
                                │                             │
                                │ WG IP: 10.0.0.3/32          │
                                │ 监听端口: 51822             │
                                │ 外部地址: nodeC.example.com │
                                └──────────────┬──────────────┘
                                               │
                                        ┌─────────────────────────────┐
                                        │          节点D              │
                                        │      内网服务器             │
                                        │                             │
                                        │ 本地网段: 192.168.3.0/24    │
                                        │ WG IP: 10.0.0.4/32          │
                                        │ 无监听端口 (主动连接)        │
                                        └─────────────────────────────┘
    

    连接关系

    • 节点A ↔ 节点B: 直连,实现两个局域网间的高速通信
    • 节点B ↔ 节点C: 直连,提供优化的访问路径
    • 节点A ↔ 节点C: 直连,确保网络连通性
    • 节点C ↔ 节点D: 连接,节点D通过节点C访问其他网段

    节点配置规划

    节点基本信息

    节点 类型 WireGuard IP 本地网段 监听端口 外部地址 角色
    节点A OpenWrt路由器 10.0.0.1/32 192.168.1.0/24 51820 nodeA.example.com 边缘节点
    节点B OpenWrt路由器 10.0.0.2/32 192.168.2.0/24 51821 nodeB.example.com 边缘节点
    节点C 公网服务器 10.0.0.3/32 - 51822 nodeC.example.com 中心节点
    节点D 内网服务器 10.0.0.4/32 192.168.3.0/24 - - 内网节点

    密钥生成

    每个节点需要生成自己的密钥对:

    # 生成私钥
    wg genkey > private.key
    
    # 生成公钥
    wg pubkey < private.key > public.key
    
    # 生成预共享密钥(可选,用于增强安全性)
    wg genpsk > preshared.key
    

    公钥信息示例

    节点 公钥
    节点A [节点A的公钥]
    节点B [节点B的公钥]
    节点C [节点C的公钥]
    节点D [节点D的公钥]

    路由配置

    网段访问路径

    源网段 目标网段 路径 优化状态
    192.168.1.0/24 192.168.2.0/24 节点A → 节点B (直连) ✅ 优化
    192.168.2.0/24 192.168.1.0/24 节点B → 节点A (直连) ✅ 优化
    192.168.1.0/24 192.168.3.0/24 节点A → 节点C → 节点D ✅ 正常
    192.168.2.0/24 192.168.3.0/24 节点B → 节点C → 节点D ✅ 正常
    192.168.3.0/24 192.168.1.0/24 节点D → 节点C → 节点A ✅ 正常
    192.168.3.0/24 192.168.2.0/24 节点D → 节点C → 节点B ✅ 正常

    AllowedIPs 配置原则

    节点A 配置

    • 到节点C: 10.0.0.3/32, 10.0.0.4/32, 192.168.3.0/24
    • 到节点B: 10.0.0.2/32, 192.168.2.0/24
    • 预共享密钥: 可选择与节点B使用

    节点B 配置

    • 到节点A: 10.0.0.1/32, 192.168.1.0/24
    • 到节点C: 10.0.0.3/32, 10.0.0.4/32, 192.168.3.0/24
    • 预共享密钥: 可选择与节点A使用

    节点C 配置

    • 到节点A: 10.0.0.1/32, 192.168.1.0/24
    • 到节点B: 10.0.0.2/32, 192.168.2.0/24
    • 到节点D: 10.0.0.4/32, 192.168.3.0/24

    节点D 配置

    • 到节点C: 10.0.0.0/24, 192.168.1.0/24, 192.168.2.0/24

    网络参数配置

    通用参数

    • MTU: 1300 (所有节点统一,避免分片)
    • PersistentKeepalive: 25秒 (保持NAT穿透)
    • WireGuard骨干网: 10.0.0.0/24

    安全配置建议

    • 预共享密钥: 建议在关键连接上使用预共享密钥增强安全性
    • 定期更换密钥: 建议定期更换WireGuard密钥
    • 防火墙规则: 严格控制WireGuard端口访问

    配置文件示例

    节点A (OpenWrt) 配置

    # /etc/config/network 配置
    config interface 'wg0'
        option proto 'wireguard'
        option private_key '[节点A私钥]'
        option listen_port '51820'
        list addresses '10.0.0.1/32'
    
    config wireguard_wg0
        option public_key '[节点B公钥]'
        option endpoint 'nodeB.example.com:51821'
        option preshared_key '[预共享密钥]'
        list allowed_ips '10.0.0.2/32'
        list allowed_ips '192.168.2.0/24'
        option persistent_keepalive '25'
    
    config wireguard_wg0
        option public_key '[节点C公钥]'
        option endpoint 'nodeC.example.com:51822'
        list allowed_ips '10.0.0.3/32'
        list allowed_ips '10.0.0.4/32'
        list allowed_ips '192.168.3.0/24'
        option persistent_keepalive '25'
    

    节点C (Linux服务器) 配置

    [Interface]
    PrivateKey = [节点C私钥]
    Address = 10.0.0.3/32
    ListenPort = 51822
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    [Peer]
    # 节点A
    PublicKey = [节点A公钥]
    Endpoint = nodeA.example.com:51820
    AllowedIPs = 10.0.0.1/32, 192.168.1.0/24
    PersistentKeepalive = 25
    
    [Peer]
    # 节点B
    PublicKey = [节点B公钥]
    Endpoint = nodeB.example.com:51821
    AllowedIPs = 10.0.0.2/32, 192.168.2.0/24
    PersistentKeepalive = 25
    
    [Peer]
    # 节点D
    PublicKey = [节点D公钥]
    AllowedIPs = 10.0.0.4/32, 192.168.3.0/24
    PersistentKeepalive = 25
    

    节点D (内网服务器) 配置

    [Interface]
    PrivateKey = [节点D私钥]
    Address = 10.0.0.4/32
    PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
    
    [Peer]
    # 节点C (中心节点)
    PublicKey = [节点C公钥]
    Endpoint = nodeC.example.com:51822
    AllowedIPs = 10.0.0.0/24, 192.168.1.0/24, 192.168.2.0/24
    PersistentKeepalive = 25
    

    防火墙和NAT配置

    各节点NAT规则

    OpenWrt节点 (节点A、B)

    # 允许WireGuard转发
    iptables -A FORWARD -i wg0 -j ACCEPT
    iptables -A FORWARD -o wg0 -j ACCEPT
    
    # 本地网段NAT
    iptables -t nat -A POSTROUTING -s 192.168.x.0/24 -o wan -j MASQUERADE
    

    Linux服务器节点 (节点C、D)

    # 启用IP转发
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    # 防火墙规则
    iptables -A FORWARD -i wg0 -j ACCEPT
    iptables -A FORWARD -o wg0 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
    # 开放WireGuard端口
    iptables -A INPUT -p udp --dport 51822 -j ACCEPT
    

    端口开放要求

    节点 端口 协议 说明
    节点A 51820 UDP WireGuard监听端口
    节点B 51821 UDP WireGuard监听端口
    节点C 51822 UDP WireGuard监听端口
    节点D - - 无需开放端口

    部署步骤

    1. 准备工作

    1. 确保所有节点已安装WireGuard
    2. 为每个节点生成密钥对
    3. 规划IP地址分配
    4. 确认网络连通性

    2. 部署顺序

    1. 节点C (中心节点) - 首先配置并启动
    2. 节点D (连接到节点C)
    3. 节点A (连接到节点B和节点C)
    4. 节点B (连接到节点A和节点C)

    3. 启动服务

    OpenWrt节点

    # 重启网络服务
    /etc/init.d/network restart
    
    # 检查接口状态
    ifconfig wg0
    

    Linux节点

    # 启动WireGuard
    sudo wg-quick up wg0
    
    # 设置开机自启
    sudo systemctl enable wg-quick@wg0
    

    验证和测试

    基本验证命令

    # 检查WireGuard状态
    sudo wg show
    
    # 检查路由表
    ip route show | grep wg
    
    # 测试连通性
    ping -c 3 10.0.0.3  # 测试到中心节点
    ping -c 3 192.168.2.1  # 测试跨网段连通性
    
    # 检查握手状态
    sudo wg show wg0 latest-handshakes
    
    # 查看流量统计
    sudo wg show wg0 transfer
    

    连通性测试脚本

    #!/bin/bash
    # 连通性测试脚本
    
    echo "测试WireGuard骨干网连通性..."
    for ip in 10.0.0.1 10.0.0.2 10.0.0.3 10.0.0.4; do
        if ping -c 1 -W 3 $ip > /dev/null 2>&1; then
            echo "✅ $ip 连通"
        else
            echo "❌ $ip 不通"
        fi
    done
    
    echo "\n测试跨网段连通性..."
    for subnet in 192.168.1.1 192.168.2.1 192.168.3.1; do
        if ping -c 1 -W 3 $subnet > /dev/null 2>&1; then
            echo "✅ $subnet 连通"
        else
            echo "❌ $subnet 不通"
        fi
    done
    

    网络架构优势

    1. 高效路由: 边缘节点直连,减少中转延迟
    2. 负载分散: 避免中心节点成为瓶颈
    3. 路径冗余: 多条路径确保网络可靠性
    4. 安全加固: 支持预共享密钥增强安全性
    5. 易于扩展: 中心节点架构便于添加新节点
    6. 灵活配置: 支持不同类型设备和操作系统

    故障排除

    常见问题及解决方案

    1. 连接建立失败

    • 检查防火墙端口是否开放
    • 验证endpoint地址和端口配置
    • 确认公钥配置正确

    2. 路由不通

    • 检查AllowedIPs配置
    • 验证系统路由表
    • 确认IP转发已启用

    3. 性能问题

    • 调整MTU设置
    • 检查网络路径和延迟
    • 优化路由配置

    4. 握手失败

    • 确认时间同步
    • 检查网络连通性
    • 验证密钥配置

    监控要点

    • WireGuard服务运行状态
    • 握手时间和频率
    • 网络延迟和丢包率
    • 流量统计和带宽使用
    • 系统资源使用情况

    日志分析

    # 查看系统日志
    journalctl -u wg-quick@wg0 -f
    
    # 查看内核日志
    dmesg | grep wireguard
    
    # OpenWrt日志
    logread | grep wireguard
    

    安全建议

    1. 定期更换密钥: 建议每6个月更换一次WireGuard密钥
    2. 使用预共享密钥: 在关键连接上启用预共享密钥
    3. 限制访问: 通过防火墙限制WireGuard端口访问
    4. 监控连接: 定期检查异常连接和流量
    5. 备份配置: 定期备份配置文件和密钥
    6. 更新软件: 保持WireGuard软件版本最新

    扩展配置

    添加新节点

    1. 为新节点生成密钥对
    2. 在中心节点添加新的Peer配置
    3. 配置新节点连接到中心节点
    4. 更新相关节点的AllowedIPs配置
    5. 测试连通性

    高可用配置

    • 部署多个中心节点
    • 配置节点间的冗余连接
    • 实现自动故障切换
    • 使用负载均衡
    1 条回复 最后回复
    0
    回复
    • 在新帖中回复
    登录后回复
    • 从旧到新
    • 从新到旧
    • 最多赞同


    • 登录

    • 没有帐号? 注册

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门
    • 世界
    • 用户
    • 群组