WireGuard 整体配置是比 L2TP/IKEv2 简单很多的。

生成密钥对(可选)

不想使用自动创建密钥对的话可以用以下脚本手动创建

# 生成私钥DER二进制数据,保存到变量
priv_der=$(openssl genpkey -algorithm X25519 -outform DER | base64)

# 解码成二进制,截取最后32字节,转base64得到WireGuard私钥
priv_key=$(echo "$priv_der" | base64 -d | tail -c 32 | base64)

# 从私钥DER数据生成公钥DER,截取最后32字节,转base64得到WireGuard公钥
pub_key=$(echo "$priv_der" | base64 -d | \
  openssl pkey -inform DER -pubout -outform DER 2>/dev/null | \
  tail -c 32 | base64)

echo "私钥=$priv_key"
echo "公钥=$pub_key"

新建接口

WireGuard -> WireGuard

Name: 接口名称,随意

Listen Port: 端口,随意

Apply 会自动生成 公钥 和 私钥

记录 公钥 为 服务端公钥

命令式

# 新建接口
/interface wireguard add name=接口名称 listen-port=端口
# 查看公钥
/interface wireguard print where Name=接口名称

配置网络

IP -> Address

Address: 192.168.x.1/24

Interface: 接口名称

命令式

/ip address add address 192.168.x.1/24 interface=接口名称

Peers

新建项

Name: peer 名称,随意

Interface: 接口名称

Pubilc Key: 填一会儿在对端生成的公钥

Allowed Address: 192.168.x.88/32,192.168.y.0/24 客户端在该网段中的IP

Allowed Address:客户端在该网段中的IP,每个客户端一个IP,多个客户端设备的话,点加号添加更多。要使用不同的密钥对连接请再建一个相同 interface 不同名称的 peer

命令式

# 创建 peer
/interface wireguard peers add name=peer-1 interface=接口名称 allowed-address=192.168.x.88/32 public-key=xxxxxxxxxxxxxxxxxxxxxxxxxx

防火墙

IP -> Firewall -> Filter Rules

新建项 1

  • Enable

Chain: input

Protocol: 17(udp)

Dst.Port: 端口

Action: accept

新建项 2

  • Enable

Chain: input

In.Interface: 接口名称

Action: accept

IP -> Firewall -> NAT

新建项

  • Enable

Chain: srcnat

Src.Address: 192.168.x.0/24

Out.Interface: bridge

Action: masquerade

客户端配置 配置文件

# 井号后写备注
[Interface]
# 不支持名称参数
# 客户端的私钥
PrivateKey = GEE74OPqcUy5m6srQapRBeB7u16EVHSLuU3ncBmvS0c=
# Allowed address 的地址
Address = 192.168.87.2/32
# DNS 随便
DNS = 192.168.8.1

[Peer]
# 服务端的公钥
PublicKey = Vg8nCRyvKI2JzD2TFFnNkSMAxzDTS4MsZZecbzW9n0M=
# 服务端 ip 或 域名 + 端口
Endpoint = example.com:51820
# 允许客户端访问内网的哪些 ip或网段,以逗号分隔,0.0.0.0/0 表示所有
AllowedIPs = 0.0.0.0/0, ::/0

使用

方法1:保存为 example.conf 文件,使用支持配置文件的客户端选择该文件即可

方法2:复制配置文件内容粘贴到任意可创建二维码的地方,创建二维码并扫描

方法3:按配置文件对应手动填写,配置中没写的可以不填

客户端配置 安卓


本地(Interface)

名称: 名称,随意

私钥: 循环符号自动生成

公钥: 循环符号自动生成

局域网IP: Peers 中配置的那些 IP

监听端口: 不填

DNS服务器: 填服务端的DNS服务器吧

MTU: 不填

应用过滤:可设定仅对或仅不对某些应用连接VPN,不设定的话就是全局VPN


远程 (Peer)

公钥: 填 第一步 新建接口 中生成的公钥

预共享密钥: 不填

连接保活间隔: 不填

对端: 服务端的IP或域名:端口

路由的IP地址(段):允许客户端访问服务端的哪些网段,0.0.0.0/0 表示所有,多个地址段的话用逗号分隔,如 192.168.1.1/24,192.168.2.1


保存 - 连接