需要一台公网服务器作为中转站,也就是Server,而其他的内网机器,作为Client。

以下都采用Debian系统作为演示。

Server配置:

apt update
# 下载WireGuard,wireguard-tools包含了本体和工具
apt install wireguard-tools

# 在/etc/wireguard/目录下创建一个接口配置文件
nano /etc/wireguard/wg0.conf
# 以下是配置文件内容
[Interface]
PrivateKey = # 填写本机私钥(Server)
Address = 10.0.1.1/24 # 填写本机地址,可以自定义
ListenPort = 51820 # 监听端口
DNS = 223.5.5.5 # DNS
# 开启转发和 NAT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE

[Peer]
PublicKey = # Client公钥
AllowedIPs = 10.0.2.0/24 # Client网段,可以自定义
PersistentKeepalive = 25 # 保持连接时间(25s能够很稳定)

# 保存配置后,启动WireGuard
wg-quick up wg0 # wg0就是WireGuard的接口,也就是对应配置文件

# 查询连接状态
wg

# 生成私钥
wg genkey > pri.key
# 通过私钥生成公钥
wg pubkey < pri.key > pub.key

Client配置:

apt update
# 下载WireGuard,wireguard-tools包含了本体和工具
apt install wireguard-tools

# 在/etc/wireguard/目录下创建一个接口配置文件
nano /etc/wireguard/wg0.conf
# 以下是配置文件内容
[Interface]
ListenPort = 51820
PrivateKey = # Client私钥
 
[Peer]
PublicKey = # Server公钥,通过在服务端执行wg命令,可获取到Server的公钥
# Server网段,表示访问10.0.0.0网段的时候,通过WireGuard接口进行转发
AllowedIPs = 10.0.0.0/24
Endpoint = 1.1.1.1:51820 # Server地址和端口
PersistentKeepalive = 25 # 保活机制

# 保存配置后,启动WireGuard
wg-quick up wg0 # wg0就是WireGuard的接口,也就是对应配置文件

# 查询连接状态
wg

OpenWRT配置:

opkg update

opkg install luci-proto-wireguard kmod-wireguard wireguard-tools

安装软件包后,可以通过创建WireGuard接口,来进行连接

eb674de8-d499-466b-92c0-5be082ea87fa.png

(扩展)端口转发:

确保系统启用IP转发功能

# 开启系统IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward

把Server的443端口转发到1.1.1.1的443端口上,1.1.1.1可以替换为WireGuard组网后的局域网IP,以此达到端口隐藏的目的。

# 把从 eth0 进入的 HTTPS 请求(端口 443)重定向到 IP 地址 1.1.1.1 上。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 1.1.1.1
# 允许从 eth0 进来的 HTTPS 流量转发到 wg0 接口,并且只针对目标为 1.1.1.1:443 的连接。
iptables -A FORWARD -i eth0 -o wg0 -p tcp -d 1.1.1.1 --dport 443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# 在数据包从 wg0 接口发出去时,将其源地址替换为 wg0 接口的地址,以便目标服务器能正确回传数据。
iptables -t nat -A POSTROUTING -o wg0 -p tcp -d 1.1.1.1 --dport 443 -j MASQUERADE

注意事项:

  1. Server和Client的网段,尽量不用一个,防止冲突,如果有需要的话,可以设置为10.0.0.1/32,10.0.0.2/32

  2. windows可以用tracert命令检查链路情况,linux可以用traceroute检查链路情况

  3. 如果存在动态公网IP的情况,OpenWRT系统自带一个看门狗脚本,在/usr/bin/wireguard_watchdog.sh上,通过添加系统定时任务中,可以解决动态公网IP的情况。