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

関連情報