对于 PC 来说, 一台电脑一般最多就两张网卡 (有线 + 无线). 只要能上网, 哪管是走的哪张网卡. 然鹅, 对于服务器来说, N 多张网卡(N> 2) 是正常不过的事情, 如何在多网卡多网关下正常, 合理地工作, 这就就需要各种交换机以及本文的策略路由来配合了.
首先来科普下 策略路由 和 路由策略 的区别.
路由策略.(Route-Policy)
路由策略是通过修改路由表的路由条目来控制数据流量的可达性. 即对接受和发布的路由进过滤. 这种方式称为路由策略.
策略路由.(Traffic-Policy)
策略路由是通过用户制定的策略进行转发, 且该策略优于路由表的转发. 这种方式称为策略路由.
由此可知, 路由策略是基于路由表进行流量的转发, 而策略路由是基于策略进行流量的转发. 两者都为了控制网络流量的可达性或调整网络流量的路径.
首先来张图, 介绍下本文的网络环境
简易网络拓扑
服务器有两个网口, eth0 和 eth1
eth0 : 地址 10.16.0.5 , 网关 10.16.0.1 , 掩码 255.255.255.0, 对应公网 IP 1.2.3.4
eth1 : 地址 10.16.254.5, 网关 10.16.254.1, 掩码 255.255.255.0, 对应公网 IP 5.6.7.8
正式开始:
修改 / etc/iproute2/rt_tables 文件, 追加以下两行
252 e0
251 e1
解释: 这里我们自定义了两个策略路由表, 假设 e0 对应 eth0,e1 对应 eth1, 以便操作
2. 编辑启动脚本 /etc/rc.local, 增加下面内容
- ip route flush table e0
- ip route add default via 10.16.0.1 dev eth0 src 10.16.0.5 table e0
- ip rule add from 10.16.0.1 table e0
- ip route flush table e1
- ip route add default via 10.16.254.1 dev eth1 src 10.16.254.5 table e1
- ip rule add from 10.16.254.5 table e1
OK, 理论上重启后服务器就能被不同的 IP 访问到并正常收发数据
然鹅 too young, 第 2 中 rc.local 这种 N 多年的老掉牙的东东, 一点也不好用, 时灵时不灵的, 而且一点也不优雅(rc.local 万金油时代已经过去了_(:з」∠)_
3. 现代化的网络管理, 当然是得用 network 或者 NetworkManager 啦, 无视第二步, 我们继续来
(1)新增 /etc/sysconfig/network-scripts/rule-eth0 文件, 增加以下内容
from 10.16.0.5 table e0
(2)新增 /etc/sysconfig/network-scripts/rule-eth1 文件, 增加以下内容
from 10.16.254.5 table e1
(3)编辑或新增 /etc/sysconfig/network-scripts/route-eth0 文件, 增加以下内容
- 10.16.0.0/24 dev eth0 src 10.16.0.5 table e0
- default via 10.16.0.1 table e0
(4)编辑或新增 /etc/sysconfig/network-scripts/route-eth1 文件, 增加以下内容
- 10.16.254.0/24 dev eth1 src 10.16.254.5 table e1
- default via 10.16.254.1 table e1
至此大功告成, service network restart 重启网络体验一下
At last, 你说不知道服务器访问外网默认走哪个网关? 骚年, 给你的网卡加个 Metric, 爱往哪走往哪走~
参考资料:《CentOS 双线双 IP 配置》
《ポリシーベースルーティングの設定について http://blog.shinkaku.co.jp/archives/37936231.html 》
来源: https://www.qcloud.com/developer/article/1501013