准备:
- openwrt路由器,内网段192.168.7.1/24
- ipv4或者ipv6公网并做好ddns解析
生成密钥:
首先根据名称上来定义不同的服务端或者客户端密钥,以免混淆
- sprivatekey: 服务端私钥
- spubkey: 服务端公钥
- cprivatekey: 客户端私钥
- cpubkey: 客户端公钥
- sharekey:预共享密钥
ssh到你的openwrt路由器,任意目录新建一个wireguard文件夹用于存放密钥,然后在wireguard文件夹下创建一个user1的子目录,用于存放第一个用户的密钥,如果有需要多个客户端,可以自行创建多个。
mkdir wg
cd wg
umask 077
mkdir user1
生成服务端密钥
wg genkey | tee sprivatekey | wg pubkey > spublickey
openwrt配置:
不同的固件可能界面和操作上会有些许不同,我使用的是esir的固件,自带了wireguard,如果你的openwrt并没有内置,请先自行安装wireguard组件
去到网络 - 接口 - 添加新接口,填写名wg0来表示,,协议选择Wireguard VPN创建
新建接口wg0
下一步,填写上上面生成的服务端私钥sprivatekey,端口任意填写,建议使用高位端口,IP地址选择一个新的内网IP,不要和你的openwrt所在内网地址段冲突,我这里使用了10.10.7.1/24的内网段作为wireguard的地址
接口配置
高级设置跳过,保持默认,防火墙设置选择LAN区域,保存并应用
接口配置
接口这里可以看到新建的接口已经有了
wg接口
配置防火墙,点开网络 - 防火墙 - 自定义规则,最后面粘贴上iptable规则,这里网段替换成你自己的
iptables -t nat -A POSTROUTING -s 10.10.7.0/24 -o eth0 -j MASQUERADE
点开通信规则,打开路由端口,允许UDP协议的51083端口
打开路由器端口
客户端配置
进入刚才创建的user1文件夹,首先生成一个sharekey,后面会用到,再生成客户端对应的私钥和公钥
cd user1
wg genpsk > sharekey
wg genkey | tee cprivatekey | wg pubkey > cpublickey
回到网络 - 接口 - 修改wg0接口,添加一个新的peers,一个peer对应一个客户端
公钥填入客户端的cpubkey
允许的IP随便写一个但是要在刚才定义的网段里面,10.10.7.2/32,::/0
勾选上路由允许的IP,其余的可以留空
左下角更多选项,添加预共享密钥,就是刚才生成的sharekey
peers
创建客户端配置文件
新建一个后缀为.conf的配置文件,填入刚才的信息,注意不要填错
[Interface]
Address = 10.10.7.2
PrivateKey = uJiBT1YszdqoyMZrca8rHf+PMwxjp/K8bj6RBnpnRE8= #cprivatekey客户端私钥
DNS = 192.168.7.1
[Peer]
PublicKey = nl80iInAz8lbBWn3CQWqYxQwZnU5T5wsI9k+fRcFP3g= #spublickey服务端公钥
AllowedIPs = 0.0.0.0/0, ::/0
presharedKey = Yqz9KOIj8HGAcaeorB7N9cJREPtPC6Fz+yR6yAkDSWA= #sharekey预共享密钥
Endpoint = 域名或者IP:端口
PersistentKeepalive = 25
手机或者电脑上安装wireguard客户端,导入.conf配置文件,测试连接成功
openwrt菜单栏状态 - WireGuard状态可以查看当前连接信息
进阶快速备份或者添加peer,打开/etc/config/network
# 示例填写方式
config interface 'wg0'
option proto 'wireguard'
option delegate '0'
option private_key 'YFUZ5xG0xc9SC6+QrMHaSZSMohcILG+MkOazr57Om2E=' #sprivatekey:服务端私钥
list addresses '10.10.7.1/24'
option listen_port '51083'
config wireguard_wg0
option public_key 'H7VMlPuOUumCl6sURd7O+cbcch3CvMhapfhogU3jLRA=' #cpublickey客户端公钥
option preshared_key 'Yqz9KOIj8HGATaeorB4N9cJREPtPC6Fz+yR6yAkDSWA=' #sharekey预共享密钥
list allowed_ips '10.10.7.2/32'
list allowed_ips '::/0'
option route_allowed_ips '1'
保存后,记得重启一下network
# 示例Peer填写
[Interface]
Address = 10.10.7.2
PrivateKey = uJiBT1YszdqoyMZrcb8rHf+PMwxjp/K8bj6RBapnRE8= #cprivatekey客户端私钥
DNS = 192.168.7.1
[Peer]
PublicKey = nl80iInAz8laBWn3CQWqYxQwZna5T5abI9k+fRcFP3g= #spublickey服务端公钥
AllowedIPs = 0.0.0.0/0, ::/0
presharedKey = Yqz9KOIj8HGATaeorB4N9cJREPtPC6Fz+yR6yAkDSWA= #sharekey预共享密钥
Endpoint = 域名:端口
PersistentKeepalive = 25
THE END
原作者出处:suckmypeen https://www.bilibili.com/read/cv19245161 出处:bilibili