国内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情况使用也完全正常。
转载请注明:爱开源 » 双线服务器来源路由策略全自动配置脚本