Skip to content

WireGuard 组网配置

这篇记录的是一种常见场景:将一台远程 Linux 服务器与本地局域网打通,让远程机器可以访问本地网段资源。

环境说明

下面的配置示例基于以下假设:

  • 远程服务器公网 IP:YOUR_PUBLIC_IP
  • WireGuard 监听端口:51820
  • 远程服务器外网网卡:eth0
  • WireGuard 接口名:wg0
  • WireGuard 网段:10.255.255.0/24
  • 远程服务器地址:10.255.255.2/24
  • 本地对端地址:10.255.255.1/32
  • 本地局域网网段:192.168.20.0/24

当前服务器系统如下:

bash
cat /etc/os-release
text
NAME="Alibaba Cloud Linux"
VERSION="3 (OpenAnolis Edition)"
ID="alinux"
ID_LIKE="rhel fedora centos anolis"
VERSION_ID="3"
VARIANT="OpenAnolis Edition"
VARIANT_ID="openanolis"
ALINUX_MINOR_ID="2104"
ALINUX_UPDATE_ID="12.3"
PLATFORM_ID="platform:al8"
PRETTY_NAME="Alibaba Cloud Linux 3.2104 U12.3 (OpenAnolis Edition)"
ANSI_COLOR="0;31"
HOME_URL="https://www.aliyun.com/"

远程 Linux 服务器配置

1. 安装 WireGuard

bash
yum install wireguard

如果仓库里没有完整包,也可以尝试:

bash
yum install wireguard-tools

2. 生成密钥

bash
umask 077
wg genkey | tee /etc/wireguard/server.key | wg pubkey > /etc/wireguard/server.pub
  • 私钥文件:/etc/wireguard/server.key
  • 公钥文件:/etc/wireguard/server.pub

3. 开启内核转发

编辑 /etc/sysctl.conf,加入:

conf
net.ipv4.ip_forward = 1

然后执行:

bash
sysctl -p

4. 配置 /etc/wireguard/wg0.conf

ini
[Interface]
Address = 10.255.255.2/24
ListenPort = 51820
PrivateKey = <填入 /etc/wireguard/server.key 的内容>

# 启动时允许转发,并将 WireGuard 网段做 SNAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.255.255.0/24 -o eth0 -j MASQUERADE

PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.255.255.0/24 -o eth0 -j MASQUERADE

[Peer]
PublicKey = <填入另一端生成的公钥>
AllowedIPs = 10.255.255.1/32, 192.168.20.0/24
PersistentKeepalive = 25

配置说明

这份配置里最关键的是 AllowedIPsPersistentKeepalive

AllowedIPs

ini
AllowedIPs = 10.255.255.1/32, 192.168.20.0/24

这表示远程服务器会把下面这些目标流量交给这个 Peer:

  • 发往 10.255.255.1 的流量
  • 发往本地局域网 192.168.20.0/24 的流量

如果你的本地局域网不是这个网段,需要替换成自己的实际网段。

PersistentKeepalive

ini
PersistentKeepalive = 25

这个配置适合部署在家宽 NAT 后面的设备,比如 iKuai。它会定期保活,避免隧道因为长时间空闲被回收。

启动与验证

启动 WireGuard:

bash
systemctl enable --now wg-quick@wg0

查看运行状态:

bash
wg show
ip route
text
interface: wg0
  public key: XXXX=
  private key: (hidden)
  listening port: 51820

peer: XXXX=
  endpoint: XXX.XXX.XXX.XXX:9004
  allowed ips: 10.255.255.1/32, 192.168.20.0/24
  latest handshake: 1 minute, 16 seconds ago
  transfer: 405.14 KiB received, 67.47 KiB sent
  persistent keepalive: every 25 seconds