Ubuntu
安装
sudo apt update
sudo apt upgrade
sudo apt install wireguard
配置
-
进入
/etc/wireguard
,并生成密钥对sudo -i cd /etc/wireguard umask 077 wg genkey | tee privatekey | wg pubkey > publickey
-
编辑配置文件
wg0.conf
[Interface] PrivateKey = [LINUX_PRIVATE_KEY] Address = 192.168.100.1/24 ListenPort = 51820 [Peer] PublicKey = [WINDOWS_PUBLIC_KEY] Endpoint = [WINDOWS_IP]:51820 AllowedIPs = 192.168.100.2/32
-
启动Wireguard
sudo wg-quick up wg0
OpenWrt
安装
所需插件详见:使用树莓派4B+安装OpenWrt用作旁路由 | Kunyang’s Blog
配置
-
Network → Interface → Add new interface,创建一个wireguard,名字就叫wg0
-
点击Generate new key pair,会自动生成一个公钥一个私钥,IP地址可以随便写一个私有地址的网段,我填写
192.168.100.1/24
,这就是这个VPN的子网,然后设置默认端口,可以随便写,这里我设置55555
-
防火墙可以选择vpn
-
在Network → Firewall → Custom Rules添加一条自定义命令
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
这条命令的意思是针对子网
192.168.100.0/24
内的数据包,当数据从eth0
也就是外接端口转发出去的时候,将数据包的源地址伪装成路由器的公网IP -
如果OpenWrt是主路由,则需要在Firewall → Traffic Rules中开放端口
-
如果OpenWrt是旁路由,则需要在主路由上做端口转发
-
在Network → Interface → wg0点击Edit,然后转到Peers,点击Add peer
- 添加Description,比如我的Windows台式机
- 我们可以点击创建新的密钥对
- 建议创建Preshared Key
- Allow IPs就是这个节点在这个VPN网络的IP地址
- Keep Alive可以设置为25
-
可以重启一下路由器
Windows或Mac Os
安装
从这里下载Wireguard App
配置
在OpenWrt → Network → Interface → wg0 → Edit Peer中可以很方便地为每个终端导出配置文件,复制粘贴在Windows客户端的wireguard中就可以了
外网连接VPN
前提条件
-
需要一个域名
-
需要公网IP
-
一些包比如ddns-scripts-cloudflare和luci-app-ddns
配置步骤
-
首先需要Cloudflare创建一条A记录,域名是
vpn.kyxie.me
,IP地址可以随便填,反正将来还会被DDNS覆盖,Proxy status选择关闭,只进行DNS不进行代理 -
在这里点击Create Token,创建一个专用的API token
-
选择Edit Zone DNS,点击Use Template
-
按照下图配置
-
生成API Token后注意保存好,只会显示一次
-
然后回到OpenWrt → Service → Dynamic DNS → Services,添加一个ddns_ipv4,下面是详细配置,注意必须要安装了ddns-scripts-cloudflare之后才能在DDNS Service provider找到cloudflare.com-v4
ddns: "Enabled": true "Lookup Hostname": "vpn.kyxie.me" "IP address version": "IPV4-Address" "DDNS Service provider": "cloudflare.com-v4" "Domain": "[email protected]" "Username": "Bearer" "Password": "Your API Token" "Use HTTP Secure": true "Path to CA-Certificate": "/etc/ssl/certs"
-
如果OpenWrt为主路由,这样应该可以完成DDNS解析了,但是如果OpenWrt为旁路由,由于路由器的wan口并不知道公网IP,需要使用借助网站来得知自己的公网IP,我们在Service → Dynamic DNS → Services → ddns_ipv4 → Edit → Advanced Settings → IP address source选择URL,URL to detect可以选择默认ipv4的url
http://checkip/dymdms.com
-
这样DDNS的配置就完成了,以后如果运营商给你换了公网IP也不会影响域名的配对了
-
配置完后可以去Cloudflare看看ip地址有没有刷新
-
现在有了DDNS,我们就可以把Peer的EndPoint改成自己的域名了
-
将OpenWrt生成的Configuration填入其他设备,就可以接入VPN了
Trouble Shoot
-
我发现当Windows连入VPN后无法访问之前
192.168.2.x
的子网了,并不是连接不上而是被block,但是MacBook没有这个问题,192.168.2.x
和192.168.100.x
都是能访问的,这有可能是Windows没有自动添加路由表。使用管理员权限打开CMD,然后输入下面命令就能解决问题了route add 192.168.2.0 MASK 255.255.255.0 192.168.100.1 METRIC 1