我建立了一个服务器(vps)来扮演我的网关的角色。我的整个个人网络都是通过wireguard连接到后面的。每个想法都很有效,我或多或少遵循https://openbsdrouterguide.net和 pf 文档。
我现在的问题是:我希望我的网关使用wireguard通过protonvpn与互联网(除了我的个人网络)进行通信。我在上面构建了一个新的 wg 界面,使用 proton 配置,显然它运行良好。但我不知道如何在出去之前通过质子接口(wg1)传递我的私人局域网(wg0)的传出流量(到互联网)。
这是路由问题还是 pf 规则问题?
如果您能给我一些提示,请提前致谢。
答案1
首先,您需要确保wg1
VPS 上的出口接口(即,所有到互联网的流量都将在该接口上出去。这可以通过wg1
使用 将远程端设置为默认网关来实现route
。如果 VPS 有其他接口(和网关),您可能想要更改wg1
的优先级 route
也将有助于确保一切按预期工作:route -n show
检查路由表并route -n get <some_external_ip_address>
检查数据包将通过哪个接口离开计算机。
然后,您需要使用 PF 将传入流量(即从wg0
)NAT 到wg1
,使用类似于
vps = <ip_addresses of the vps>
my_lan = <ip addresses of the LAN, or its network range>
pass in on wg0 from $my_lan to !$vps
pass out on wg1 from $my_lan nat-to wg1
打开/etc/pf.conf
(请不要盲目复制粘贴,并根据您的情况进行调整)。
实际上,我会分别尝试每个步骤:首先尝试设置 NATing 并查看 VPS 是否充当网关,而不使用 ProtonVPN。然后禁用 NAT,将 ProtonVPN 设置为默认网关,并检查 VPS 是否默认通过它访问互联网。然后最后将这两件事联系在一起。
另外,请注意,更改远程计算机上的路由表和 PF 规则是一种久经考验的方法,会将您自己锁定在外。我们都遇到过这种情况。最好有控制台访问权限。
答案2
非常感谢泽。这很有帮助。我不知道路线得到!应该阅读更多手册页:o 我不确定我有一个“安全”配置,但它有效!如果可以帮助别人,我会提供一些步骤。在vps服务器上安装两个wg接口后:
将默认路由更改为 wg1 (protonvpn) 接口的 ip。所有传出流量都将经过 wg1。
添加带有目标 protonvpn 端点(您在 wg1 中作为端点放置的端点)的路由以及原始 ISP 提供商网关的网关。这允许将 protonvpn 端点加入您的互联网连接接口。
添加带有目的地的路由,您的计算机在专用 LAN 中的外部 IP,以及您的 ISP 提供商的网关!事实上,wg0,我的私人局域网,不应该通过 protonvpn 进行通信,如果不是的话,它会弄乱一切,因为通信到达我的 vps IP 并通过 protonvpn 出去......这个步骤对我来说是必要的,也许是其他选择?因为我被动态IP困住了。对于 wg 来说,使用保持活动选项就可以了。但是对于路由表,我应该编写脚本吗?我应该使用 pf rdr-to 吗?
在 pf 中添加翻译规则(同时在 wg0 和 wg1 上传入 out):
- 通过 $ext 从 wg0:network 到任何 nat-to $ext # 这允许与我的私人 LAN 通信,$ext 是我连接到互联网的接口。
- 在 $ext 上从 wg1:network 传递到任何 nat-to $ext
- 在 $wg1 上从 wg0:network 传递到任何 nat-to $ext # 从专用 lan 到 proton vpn 的 nat 流量
对第 3 点有什么想法吗?