ソースポリシールーティングを使用して新しいルーティングテーブルを作成する方法を説明することで、誰かが私の 以前の質問 に回答しました。
echo 13 eth3 >> /etc/iproute2/rt_tables
ip route add default via 10.20.0.1 table eth3
ip rule add from 10.20.0.2 lookup eth3
これらの「ip」コマンドを再起動後も保持するにはどうすればよいですか? /etc/network/interfaces
に追加する適切な行があると思います。これはすぐに(「up」行をインターフェースに追加する)ですか、それとも別の方法がありますか?
iface eth3 inet static
address 10.20.0.2
netmask 255.255.255.0
up ip route add default via 10.20.0.1 table eth3
up ip rule add from 10.20.0.2 lookup eth3
down ip rule del from 10.20.0.2 lookup eth3
down ip route del default via 10.20.0.1 table eth3
(私はUbuntu 12.04を使用しています)。
さまざまな管理者がさまざまな方法でこれを実現します。
私は主にDebianを使用しており、これを行うための最も明白で統合され、文書化された方法として定義されている「最も正しい」とはpost-up
ディレクティブを/etc/network/interfaces
ファイルを作成します。これを行う場合は、ごまかさないようにして、up
またはpost-up
ディレクティブを1つのインターフェースの下に置きます。各インターフェースに適切なルートを追加してもらいます。
私がこれを一般的に見たもう1つの方法は、@ mgorvenが投稿したものと非常によく似たカスタム初期化スクリプトを使用することです。
すべての非ループバックインターフェイスに対してこれを自動的に実行するif-upスクリプトを作成しました。 (ゲートウェイを定義せずにDHCP以外のインターフェイスを処理するように変更したので、バグがある可能性があります。)ルーティングテーブルを事前に作成する必要があります。
/etc/network/if-up.d/source-route
:
#!/bin/sh
set -e
if [ "$METHOD" = loopback ]; then
exit 0
Elif [ "$METHOD" = dhcp ]; then
IF_ADDRESS="$(echo "$IP4_ADDRESS_0" | cut -d'/' -f1)"
IF_GATEWAY="$(echo "$IP4_ADDRESS_0" | cut -d' ' -f2)"
Elif [ "$METHOD" = static]; then
if [ ! "$GATEWAY" ]; then
IF_GATEWAY="$(echo "$IF_ADDRESS" | cut -d. -f1-3).1"
fi
fi
ip route flush table "$IFACE"
ip route add default via "$IF_GATEWAY" table "$IFACE"
ip rule del lookup "$IFACE" || true
ip rule add from "$IF_ADDRESS" lookup "$IFACE"