如何在Ubuntu Server中设置静态路由?

我从Ubuntu 8.10开始使用Ubuntu; 今天我正在使用Ubuntu 12.04服务器。

我在启动时保持静态路由有困难。 我通常会把路线命令

/sbin/route add -net /  dev  

/etc/rc.local或者我会在目录/etc/network/if-up/创建一个文件(名为routes ),但是我注意到在Ubuntu 12.04上它没有用。

如果我在shell中键入命令,它们可以工作,但是当它们在指定文件中时,相同的命令不起作用。

我已经尝试将文件名更改为其他名称,认为我的文件名( routes )在Ubuntu 12.04中可能是错误的,但这也不起作用。

我还注意到命令/sbin/ifconfig工作,少了/sbin/route

网络设置有什么变化?

如何在Ubuntu 12.04上定义静态路由?

您可以在/etc/network/interfaces放置静态路由:

 auto eth0 iface eth0 inet static address 192.168.1.2 netmask 255.255.255.0 up route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 up route add -net 172.16.0.0 netmask 255.240.0.0 gw 192.168.1.1 

我经常发现定义静态路由的正确位置在/ etc / network / interfaces中,如果要使用/etc/init.d/networking restart全局重启网络,则可以。 但是如果你要使用ifdown和ifup来单独关闭一个接口,ifup将以错误结束:

 ifup eth1 RTNETLINK answers: File exists Failed to bring up eth1. 

因为它试图定义路线,但它已经定义。 无论如何界面都会启动,但ifup不会更新/运行/ network / ifstate所以下次你将我们ifdown你将无法执行它,除非你使用–force标志。

要使ifup继续配置,即使已定义路由,也可以在/ etc / network / interfaces中定义路由时使用此格式

 up ip route add 172.16.0.0/24 via 192.168.10.1 || true up ip route add 192.168.0.0/16 via 192.168.10.1 || true 

这样,您将在输出中显示警告,但接口配置将完成

 ifup eth1 RTNETLINK answers: File exists RTNETLINK answers: File exists ssh stop/waiting ssh start/running, process 18553 

您可以尝试这个(将其添加到/etc/network/interfaces ),这几乎是设置路由的完整方法:

 auto eth0 iface eth0 inet static post-up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 post-up /bin/mount -t nfs 192.168.0.203:/motd/ /motd/ 

在Ubuntu中有一个ifupdown-extra avaible包。
它提供自动脚本(安装在/etc/network/*/ ),其中一个脚本用于添加静态路由。

其配置文件是/etc/network/routes

这个配置文件的顶部有一个很好的描述:

此配置文件由static-routes if-updown脚本和/etc/init.d/networking-routes脚本读取,以设置与给定接口或全局路由关联的路由列表。

我使用的示例路由是:

 192.168.240.0 255.255.255.0 192.168.130.3 em3 

对我们有用的是

 sudo route add -net 192.168.0.2/32 gw 192.168.1.1 netmask 255.255.0.0 

我曾经在Mac上运行:

 sudo route -n add -net 192.168.0.2/32 192.168.1.1 

但是在ubuntu上,IP和最后一个“网络掩码”部分之间的“gw”丢失了(在ubuntu上也不是必需的)