さまざまなiptableルールに基づいて、パケットを選択してさまざまなことを行う必要がある小さなプログラムがあります。パケットは次のようにMARK
されます。
iptables -t mangle -d 10.10.0.0/16 -j MARK --set-mark 4
iptables -t mangle -d 10.11.0.0/24 -j MARK --set-mark 5
iptables -t mangle -d 10.0.0.1 -j MARK --set-mark 1
また、ユーザースペースプロセスが何らかのI/Oを実行しているmaintun
という名前のTunデバイスもあります。
影響を受けるパケットがmaintun
との間で送信されるようにするにはどうすればよいですか?
ポリシールーティングを使用します。
まず、いくつかのパケットにマークを付けます。
iptables -A PREROUTING -t mangle -d 10.0.0.1 -j MARK --set-mark 1
次に、新しいルーティングテーブルを作成し、それをTunRoutTableと呼びます。
echo 201 TunRoutTable >> /etc/iproute2/rt_tables
次に、1とマークされたパケットにテーブルTunRoutTableを使用するようにPCに指示します。
ip rule add fwmark 1 table TunRoutTable
次に、新しいルーティングテーブルのデフォルトゲートウェイを提供します。
ip route add default via XXX.YYY.WWW.ZZZ dev tun0 table TunRoutTable
ここで、XXX.YY.WWW.ZZZは、Tun0インターフェイス上のゲートウェイのIPアドレス(通常のドット付きクワッド表記)です。