前面的博文已有一些记录,讲了我使用 Linux/BSD 系统的一个基本也是终极需求:数据自主、通讯私密。贯穿我的整个 FOSS 生涯中,我都在折腾一件事,搭建安全的 VPN。
那么之前我已经用 BSD (又)搭了一次 WireGuard VPN server,只要客户端(不管什么系统)安装了 WireGuard,都能安全地连接到 WG VPN了,呼呼。 可是还不够,我还想让没有条件安装 WG 客户端的设备也能访问我的VPN,那么我就需要有一个在本地 LAN 的 VPN router (路由器)啦。当然之前也做了一个基于 Alpine Linux 的 VPN router,性能不错,但也还不过瘾(此时的 Alpine 3.12 还没上 Linux 5.10 没有自带 Wireguard:)
0x00
其实很简单,主要感谢 BSD 和 pf 的配置是有文档写得很清晰周到的(但得花时间去阅读和学习呀~~QAQ)。
我现在已有一台旧 amd64 上网本可以用作路由器吧(而且体积小方便携带,可以在公共 wifi 环境下也能使用)
1x00
给内核开启 ip 转发:
net.inet.ip.forwarding=1
2x00
pf 防火墙设置 DNAT 地址转换,路由器会把内网要出去的包源地址改成它自己的地址,这样返回的包才能顺利回来。
## When using vanilla network ##
pass out on egress inet from any to any nat-to egress
## When using WireGuard tunnel ##
#pass out on $wg inet from any to any nat-to $wg
这里有2个小插曲,一是:
另一个:
所以如果你没有给 Wireguard 做开机自启动(或者不愿),那么需要将 pf.conf 设置成 vanilla 的(这样刚开机时才有网络,除非你不想)。等手动启动 Wireguard 后,再调用 wg 专用 pf.conf 文件。
# wg-quick up wg0
# pfctl -f /etc/pf-wg.conf
3x00
好啦,viola,最后就只需要让设备连上跟 OpenBSD 路由器相同的内网,并把设备上的网关(gateway)设置为路由器的 IP (在你连上的热点的设置里)。
Happy Connecting!