
次のような設定をしたいです。2つのインターフェースがあります:wlan0
とwg0
。wlan0
はデフォルト、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 はカーネルで実行され、ルーティングが異なるためでしょうか?