web-dev-qa-db-ja.com

すべてのデフォルトゲートウェイを削除する方法

私はカスタムビルドのLinuxマシンを実行しているため、すべてのLinuxコマンドを使用できるわけではありません
ネットワーク関連のコマンドを実行するので、コマンドを実行する直前にデフォルトゲートウェイを設定する必要があります。その後すぐにそのゲートウェイを削除します。

そのために、すべてのコマンドを1行で実行します。

/sbin/route add default gw 10.10.10.10;my command;/sbin/route del default gw 10.10.10.10;

問題は、何らかの理由で、同じマシン上に2つのデフォルトゲートウェイを見つけたため、すべてのコマンドが失敗する原因になりました。テストを実行する前にデフォルトゲートウェイを設定しても、混乱し、テストを実行できないためです。

では、1つのコマンドですべてのデフォルトゲートウェイを削除する方法はありますか?増加しているマシンが大量にあり、すべてのマシンにスクリプトを作成するのは現実的ではありません。次のようにsimpleというコマンドが必要です。

/sbin/route del all default;set my default gw;mycommand;/sbin/route del all default;

これまでに見つけたのは、aデフォルトゲートウェイを削除するコマンドだけですが、それらのすべてではありません/sbin/route del defaultこれは私にはうまくいきません。

/sbin/routeヘルプは以下を表示します

/sbin/route --help

Usage: route [{add|del|delete}]

Edit the kernel's routing tables

Options:
        -n      Don't resolve names
        -e      Display other/more information
        -A inet Select address family
13

すべての答えは素晴らしいですが、別のアプローチを使用してこの問題を解決しました。コマンドを使用してデフォルトゲートウェイを1つだけ追加しましたが、すでに存在する場合は失敗します。したがって、最終的にはコマンドの最後に間違ったゲートウェイを削除します。これは2回目のISAで動作するはずです。

ip route add default via my-gatewayip route del default

3

ipの代わりにrouteを使用する場合、次のコマンドを実行するだけです。

ip route del 0/0

私はすべてのデフォルトルートをキャッチすると思います。

17
jsbillings

ipを使用してすべてのデフォルトゲートウェイを削除するには

ip route flush 0/0
4
Esben Haabendal

コードが複数のデフォルトゲートウェイで機能しない場合は、デバイスごとに複数のIPアドレスも確認する必要があります。

すでに回答を受け取っているので、ここでは別の方法を説明します[〜#〜]絶対にしない[〜#〜]理由は、システムの構成を変更するためですスクリプトを実行/テストしたい。代わりにネットワーク名前空間を使用するのはどうですか。簡単な紹介として、仮想デバイスをNS(namespace)に追加する方法をご覧ください http://code.google.com/p/coreemu/wiki/Namespaces

Testという名前の名前空間を作成し、この名前空間でコマンドを実行するには、次を実行します。

ip netns add test
ip netns exec test COMMAND

ここで、COMMANDは、たとえば、シェルまたは単なるサーバースクリプトです。

2
Ulrich Dangel