服务器多块网卡,需要访问多个网段,因此需要手动添加路由信息到路由表。
-----------------------------操作-----------------------------------------
一:使用 route 命令添加
使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:
//添加到主机的路由(针对单个主机添加)
# route add –host 192.168.1.11 dev eth0
# route add –host 192.168.1.12 gw 192.168.1.1
//添加到网络的路由(针对某个网段添加)
# route add –net 192.168.1.11 netmask 255.255.255.0 eth0
# route add –net 192.168.1.11 netmask 255.255.255.0 gw 192.168.1.1
# route add –net 192.168.1.0/24 eth1
//添加默认网关
# route add default gw 192.168.2.1
//删除路由
# route del –host 192.168.1.11 dev eth0
后来发现每次重启路由信息都会丢失,需要再次手动添加,于是把路由信息添加到rc.local里面的,服务器重启之后,执行"route -n" 命令查看,需要添加的路由表信息都有了,一切看似非常完美。
-----------------操作------------------------
在/etc/rc.local里添加
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254
但是。。。。
后来发现时不时的服务器还是无法访问某个网段,自己技术不精,只能非常艰难的通过各种方式去查找原因。后来发现,是因为其中一块网卡故障,造成网卡重启了。因为有4快网卡,所以当时想法很简单,那就重新换一块。
之后又风平浪静了一段时间,但是(这两个字太可怕了。。。),某一天一个网段又访问不到了,查看message日志,果真,网卡服务又自动重启了。看来这种临时解决方案是不行的,需要保证在网卡重启以后要添加的路由信息能够自动添加上,rc.local里面的脚本写入只会在服务器重启的时候有效,看来还得找其他的路由表写入切入点。
一番搜索,发现需要在”/etc/sysconfig/static-routes“里头写入要添加的路由信息即可,static-routes这个文件就是保存静态路由表,重启后不会掉,如果文件目录下没有这个文件,自己手动建立一个。但是刚开始尝试使用这种方案,发现没有效果,要么语法写错了,要么是路由添加错了。
---------------------------------以下是引用-------------------
根据网上的说法,static-routes其实在被network这个脚本调用的,打开这个脚本:
/etc/rc.d/init.d/network
里面有写到:
# Add non interface-specific static-routes.
if [ -f /etc/sysconfig/static-routes ]; then
grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
/sbin/route add -$args
done
fi
network在执行的时候到static-routes里面寻找any开头的行,然后执行
/sbin/route add -$args 相当于手动执行了route add脚本,那后面事情就简单了,回到了手动执行的方式,根据前面的说明,正确的脚本就是:
any host 10.0.0.10 gw 192.168.1.1
any net 192.168.3.0/24 gw 192.168.3.254 dev em2
network执行的时候把any去掉,获取后面的参数:host 10.0.0.10 gw 192.168.1.1
然后执行route add -host 10.0.0.10 gw 192.168.1.1
注意这里host前面的-是network自带的,不需要配置到static-routes文件中。
---------------------------------------------end----------------------------------
在这位朋友的指导下,问题得到了解决,
也尝试了一下any net 192.168.3.0/24 gw 192.168.3.254的另外一种写法:
any net 192.168.3.0 netmask 255.255.255.0 gw 192.168.3.254 em2
此种写法也是正确的,因此可以理解为192.168.3.0/24=192.168.3.0 netmask 255.255.255.0
现在,好像万事大吉了,但是还有个疑问,那块内网网卡为什么会不定时重启呢?
最后也确认了另外一个问题,就是之前添加路由的时候,有时候会报错:
SIOCADDRT: No such process
这个问题是出在自己添加时候的网管号段写错了,应该是10.254,一直写成11.254。。。
另外,也发现网上对这个问题的另外一种解决方案:
1:一般是配置的IP地址有问题,注意检查ip与gateway是不是在一个网段内,还有是不是有拼写错误
2:如果你添加/修改默认网关时遇到这个问题。原因:你要添加的网关不在你主机所在的网段。比如你要添加的网关是10.57.50.1
route add 10.57.50.1/32 dev em2(这句尝试没问题)
然后再
route add default gw 10.57.50.1(尝试后好像直接把默认网关修改了,造成外网无法访问,远程无法操作了。。。,default gw 与外网映射,失误。。。)
————————————————
1、手动解决方案
通过其他服务器通过ssh IP 形式跳转到目标服务器执行route add -net 10.0.0.0/8 gw 10.0.82.1
但是这种方法在重启服务器或者重启网络服务后可能存在路由丢失问题。
2、通过在 /etc/init.d/network文件中自动调用添加路由命令
在服务器在重启或者重启网络服务后会执行文件 /etc/init.d/network ,通过在该文件添加route add -net 10.0.0.0/8 gw 10.0.82.1 (文件中除了方法内的任意位置,推荐放在最后一行)
3、通过添加static-routes文件保持静态路由表
在/etc/sysconfig/static-routes里头写入要添加的路由信息即可,static-routes这个文件就是保存静态路由表,重启后不会掉,如果文件目录下没有这个文件,通过vim /etc/sysconfig/static-routes 手动创建一个。然后将”any -net 10.0.0.0/8 gw 10.0.82.1“添加到该文件中 ,退出编辑模式 按:wq保存退出。
注意:注意这里net前面的-是network自带的,不需要配置到static-routes文件中。
该部分逻辑与方法2类似:
可以看到到/etc/init.d/network文件中的部分脚本逻辑:
/etc/init.d/network在执行的时候到static-routes里面寻找any开头的行,然后取到any后面的内容执行/sbin/route add -$args命令 。即是/sbin/route add -net 10.0.0.0/8 gw 10.0.82.1。
因为一个服务器做了2个bond 0(em1,em2) bond1(em3,em4) 但是默认路由只生成了bond1的默认网关。但是bond1是数据库的心跳线。不是来做数据库数据传输用得。所以导致数据库无法访问。在rc.local 手动添加默认路由,但是系统重启后不生效。所以在网上找了一些办法。最终解决。
一:使用route 命令添加
1、使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:
添加到主机的路由
添加到网络的路由
添加默认网关
删除主机路由:
删除网络路由:
删除默认路由
二:在linux下设置永久路由的方法:
1.在/etc/rc.local里添加
2.在/etc/sysconfig/network里添加到末尾
3./etc/sysconfig/static-routes:写入路由信息,如果没有这个文件自己创建 (尝试过十分好用)!
解决NFS问题的描述:
4、在/etc/sysconfig/network-script/route-interface下添加路由(每个接口一个文件,如果没有就创建一个,只能添加针对该接口的路由)
ps:注意这里的掩码是0而不是32,因为这里是网段而不是路由。保存退出后,service network restart。
使用route -n或netstat -r查看路由表。
默认路由已经被添加到路由表里面了,注意如果有两块网卡,需要设置默认路由才能访问internet。
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/8224.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~