将指定cgroup流量路由至WireGuard接口(wg0)的配置失败求助
将指定cgroup流量路由至WireGuard接口(wg0)的配置失败求助
我现在想实现这样的网络配置:系统有两个接口wlan0和手动配置的WireGuard接口wg0,默认流量走wlan0,但如果进程被放入名为wgcgrp(classid为1)的cgroup,流量必须走wg0。
我完全不知道哪里出问题了,下面是我详细的操作步骤——实在有点崩溃,所以写得很啰嗦:
WireGuard配置步骤
这部分我觉得配置得还挺简单的:
- 创建wg0接口:
ip l a wg0 name wg0 type wireguard - 用预配置的
w.conf文件加载WireGuard配置:wg setconf wg0 w.conf,这个配置里只包含私钥、公钥、允许的IP段(0.0.0.0/0和::0/0)以及端点信息,没有其他内容。 - 给wg0设置预先确定好的IP地址:
ip ad a $ip dev wg0; ip -6 ad a $ip6 dev wg0
- 启动接口并添加默认路由到名为
wg的路由表:
ip l s wg0 up; ip r a default dev wg0 t wg
防火墙配置(nftables)
我理解应该把cgroup的流量导向wg路由表,所以打算用防火墙标记cgroup流量并做伪装。我的nftables规则如下(没有其他额外规则):
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测试,结果完全没响应!我都不知道该从哪里开始调试了,这看起来应该很简单,但我完全摸不着头绪。
备注:内容来源于stack exchange,提问作者EmErAJID
相关产品推荐
相关产品推荐

