在办公室,我们有一台单机服务器,该服务器在 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 route
和ip 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