双线Ubuntu服务器来源路由策略全自动配置脚本

国内IDC常见的所说的双线,就是给了两个不同ISP的接入IP,有些服务周到些,在路由器处追踪处理来源IP会话,但一旦没有,或者是自己拉的两个ISP直接到服务器,情况就麻烦了。

服务器对任意一个IP发来请求,那返回的包应原路返回,链接才能建立;但默认情况下,系统只有一个路由表,只有一个默认路由,来源IP只能从默认路由的gateway出去,那这样另外一个IP就没法用了。

这个情况需要配置多路由表的来源略路由(source policy routing),让不同IP的返回包查找不同的路由表,再根据其中的默认路由返回数据包。

Linux Advanced Routing & Traffic Control HOWTO详述了原理和配置步骤,google一下也会找到很多人家写好的配置脚本,不过总觉得用起来不方便。首先需要在脚本上定义各个网卡的IP/网关/网络等地址,这些数据和系统配置完全重复,一旦修改又得两边同步;然后还需手动修改/etc/iproute2/rt_tables,步骤复杂;其次Debian/Ubuntu的启动脚本比较复杂,这个情况的脚本很难在找个开机的合适时候启动。

经过考虑,决定使用/etc/network/if-up.d下的hook,这里的脚本可以从环境变量获得每一个启动的网卡的各个参数,使用sed等工具处理一下,完全可以实现全自动配置。

脚本放在github:

https://github.com/pentie/ptcoding/blob/master/multi-ip-route

脚本使用了ifquery,ubuntu里面是和ifup/ifdown同一个包的工具,理论上debian也会有。所以只需要配置好/etc/network.d/interfaces,扔好这个脚本,重启网络,双线策略就完美解决了。经证实,在eth0:1 eth0:2那样绑定的单网卡多IP情况使用也完全正常。

文章分类 Unix/Linux, 运维技术 标签: , , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*