如何从具有两个 ISP 连接的 Ubuntu 服务器进行路由?

如何从具有两个 ISP 连接的 Ubuntu 服务器进行路由?

在办公室,我们有一台单机服务器,该服务器在 ADSL 路由器后面$SERVER_IF有一个本地 IP 地址,该路由器有一个来自 的静态外部 IP 地址。一切正常,传入和传出连接均能顺利通过。$SERVER_IP_MAIN=192.168.1.12/24$ROUTER_MAIN$ISP_MAIN

现在,我们为了后备目的建立了另一个连接,$ISP_BACKUP使用$ROUTER_BACKUP我不需要任何负载平衡;所有传出连接仍应通过$ISP_MAIN,我只是想确保所有传入连接$ISP_BACKUP都通过$ROUTER_BACKUP

我尝试遵循一些通用建议,使用ip routeip rule来遵循一些通用建议,但我一定是做错了什么。(我的主要来源:http://lartc.org/howto/lartc.rpdb.multiple-links.html

当前设置如下:

server has:
    $SERVER_IF=eth0 with address $SERVER_IP_MAIN=192.168.1.12/24
    $SERVER_IF:0=eth0:0 with address $SERVER_IP_BACKUP=192.168.252.12/24 # pseudo interface

$ROUTER_MAIN has:
    $ROUTER_MAIN_IP=192.168.1.254/24

$ROUTER_BACKUP has:
    $ROUTER_BACKUP_IP=192.168.252.1/24

tcpdump在服务器上使用,我验证了$ROUTER_BACKUP设置正确,因为通过的数据包$ISP_BACKUP正在被传送到$SERVER_IP_BACKUP,但我认为答复正在通过路由,$ISP_MAIN因为我无法从外部服务器建立连接:

12:54:06.950853 IP 178.128.57.39.dsl.dyn.forthnet.gr.57987 > 192.168.252.12.5631: Flags [S], seq 2240370501, win 5840, options [mss 1452,sackOK,TS val 471912856 ecr 0,nop,wscale 4], length 0
12:54:06.950903 IP 192.168.252.12.5631 > 178.128.57.39.dsl.dyn.forthnet.gr.57987: Flags [S.], seq 2209117020, ack 2240370502, win 14480, options [mss 1460,sackOK,TS val 215023497 ecr 471912556,nop,wscale 4], length 0

请注意,$ROUTER_BACKUP不执行 SNAT,因为服务器接收具有原始外部源 IP 地址的数据包。

我怎样才能实现所需的功能?(即通过$ISP_BACKUP要路由的连接$ROUTER_BACKUP

答案1

好吧,既然设置好了,所需要做的就是:

  • backup添加名为/etc/iproute2/rt_tables
  • ip route add 192.168.252.0/24 dev eth0:0 src 192.168.252.12 table backup(本地网络用于后备目的)
  • ip route add default via 192.168.252.1 table backup(其默认路由)
  • ip rule add from 192.168.252.12 lookup backup(回复时使用$SERVER_IP_BACKUP

我之前肯定以某种方式把那最后一句话搞砸了。

完成上述所有操作后:

  • ip route flush table cache

相关内容