banner
Alexeisie

AlexEisie

啊? Email: alexeisie@brs.red
github

Wireguard 异地组网

1. 服务端环境配置#

开启服务器端内核转发

sysctl net.ipv4.ip_forward=1
sysctl net.ipv6.conf.all.forwarding=1
sysctl -p

安装 Wireguard 程序

apt install wireguard

2. 服务器端 Wireguard 接口配置#

生成服务端密钥对

wg genkey | tee /dev/stderr | wg pubkey

在 /etc/wireguard 文件夹下新建文件 ifs0.conf
wireguard 服务监听 10203/udp
组网使用 192.168.3.0/24 私有网段
服务器分配 192.168.3.1/32
客户端分配 192.168.3.2/32
此处 eth0 应替换为实际出口接口名称
Peer 的 AllowedIPs 用于匹配入站流量的 IP 地址,匹配成功时被 wireguard 接管

[Interface]
PrivateKey = 服务端私钥
Address = 192.168.3.1/32
PostUp   = iptables -A FORWARD -i ifs0 -j ACCEPT; iptables -A FORWARD -o ifs0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i ifs0 -j ACCEPT; iptables -D FORWARD -o ifs0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 10203

[Peer]
PublicKey =  客户端公钥
AllowedIPs = 192.168.3.2/32

启动 wireguard 的 ifs0 配置,同时执行 PostUp 中的设定

wg-quick up ifs0

关闭 wireguard 的 ifs0 配置,同时执行 PostDown 中的设定

wg-quick down ifs0

3. 客户端配置#

安装 Wireguard 程序

apt install wireguard

生成客户端密钥对

wg genkey | tee /dev/stderr | wg pubkey

在 /etc/wireguard 文件夹下新建文件 ifc0.conf
该客户端分配先前服务器待处理的 IP 地址 192.168.3.2/32
Peer 终结点填写服务器 wireguard 进程 (假设客户端可以通过 114.51.41.91 访问该服务器)
此时 Peer 的 AllowedIPs 用于匹配出站流量的 IP 地址,匹配成功时将会通过 wireguard 使用隧道访问,实例配置为处理全部 IPv4 流量,当然也可以使用 192.168.3.0/24 来仅处理组网 IPv4 流量

[Interface]
PrivateKey = 客户端私钥
Address = 192.168.3.2/32

[Peer]
PublicKey = 服务端公钥
AllowedIPs = 0.0.0.0/0
Endpoint = 114.51.41.91:10203

启动 wireguard 的 ifs0 配置,同时执行 PostUp 中的设定

wg-quick up ifs0

关闭 wireguard 的 ifs0 配置,同时执行 PostDown 中的设定

wg-quick down ifs0

4.1 多客户端 (服务器抽象为网关)#

仅需要在服务器添加多 Peer 匹配即可

[Interface]
###略###

[Peer]
PublicKey =  客户端192.168.3.2公钥
AllowedIPs = 192.168.3.2/32

[Peer]
PublicKey =  客户端192.168.3.3公钥
AllowedIPs = 192.168.3.3/32

4.2 IPv6 支持 / IPv6 分配#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。