我想要以下设置。有两个接口:wlan0wg0wlan0是默认的,wg0是 wireguard 接口,已配置手动

默认情况下,流量会转到wlan0。但是,如果将进程放在 cgroup 中(例如wgcgrp(classid 为 1),则流量必须通过 )wg0

我完全不知道该怎么做。我尝试了以下方法。我会说得非常详细,因为我非常沮丧。

[Wireguard 设置]

首先,这相当简单ip l a wg0 name wg0 type wireguard。然后,我有一个 w.conf 文件,其中包含提供给的数据wg setconf wg0。它设置私钥、公钥、允许的 IP(0.0.0.0/0、::0/0)和端点。没有什么更多。然后我还设置了 wg0 接口的 IP 地址,这是我事先知道的:ip ad a $ip dev wg0; ip -6 ad a $ip6 dev wg0。现在我添加路由:ip l s wg0 up; ip r a default dev wg0 t wg

[防火墙]

据我所知,我必须让 cgroup 流量以某种方式到达wg路由表。我知道如何做到这一点。我必须在类型的链内标记 cgroup 流量route,然后伪装它。以下是规则。

table inet t {
    chain post {
        type route hook output priority mangle; policy accept
        meta cgroup 1 counter meta mark set meta cgroup
    }
    
    chain masq {
        type nat hook postrouting priority srcnat; policy accept
        meta cgroup 1 oifname "wg0" counter masquerade
    }
}

不再我的防火墙中的规则。

[路线设定]

标记的流量必须进入表格wg,因此我运行ip ru a fwmark 1 lookup wg

[结果]

cgexec -g net_cls:wg ping 8.8.8.8 我什么也没得到。为什么?我甚至不知道如何开始调试。这应该很简单,但我还差得远。

答案1

看来您需要ip r a "$endpoint_ip" dev wlan0 via "$wlan0_gateway" t wg使此设置正常工作。这对我来说非常出乎意料,因为 openVPN 无需此附加路由即可工作。如果有人知道并解释原因,我将不胜感激。可能是因为 openVPN 是一个用户空间进程,而 wireguard 在内核中运行并以不同的方式进行路由?

相关内容