【route】Linux上静态路由的添加

一、背景知识

 

在日常的使用中,或者在服务器中,有多个网卡配置多个地址,访问不同的网络段,这种情况是非常常见的现象,但是,我们需要额外的添加路由表来决定发送的数据包经过正确的网关和interface才能正确的进行通信 。

在哪种情况下,为什么,需要在Linux服务器上添加静态路由?

 

 route命令用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。

实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。

 

如果Linux服务器有多网卡,需要有些网卡走指定的路由,就需要单独设置静态路由。

服务器有多网卡,需要访问内网的另一个网段,不能通过默认网关访问,此时就需要添加静态路由

Linux系统在一个局域网中,局域网有一个网关,能够让机器访问Internet,那么就需要将这台机器的IP地址设置为Linux机器的默认路由。

注意:直接在命令行下执行route命令来添加路由,只是临时生效,当网卡或者机器重启之后,该路由条目就失效了。

 

说明:

 其中Flags为路由标志,编辑当前网络节点的状态

 ·U   up代表路由当前为启动状态

 ·H   host表示此网关为一个主机

 ·G   gateway此网关为一个路由器

 ·R   reinstate route使用动态路由重新初始化的路由

 ·D    dynamically,此路由是动态写入的

 ·M   modified是有路由守护程序或导向器修改

 ·! 此路由当前为关闭状态

 

代理ARP:路由下一跳是接口还是IP设备的最大区别就是ARP表的区别:下一跳是IP设备的话,外LAN数据包毫无疑问交给了IP网关,但是如果下一跳只是接口的话这个是需要单独对目标ip做arp解析的,如果IP网关上没有开启接口的proxy arp feature的话是不会响应这个arp请求的。

 

二、静态路由的添加方式

 

方式一

 

静态路由的添加

 

# route add -net  192.168.0.0/24   gw 192.168.0.1

#   route del  -net   192.168.0.0/24   gw 192.168.0.1  dev eth0

#   route add  -net  192.168.0.0  netmask 255.255.255.0   gw 192.168.0.1 

#   route add  -net  192.168.0.0  netmask 255.255.255.0   gw 192.168.0.1  dev eth0

 

# route add -host 192.168.1.1   dev  eth0

 

######################################################################

route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.25.230.1 dev eth3

route add -net 100.0.0.0 netmask 255.0.0.0 gw 10.25.230.1 dev eth3

iptables -t nat -A PREROUTING  --dport  8443 -j DNAT --to-destination 192.168.1.120

iptables -t nat -A POSTROUTING --dport 8443 -j MASQUERADE

#######################################################################

 

 

静态路由的删除

# route del  192.168.0.0/24   gw 192.168.0.1

#   route del  -net   192.168.0.0/24   gw 192.168.0.1  dev eth0

#   route del  -net  192.168.0.0  netmask 255.255.255.0   gw 192.168.0.1

#   route del  -net  192.168.0.0  netmask 255.255.255.0   gw 192.168.0.1  dev eth0

 

# route del -host 192.168.1.1   dev eth0

 

增加默认路由

#  route  add  default  gw 192.168.0.1

注:添加默认网关地址, 也就是默认路由的下一跳,默认路由一条就够了。

 

说明:

add 增加路由

del 删除路由

-net 设置到某个网段的路由

-host 设置到某台主机的路由

gw  出口网关的IP地址

dev 出口网关物理设备名

 

方式二

 

添加路由

 ip route add 192.168.0.0/24 via 192.168.0.1

#  ip route add  192.168.1.1 dev eth0

 

删除路由

#  ip route del 192.168.0.0/24 via 192.168.0.1

ip route del  192.168.1.1 dev eth0

 

说明:

add 增加路由

del 删除路由

via 网关出口 IP地址

dev 网关出口 物理设备名

 

 

增加默认路由

#   ip route add default via 192.168.0.1 dev eth0

注:  via 192.168.0.1  指向默认路由器

 

 

三、如何在Linux中添加永久路由

 

我们直接在命令行下执行route命令来添加路由,只是临时生效,当网卡或者机器重启之后,该路由条目就失效了。

怎么实现路由添加的永久生效呢?

 

1、写入/etc/rc.loacl

可以将上面提到的命令写入/etc/rc.local文件中,这样在系统启动的时候会自动加入相关的路由设置。

不过这种方法有一个缺点:如果某个系统服务,比如说是NFS服务,这个服务是在启动network服务之后,在执行rc.local之前,如果你设置的有自动挂载的nfs,那么,这里链路的不通畅,会造成挂载的失败。

另外一个就是如果你重启了网络服务,那么路由就失效了,这个时候你不得不重新加载这个文件,但是如果你是远程操作的呢?

如果你的应用对网络要求比较特殊,不建议使用此方法。

 

2、写入/etc/sysconfig/static-routes文件

 

默认在/etc/sysconifg目录中是没有这个文件的,需要我们手工创建,对这个文件的调用在network服务的启动脚本中。

# vim /etc/init.d/network

#  vim  /etc/sysconfig/static-routes 

#################################################

any net 192.168.1.0/24 gw 192.168.1.1

any net 192.168.2.0 netmask 255.255.255.0 gw 192.168.2.1

#################################################

注: 务必注意 /etc/sysconfig/static-routes 文件中路由添加的语法。

这种方式的话,和rc.local比较而言,比较实用,比如nfs,这个路由的生效时间是在网络服务network启动的时候生效的,而其他的一些网络相关服务都是在网络服务启动成功之后再启动的,所以能够保证网络链路的通畅。

如果重启了网络服务,这个脚本是在网络服务启动脚本里面调用的,所以也会自动添加上相关的路由设置。

 

 

 

四、参考

 

Linux添加静态路由表,重启继续生效

http://blog.sina.com.cn/s/blog_67be3b450101de43.html

 

Linux 重启网络服务后路由表丢失问题的解决方案

https://www.iteye.com/blog/yjy110-2205338

 

Linux 添加静态路由

https://blog.csdn.net/moreorless/article/details/5397427

 

设置EIP网卡可见模式

https://help.aliyun.com/knowledge_detail/98641.html?scm=20140722.184.2.173

 

Linux下永久添加静态路由

https://www.cnblogs.com/wanghuaijun/p/8059664.html