今天又有朋友问,如何在CentOS里添加永久静态路由?这里总结一下,做个备忘录。
参考RedHat Enterprise 6的官方文档:
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/s1-networkscripts-static-routes.html
我们的服务器一般启用两个网卡,一个配内网地址,一个配外网地址,但我们一般只为外网卡配置默认网关。因为如果两个网卡都配置默认网关的话,数据包出去的时候会不知道该走哪个网关。
本机跟其它机器通信时,会把数据包发送到默认网关,然后默认网关把数据包转发到目的主机。由于配置了外网网卡的默认网关,所以本机与目的主机的外网IP进行通信是OK的;但是与内网IP进行通信就没办法了,因为默认网关无法到达内网网段。(当然,如果这台LINUX机器开启了路由转发就另当别论了。)
为了与内网网段中的机器进行通信,我们写一条静态路由,来指定一个通向内网网段的路径。本文讲的就是如何在CentOS中添加永久静态路由。
添加永久静态路由的方法是,把路由表写入/etc/sysconfig/network-scripts/route-interface配置文件中。interface是你的网卡,如eth1的静态路由配置文件就是route-eth1。
route-interface配置文件有两种写法:ip命令格式和network/netmask格式:
ip命令格式:
- default via gateway dev interface // gateway替换成你的默认网关,interface替换成你的网卡
- ip/netmask via gateway dev interface
- … // 根据需要添加更多的静态路由
- …
network/netmask指令格式:
- ADDRESS0=网段,该网段即你想要到达的网段
- NETMASK0=掩码
- GATEWAY0=网关地址,该网关为本网卡的出口网关,它能够到达ADDRESS0
- … // 根据需要添加更多的静态路由
- …
我们以第一种ip命令格式为例进行说明。
按照官方网站的说法,路由表中的default路由可以省略,因为使用的是默认网关。
重点是第二条路由,它指向了我们所希望到达的特定网段。ip/netmask是你想要到达的网段,gateway是本网卡的出口网关,interface指定网卡。
我们看一段网上的示例,该配置为网卡eth0添加了两条静态路由:
- 10.0.0.0/8 via 10.126.40.254
- 192.168.188.0/22 via 10.126.40.254
上述配置添加了两条静态路由,分别指向了10.0.0.0/8网段,以及 192.168.188.0/22网段。10.126.40.254即是eth0的出口网关。
上述配置来自于:http://www.m690.com/?p=346。
我自己的服务器配置示例,为网卡eth1配置了两条静态路由:
我们也是添加了两条静态路由,分别指向了10.10.0.0/16网段和192.168.0.0/16网段,使用网卡eth1的出口网关10.10.14.254。
- GATEWAY0=10.10.14.254
- NETMASK0=255.255.0.0
- ADDRESS0=192.168.0.0
- GATEWAY1=10.10.14.254
- NETMASK1=255.255.0.0
- ADDRESS1=10.10.0.0
官方提示,使用该格式时,如果有多条静态路由,每条静态路由必须按顺序编号,如ADDRESS0, ADDRESS1, ADDRESS2等,不能跳着编号。
注:网上有资料说,第二条路由中的gateway是下一跳的网关。我特地去问了网络部的同事,他说那是不对的,那个gateway实际上是本网卡的出口网关。
第一条default路由中的gateway,即是外网网卡的默认网关。
第二条路由中的gateway(网卡的出口网关)和default路由中的gateway(默认网关)有什么区别?RedHat Enterprise 6的官方文档中说: The X.X.X.X (指网卡的出口网关)address does not have to be the default gateway IP address。In most cases, X.X.X.X will be an IP address in a different subnet,and interface will be the interface that is connected to, or can reach, that subnet。
文档中所说的different subnet指的是与默认网关不同的子网,该子网必须与interface的IP在同一网段。这里的子网一般是指内网网卡所在子网,这里的gateway一般是指内网网卡的网关。