使用 Wireguard 、OpenWrt、VPS 完成异地组网.
最近入手了一款友善 Nano
pi (型号 FriendlyElec NanoPi R2S (CpuMark : 20651.944334 Scores)
),直接作为家庭内网的主路由使用,各项性能比之前的 新路由3 要好太多了。
折腾了各项插件后,决定使用 WireGuard 打通一个虚拟的家庭网络,方便远程访问家庭内网的各种设备。之前使用过 OpenVPN ,确实有些臃肿,这次正好尝尝鲜,看看 wireguard 的效果怎么样。使用过只能说,这真是个太棒的东西了,有各种我想不到玩法。
在配置的过程中,踩了不少坑,这里简单记录一下。
首先说明一下情况:
- 设备型号:
FriendlyElec NanoPi R2S (CpuMark : 20651.944334 Scores)
- 架构:
ARMv8 Processor rev 4 (v8l) x 4 (1200MHz, 55.5°C)
- 固件
OpenWrt R22.3.23 / LuCI Master (git-22.068.45502-a50e601)
我的固件使用的是 Leans 大神 多功能版固件,自带 WireGuard 等插件,因此在这里略过 OpenWrt 安装 WireGuard 的步骤。
为了远程访问,我直接将一台公网的 nat 服务器作为所有 Wireguard 节点的 Endpoint,所有外网访问均通过这台服务器中转。
WireGuard 公网端准备
在服务器上安装 Wireguard 时,我采用了开源脚本 **wireguard-install 进行安装:
$ curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
$ chmod +x wireguard-install.sh
$ ./wireguard-install.sh
如果github拉取缓慢,可以在 这里 找到我在coding镜像的代码库,直接拷贝使用即可。
安装过程很简单,输入公网 IP地址,之后一路回车即可完成配置。
安装完毕后,再次运行该脚本,即可添加 peer 节点。
每个设备必须有一个独享的配置文件,若公用会导致多设备不可同时在线。
生成的配置文件大概是这样:
cat /root/wg0-client-iphone.conf
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxx
Address = 10.66.66.2/32,fd42:42:42::2/128
DNS = xxxx,xxxx
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxx
PresharedKey = xxxxxxxxxxxxxxxxxxxx
Endpoint = x.x.x.x:xxx
AllowedIPs = 10.66.66.0/24, 192.168.2.0/24
需要注意[Peer]
部分的AllowedIPs
,默认为0.0.0.0/0
,即全局流量均走该 VPN。如果只希望特定网段,在这里制定好即可。比如我的 Wireguard 网段 为10.66.66.0/24
,家庭内网网段为192.168.2.0/24
,我就制定这两个网段即可。隧道激活时会自动为我们配置这两个网段的路由。
为每个客户端(包括 OpenWrt )生成配置文件后,下面将 OpenWrt 接入该网络,并作为我们远程虚拟网和家庭子网的 NAT 使用。
OpenWrt 配置
首先添加一个协议类行为 WireGuard VPN
类型的接口,在基本配置中填入配置文件对应的内容:
之后添加 peer ,继续填写配置文件的内容:
填写完毕后保存,下面配置防火墙,选择 lan
区域即可:
这里也是我出现问题的地方。防火墙这里配置错误,可能导致远程访问不到我们的 OpenWrt 网络,或者是访问不到 OpenWrt 网络内的其他主机。
使用默认的 lan 配置,就无需配置各种复杂的路由或是 iptables 来进行 nat 转换了,如果这里配置有问题,或是有特别的需求,就需要有额外的配置了。
至此,连接该接口,或是重启 OpenWrt ,使用远程接入 WireGuard 网络的另一台设备应该就可以顺利的 ping 同内网设备,访问各种服务了。
我是在踩了一圈坑后,发现仅仅使用以上最简单的配置即可完成配置。
如果有问题,可以使用 tcpdump
或是其他抓包工具一路跟踪 icmp
报文来排查一下问题所在。
至此,配置完毕。