私はカスタムビルドの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
すべての答えは素晴らしいですが、別のアプローチを使用してこの問題を解決しました。コマンドを使用してデフォルトゲートウェイを1つだけ追加しましたが、すでに存在する場合は失敗します。したがって、最終的にはコマンドの最後に間違ったゲートウェイを削除します。これは2回目のISAで動作するはずです。
ip route add default via my-gateway
ip route del default
ip
の代わりにroute
を使用する場合、次のコマンドを実行するだけです。
ip route del 0/0
私はすべてのデフォルトルートをキャッチすると思います。
ip
を使用してすべてのデフォルトゲートウェイを削除するには
ip route flush 0/0
コードが複数のデフォルトゲートウェイで機能しない場合は、デバイスごとに複数のIPアドレスも確認する必要があります。
すでに回答を受け取っているので、ここでは別の方法を説明します[〜#〜]絶対にしない[〜#〜]理由は、システムの構成を変更するためですスクリプトを実行/テストしたい。代わりにネットワーク名前空間を使用するのはどうですか。簡単な紹介として、仮想デバイスをNS(namespace)に追加する方法をご覧ください http://code.google.com/p/coreemu/wiki/Namespaces 。
Testという名前の名前空間を作成し、この名前空間でコマンドを実行するには、次を実行します。
ip netns add test
ip netns exec test COMMAND
ここで、COMMANDは、たとえば、シェルまたは単なるサーバースクリプトです。