
我想要進行以下設定。有兩個接口:wlan0
和wg0
。wlan0
是預設的,wg0
是wireguard接口,已配置手動。
預設流量會轉到wlan0
.但是,如果將進程放入 cgroup 中(例如wgcgrp
(classid 為 1)),流量必須通過wg0
.
我完全不知道該怎麼做。我嘗試的就是這個。我會說得很囉嗦,因為我很沮喪。
[線衛設定]
這很簡單,首先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 在核心中運行並且路由不同?