LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

WireGuard穿透NAT!不同异地局域网络秒变统一内网

admin
2025年5月20日 7:53 本文热度 99

前言

如果公司有3个办公网,比如A,B,C,三地,三地之间需要组网,那么就可以使用wireguard来实现。本次我们使用wireguard来实现A,B,C三地组网。

​Wireguard介绍

WireGuard 是一种开源、轻量级、高性能的虚拟专用网络(VPN)协议,旨在通过简洁的设计和现代加密技术提供安全、快速的网络隧道连接。

核心特性

简洁高效

  • • 简洁高效:WireGuard 代码量仅约 4,000 行,相比传统 VPN 协议(如 OpenVPN 或 IPsec)更易于审计和维护。其设计去除了复杂的证书管理,仅依赖公钥加密实现身份验证。
  • • 内核级集成(Linux 5.6+ 版本原生支持),资源占用低,性能优异,单核吞吐量可达 10Gbps。

现代加密技术

  • • 采用 Curve25519(密钥交换)、ChaCha20(数据加密)和 Poly1305(数据完整性校验)等先进算法,确保传输安全且高效。
  • • 支持“完美前向保密”(Perfect Forward Secrecy),即使密钥泄露,历史通信仍无法被破解。

跨平台与易用性

  • • 兼容 Linux、Windows、macOS、iOS、Android 等主流系统,配置文件仅需 Interface(本地配置)和 Peer(对端设备)两部分。
  • • 部署快捷,通过 wg genkey 和 wg pubkey 命令即可生成密钥对,并通过 UDP 协议实现快速连接。

网络适应性

  • • 基于 UDP 协议传输,规避 TCP 协议可能存在的连接阻塞问题,同时通过 IP 绑定 Cookie 机制防御拒绝服务攻击。
  • • 支持动态 IP 漫游,设备切换网络时无需重新建立连接。

典型的应用场景

  • • 远程办公
    • • 企业员工可通过 WireGuard 安全接入内部网络,访问资源(如数据库、文件服务器)。
  • • 隐私保护
    • • 用户可通过 WireGuard 隧道加密所有流量,防止 ISP 监控或公共 Wi-Fi 数据窃取。
  • • 跨云与内网穿透
    • • 连接不同云服务商的虚拟机,构建混合云网络。
    • • 通过 IPv6 公网地址直接访问家庭或企业内网,无需第三方中继。
  • • 点对点安全通信
    • • 直接在设备间建立加密隧道,适用于物联网(IoT)设备或服务器间数据传输。

技术对比与优势

picture 0

工作原理简析

密钥交换

  • • 使用 NoiseIK 协议完成单次往返密钥交换,生成会话密钥。

数据传输

  • • 加密数据通过 UDP 封装传输,支持动态调整 MTU 值以优化网络性能。

会话管理

  • • 内置状态机机制,自动处理连接中断与恢复,用户无需手动干预。

环境准备

  • • 一台拥有公网IP的机器,用于做中继
  • • 两个不同网段的局域网,用于组网
  • • 两台机器,一台用于管理,一台用于组网

组网

网络架构图如下

picture 4

配置中继服务器

sudo apt install wireguard

生成服务端密钥对:
执行以下命令后,将在 /etc/wireguard 目录下生成私钥文件 privatekey 和公钥文件 publickey :

wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey

创建配置文件:在 /etc/wireguard 目录下创建一个名为 wg0.conf 的配置文件,使用编辑器打开并编写配置:

sudo vim /etc/wireguard/wg0.conf

配置文件内容如下:

[Interface]
Address = 10.0.0.1/24 #WireGuard 的接口地址,可以从为专用网络保留的地址范围(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)中选择一个 IP 地址。
ListenPort = 51820 #WireGuard 的监听端口,可以自定义,但需要与客户端配置文件中的端口一致。
PrivateKey = YOUR_SERVER_PRIVATE_KEY #服务端私钥,使用 wg genkey 命令生成。
SaveConfig = true #保存配置文件
PostUp = iptables -A FORWARD -i eth0 -j ACCEPT; iptables -A FORWARD -o eth0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #启动时执行的命令
PostDown = iptables -D FORWARD -i eth0 -j ACCEPT; iptables -D FORWARD -o eth0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #关闭时执行的命令

# A机器的公钥,写上A机器的内网IP段
[Peer]
PublicKey = YOUR_CLIENT_PUBLIC_KEY #客户端公钥,使用 wg pubkey 命令生成。
AllowedIPs = 10.0.0.0/24,192.168.2.0/24 #允许访问的 IP 地址范围,可以是局域网内的所有 IP 地址,也可以是特定的 IP 地址,这里我们需要把B地的内网IP段加进去。

# B机器的公钥,写上B机器的内网IP段
[Peer]
PublicKey = YOUR_CLIENT_PUBLIC_KEY #客户端公钥,使用 wg pubkey 命令生成。
AllowedIPs = 10.0.0.0/24,192.168.1.0/24 #允许访问的 IP 地址范围,可以是局域网内的所有 IP 地址,也可以是特定的 IP 地址,这里我们需要把A地的内网IP段加进去。

设置 /etc/wireguard 目录下所有文件的权限为 600,确保服务的安全性。

sudo chmod 600 /etc/wireguard/*

启动 WireGuard 服务:

sudo wg-quick up wg0

查看 WireGuard 服务状态:

sudo wg

WireGuard 可以使用 Systemd 进行管理,运行以下命令设置 WireGuard 接口开机自启动:

sudo systemctl enable wg-quick@wg0

启用 IP 转发,打开 /etc/sysctl.conf 文件:

sudo vim /etc/sysctl.conf

添加以下内容:

net.ipv4.ip_forward = 1

保存文件并应用配置:

sudo sysctl -p

如果系统启用了防火墙,则需要在防火墙放行 UDP 端口 51820 的流量,我使用的是 ufw 软件管理防火墙,相应的命令如下:

sudo ufw allow 51820/udp

到这里,WireGuard 的服务端就已经设置好了。

配置机器A客户端

开启 IP 地址转发

sudo vim /etc/sysctl.conf

添加以下内容:

net.ipv4.ip_forward = 1 

保存文件并应用配置:

sudo sysctl -p

安装 WireGuard 客户端:
参考上面的方法安装一个客户端,这里就不赘述了。

配置客户端配置文件:

sudo vim /etc/wireguard/wg0.conf

配置文件内容如下:

[Interface]
PrivateKey = YOUR_CLIENT_PRIVATE_KEY #客户端私钥,使用 wg genkey 命令生成。
Address = 10.0.0.2/24 #WireGuard 的接口地址,可以从为专用网络保留的地址范围(10.0.0.0/8、172.16.0.0/12 或 192.168.0.0/16)中选择一个 IP 地址。
DNS = 8.8.8.8,8.8.4.4 #DNS 服务器地址,可以自定义,也可以使用运营商的 DNS 服务器。

[Peer]
PublicKey = YOUR_SERVER_PUBLIC_KEY #服务端公钥,使用 wg pubkey 命令生成。
Endpoint = 8.8.8.8:51820 #服务端 IP 地址和端口,需要与服务端配置文件中的 Endpoint 一致。
AllowedIPs = 10.0.0.0/24,192.168.2.0/24 #允许访问的 IP 地址范围,可以是局域网内的所有 IP 地址,也可以是特定的 IP 地址,这里我们需要把B地的内网IP段加进去。

启动 WireGuard 客户端:

sudo wg-quick up wg0

查看 WireGuard 客户端状态:

sudo wg

到这里,WireGuard 的客户端就已经设置好了。

配置机器B客户端

配置机器B客户端的步骤与机器A客户端的步骤类似,这里就不赘述了。

说个不一样的,在配置文件中,需要把A地的内网IP段加进去。还有Address需要修改为10.0.0.3/24

AllowedIPs = 10.0.0.0/24,192.168.1.0/24 #允许访问的 IP 地址范围,可以是局域网内的所有 IP 地址,也可以是特定的 IP 地址,这里我们需要把A地的内网IP段加进去。

到这里,WireGuard 的客户端就已经设置好了。

开启Nat转发,实现两地互通

以下命令A机器和B机器都需要执行

iptables -A FORWARD -i wg0 -d 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -o wg0 -s 192.168.1.0/24 -j ACCEPT
iptables -A FORWARD -j DROP  # 拒绝其他转发流量

OpenWrt配置[可选]

OpenWrt的配置与Linux的配置类似,这里就不赘述了。
新增一个wireguard的虚拟接口,然后配置好配置文件,启动服务,开启转发,开启nat功能。
将wireguard接口加入到LAN规则中,然后开启IP转发和IP 动态伪装功能即可。

picture 5

测试

在A机器上ping B机器的内网IP,如果能ping通,则说明组网成功。

总结

其实核心步骤是A,B这两个机器作为了个两个网段的网关,所以需要开启Ip路由转发以及Nat功能。如果使用OpenWrt,则可以参考上面的OpenWrt配置部分,如果使用Linux,则可以参考非OpenWrt部分上面的配置。


阅读原文:原文链接


该文章在 2025/5/20 9:34:04 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved