如何删除所有默认网关


13

我正在运行定制的Linux计算机,因此并非所有Linux命令都可用
我执行与网络相关的命令,因此我需要在运行命令之前设置默认网关,然后立即删除该网关。

为此,我在一行中运行所有命令:

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

问题是,由于某种原因,我曾经在同一台计算机上找到2个默认网关,这导致我的所有命令均失败,因为即使我在运行测试之前设置了默认网关,它仍会混乱并且无法运行我的测试。

那么有没有办法在一个命令中删除所有默认网关?我有大量正在增加的计算机,在每台计算机上植入脚本是不切实际的。我需要一个简单的命令,如下所示:

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

所有到目前为止,我还发现了一个命令来删除一个默认网关,但并不是所有的人 /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

Answers:


17

如果使用ip代替route,则可以简单地运行:

ip route del 0/0

我相信可以捕获所有默认路由。


谢谢,但是它仍然仅删除一个默认网关,而不是全部。
Muhammad Gelbana

4
然后,也许您应该遍历所有默认路由并删除它们,而不是假设您的第一个删除操作删除了所有默认路由。听起来您的代码正在以某种方式中断并添加了多个默认路由。这不是正常情况。
jsbillings 2012年

我同意我的代码在某个时候中断了,但是也许我可以通过解决GW问题来快速解决此问题,而不是浪费很多我没有的时间。非常感谢你的帮助。
Muhammad Gelbana

这仅是现代linux。
jordanm 2012年


3

所有答案都很好,但是我使用另一种方法解决了这个问题,我使用命令仅添加了一个默认网关,但是如果已经存在一个默认网关,则会失败。因此,最终在命令末尾删除了错误的网关。这应该在第二次isa上起作用。

ip route add default via my-gateway ip route del default


2

如果您的代码使用多个默认网关中断,则您可能还应该在每个设备中查找多个IP地址。

正如您已经收到的答案一样,这里是另一种方法,因为您永远不要仅因为要运行/测试脚本而更改系统的配置。如何使用网络名称空间。作为简短介绍,如何将虚拟设备添加到您的NS(命名空间)中,请参阅http://code.google.com/p/coreemu/wiki/Namespaces

要创建一个名为test的命名空间并在该命名空间下运行命令,只需运行

ip netns add test
ip netns exec test COMMAND

其中COMMAND可以是您的Shell或仅是服务器脚本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.