![WireGuard 和网络命名空间](https://linux22.com/image/784579/WireGuard%20%E5%92%8C%E7%BD%91%E7%BB%9C%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4.png)
我正在尝试设置一个带有两个 wireguard 接口的 VPN 网关。
一个是可从 init 命名空间访问的网关,它可以转发从 eth0 传入的本地数据包。
第二个接口用于接受 Web 服务器的传入连接。我需要将此接口隔离,以便它不会干扰网关接口。
环顾四周,我认为使用 wireguard 命名空间技巧可能会奏效。这种设置
|----------------------------- |
| ------------------ |
| | vpn forward ns | |
| | | |
| | |<--->-macvlan<|---->| |
| |-|--------------| |<->|eht0 ------- Local network, inc gateway.
| | | |
| | init namespace | |
| | | |
| |<->wireguard if | |
| | |
| ------------------ | |
| | vpn inbound ns | | |
| | | | |
| ||<-->-macvlan<--|---->| |
| || | |
| ||<->wireguard if| |
| |----------------| |
|------------------------------|
但是官方文档上的技术:https://www.wireguard.com/netns/不起作用,因为我需要 LAN 上可用的物理接口来接收要转发的本地数据包。
但它似乎不完整,当我按照这些思路实现某些东西时,使用 macvlan 的命名空间无法连接任何东西,更不用说 wireguard 连接工作了。
我认为我需要为网关接口做的事情如下:
创建一个命名空间并向其中添加 macvlan。添加默认路由,以便此命名空间中的所有内容都通过 macvlan 并扩展为 eth0。在命名空间中创建 wireguard 设备,然后将其移动到 init 命名空间。将 init 命名空间的默认路由设置为 wireguard 接口。那么现在 init 命名空间中的所有内容都通过 wireguard 接口进行路由,而后者又将通过 macvlan,然后通过 eth0 进入更广泛的网络?
对于入站接口:同样的启动方式,但不要将 wireguard 接口移出命名空间。然后我可以在此命名空间中运行我的 Web 服务器,并且通过 wireguard 的入站连接将连接到它。
我不完全理解 macvlan 的工作原理。它仅仅是链接物理设备的别名吗?所以路由到它的任何内容实际上只是路由到 eth0?我需要给它一个 ip 地址吗?如果是这样,它是否需要与我的互联网网关位于同一子网才能访问更广泛的互联网?
有没有更好的方法来实现我想要做的事情?
答案1
我有点想多了。我只需要让两个接口共享一个 fw 标记。
仍然可以通过 wg-quick 创建主界面。不过,需要设置 conf 文件中的 FwMark 值。
第二个接口需要手动创建,它仍然可以使用 wg conf 文件,并设置 FwMark。然后移至隔离命名空间。一旦启动并添加该命名空间内的默认路由,这个使用与主接口相同的 FwMark 的辅助 wireguard 接口就可以独立运行。
如果将服务放置在该命名空间中并在开放端口上监听,则可以使用辅助端点 IP 通过主 wireguard 接口进行连接。