使用 rt_tables 巧妙配置 Linux 多网卡多路由实现动态路由

2015-12-17 12:59:47 +08:00
 wsgzao
## 前言

一般在多网卡的网络访问关系中我们通常根据目标 IP 地址段来添加静态路由表,这个需求一般都比较简单也不需要使用非常复杂的命令,说实话如果不是因为开发测试中心同事[@谢恒]( https://cn.linkedin.com/in/恒-谢-aa5598106)的乱入启发,我也不会发现还有这样一种灵活通用的配置方法来实现 Linux 多网卡多路由的设定,灰常感谢。

>rt_tables 是一种更加简单灵活的动态路由实现方法

---

## 更新记录

2015 年 12 月 17 日 - 初稿

阅读原文 - http://wsgzao.github.io/post/iproute2/

扩展阅读

- Routing Tables - http://linux-ip.net/html/routing-tables.html
- linux 配置静态路由 - http://www.361way.com/linux-define-static-route/4053.html

---

## 静态路由表和动态路由的区别

通常我们维护静态路由表会手工填写所有 IP 地址段的路由规则,使用命令直接临时生效或者写入配置文件永久生效,先以 Windows 和 Linux 常用命令行方法为例

``` bash
--Windows 静态路由
--键入 route -p add [目标] [mask <网络掩码>] [网关] [metric <度量值>] [if <接口>]
route print
route delete
route -p add 172.16.19.0 mask 255.255.255.0 198.15.0.1
注意关闭 windows 防火墙

#Linux 静态路由
--RHEL
vi /etc/sysconfig/network
default via 192.168.3.1 dev eth0
10.211.6.0/24 via 192.168.3.1 dev eth0
10.0.0.0/8 via 10.212.52.1 dev eth1

--SuSE
vi /etc/sysconfig/network/routes
default 192.168.3.1 - -
10.0.0.0 10.212.52.1 255.0.0.0 eth1
10.211.6.0 192.168.3.1 255.255.255.0 eth0

```

这种办法针对少量的规则还可以轻松应对,但规则一旦增加麻烦也就接踵而至,网段地址不断变化就必须及时更新路由表,否则其他用户就无法访问。如果可以根据用户访问进来的路径设定动态路由就会方便很多,而 rt_tables 就是为此而生。
3424 次点击
所在节点    程序员
11 条回复
extreme
2015-12-17 13:38:50 +08:00
#刷新 net_192 路由表
说清空不是更好理解吗?
#添加回环地址
真可笑,这句话什么意思
为什么不说添加一个路由规则到 net_192 表,这条规则是 net_192 这个路由表中数据包默认使用源 IP 172.31.192.201 通过 ens4f0 走网关 172.31.192.254 。
#从 172.31.192.201 过来的,走 net_192 路由
为什么不说来自 172.31.192.201 的数据包,使用 net_192 路由表的路由规则

写教程不解释每个命令各个参数及其作用,就丢个稀里糊涂的介绍,是你不知道还是你觉得大家都知道?
你这样配写教程文章吗?
extreme
2015-12-17 13:40:20 +08:00
一时激动说多了,等被喷。
julyclyde
2015-12-17 14:21:48 +08:00
lz 还没搞清楚输入命令和编辑文件的重大区别呢,居然把 windows 里键入命令和 Linux 里编辑文件相提并论
jasontse
2015-12-17 14:24:03 +08:00
原来动态路由是这意思啊,大开眼界。
那策略路由是什么呢?
wsgzao
2015-12-17 15:40:47 +08:00
@extreme 我写出来就是要不断学习和完善,我没有说自己的理解是准确的,我相信大家的知识面比我更广更有说服力
wsgzao
2015-12-17 15:43:35 +08:00
@julyclyde 我只是按照习惯写,语句表述有误,后面会统一修改
e1eph4nt
2015-12-17 17:34:32 +08:00
1. 这是策略路由
2. iproute2 命令跟 route 命令混用很奇怪,建议都用 iproute2
wsgzao
2015-12-17 19:47:27 +08:00
@e1eph4nt 学习了,我再去 redhat 看看原文如何解释的
maoyipeng
2015-12-18 09:44:13 +08:00
wsgzao
2015-12-18 11:45:58 +08:00
@extreme 已按照你的写法更新,只是 flush 我可能习惯理解刷新缓存,不过也无妨啦,有问题或者更好的办法欢迎继续分享哈

@maoyipeng 谢谢,已增加链接
dandycheung
2015-12-18 15:52:17 +08:00
赞楼主的态度。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244180

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX