Appearance
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-releasetext
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-tools2. 生成密钥
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 -p4. 配置 /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配置说明
这份配置里最关键的是 AllowedIPs 和 PersistentKeepalive。
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 routetext
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