Linuxで既存のルーティングエントリを変更する

Linuxで既存のルーティングエントリを変更する

Linuxで既存のパスエントリのメトリックを変更するコマンドは何ですか?以下のように、「ip path change」コマンドを使用して既存のエントリのゲートウェイを変更できますが、指標は変更できません。他のコマンドがありますか?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1

答え1

(様々な意見を回答でまとめる)

現在、ルートの指標を変更することはできません。として2005年、LKML関連ニュースが発表されました:

[...]フィールドと新しい値に一致する別のフィールドがないため、指標/優先順位を変更できません。したがって、指標を指定するとエントリがまったく見つからず、次のようなNLM_F_CREATEで要求が失敗します。 ENOENT 指定されていません。これは現在のプロトコルの制限であり、これを変更するのは良い考えかもしれませんが、それは些細なことではありません[...]

ip route changeこれは両方で動作するようですip route replace。前者はエラーを引き起こし、後者は追加のパスを生成します(マンページに代替パスが指定されていますreplace)。またはパスを作成します)。これは、ENOENTおよびip route replaceそれ以降のパス生成要求に応答するカーネルと一致します。


したがって、解決策は既存のパスを削除して新しいパスを追加することです。例えば

ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234

答え2

ifmetric変更するパスが通過するインターフェイスを考慮して、パスメトリックを動的に変更できます。

使用法

ifmetric <iface> [<metric>]

たとえば、ifmetric tun0 12通過したすべてのルートの指標を12に変更しますtun0

答え3

で述べたようにコメントこの質問について以下を引用してください。情報linux-netメーリングリスト:「メトリック/優先順位は変更できません。[...]これは現在のプロトコルの制限です。[...]」
唯一の方法は、パスを削除して新しいパスを追加することです。

これは、route次のコマンドを使用して実行されます。

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1

Route コマンドの Debian マンページ

答え4

以下のようにnmcliを介して実行できます。

nmcli connection modify ACTUAL_CONNECTION_NAME ipv4.route-metric 100
nmcli connection up ACTUAL_CONNECTION_NAME

関連情報