如何在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上也不是必需的)