1.
概览与准备工作
目标:在台湾两条ISP线路上实现服务器对外高可用与流量冗余。准备:确认两家ISP(如中华电信、台湾大哥大或远传)的公网IP段、是否支持BGP、对等ASN/接入方式;准备可管理的边缘路由器/防火墙(支持BGP/VRRP或可运行FRR/Quagga),以及一台或多台应用服务器。小分段:检查ISP交付的网关IP、子网掩码、默认路由与DNS。
2.
物理与接口规划
步骤:1) 将两条线路分别接入路由器的不同物理接口(eth0 = ISP-A,eth1 = ISP-B);2) 在服务器端网卡规划VIP(虚拟IP)用于对外服务;3) 保留管理网段与内网交换机连接。小分段:标注接口、IP、网关,记录MAC地址以便排查。
3.
路由基础:使用策略路由做出站分流
Linux示例:为每条ISP建立独立路由表并按来源IP或标记选择路由。命令示例:ip route add default via 203.0.113.1 dev eth0 table ispA;ip route add default via 198.51.100.1 dev eth1 table ispB;ip rule add from 10.0.0.0/24 table ispA;ip rule add from 10.0.1.0/24 table ispB。小分段:用ip route show table
检查,使用ping -I指定源测试。
4.
BGP对等(当ISP支持BGP时首选)
若ISP提供BGP,建议在边缘路由器配置BGP以获得可见性和更稳定的路由。FRR配置示例(简化):router bgp 65000; neighbor 203.0.113.254 remote-as 65100; network 203.0.114.0/24; 对于第二ISP同理。小分段:使用AS-Path、local-preference、社区(community)策略进行流量引导;与ISP确认MED与前缀过滤规则。
5.
VRRP/Keepalived实现虚拟IP高可用
若有两台边缘路由器或两台NAT设备,使用Keepalived实现VIP漂移。keepalived.conf简例:vrrp_instance VI_1 { state MASTER; interface eth0; virtual_router_id 51; priority 100; advert_int 1; virtual_ipaddress { 203.0.114.100 } }。小分段:优先级设定MASTER/BACKUP;脚本实现健康检查(notify脚本在失败时移除/添加路由)。
6.
入站流量与DNS策略
入站可选方案:1) BGP直接宣布前缀;2) DNS多A记录+TTL短;3) 使用第三方DNS负载均衡(健康检查+地域调度)。步骤:若无BGP,配置DNS A记录指向两ISP的不同公网IP,并将TTL设为30s;配合HTTP/HTTPS层的健康检查与会话保持。小分段:配合CDN或GSLB提高分发稳定性。
7.
NAT、防火墙与端口映射
在边缘设备上分别为两条线路做SNAT策略:iptables示例:iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.10;iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 198.51.100.10。小分段:在防火墙上同步端口转发规则,确保状态表超时与连接追踪策略一致。
8.
健康检查与自动切换
实现主动健康检查:1) 本地:使用keepalived或systemd脚本检测服务端口,失败时切换VIP或更新路由;2) 上游:对路由器做BFD或BGP监测。小分段:编写脚本(curl检测HTTP,nc检测TCP),配合cron或systemd-timer执行并在故障时调整ip rule或通知管理员。
9.
流量分配策略:ECMP与会话保持
出站可用ECMP(等成本多路径):在Linux用ip route和nexthop配置多路径路由:ip route add default scope global nexthop via 203.0.113.1 dev eth0 weight 1 nexthop via 198.51.100.1 dev eth1 weight 1。小分段:注意TCP会话粘性问题,必要时按源地址进行策略路由或使用L7负载均衡。
10.
监控、告警与测试流程
监控要点:链路上下线、BGP邻居状态、VIP漂移、丢包与RTT。推荐工具:Prometheus + node_exporter + blackbox_exporter;Grafana展示。测试流程:人工断线、关闭BGP邻居、禁用接口;记录切换时间与包丢失。小分段:制定SOP,包含回滚命令与联系方式。
11.
性能与安全最佳实践
优化:合理MTU设置,避免PMTU黑洞;开启TCP FastOpen与合理的TCP窗口。安全:在边缘做IPS/防DDoS,限制管理接口访问,仅允许备案的IP登录。小分段:对BGP使用最大前缀限制,启用RPKI或prefix-lists。
12.
运维手册与自动化
将配置模板(BGP、keepalived、iptables、ip rules)写成Ansible playbook或Terraform模板,保持版本控制与审计。小分段:每次变更做变更窗口与回滚计划,使用CI验证配置语法。
13.
问:在台湾部署双ISP,什么时候必须使用BGP而不是DNS切换?
答:当你需要对等路由、完整的可达性控制与更短的故障切换时间(毫秒到秒级)时应使用BGP;DNS切换适合没有BGP权限的小型部署,但存在TTL缓存导致的切换延迟。
14.
问:如何验证策略路由在故障时按预期工作?
答:通过分步测试:1)在服务器上使用ip rule show与ip route show table检查表项;2)用ping -I 和traceroute从服务器向外测试;3)模拟一条链路down(ifdown或断开WAN),观察路由表和连接是否切换,并检查外部可达性与会话恢复。
15.
问:有没有快速的回滚命令以恢复单线路配置?
答:是的,常用回滚步骤:1) 禁用策略路由:ip rule del ...(删除相应规则);2) 设置单一路由:ip route replace default via dev ;3) 如果使用BGP,禁用对应neighbor或撤销announce;4) 恢复防火墙/NAT到单线路映射并通知监控。
来源:台湾双isp服务器部署方案与多线路冗余的最佳实践