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
保存 - 连接