1. 概述与方案目标
目标:在主链路故障时,自动切换到
香港VPS作外部出口并维持业务连通性。
适用场景:企业有两条或以上ADSL/宽带回程,且没有公网固定IP,需要通过香港VPS作为中继与备份出口。
关键组件:本地路由器/防火墙(支持多WAN或Linux/OpenWRT),香港VPS(公网IP),VPN(WireGuard/OpenVPN),动态DNS或反向隧道。
2. 准备工作与前置条件
(1)购买香港VPS:建议选择带固定公网IP、UDP/TCP端口开放的VPS(例如100Mbps带宽)。
(2)本地设备:一台能运行Linux的路由或支持OpenWRT/pfSense的硬件;三方ADSL/宽带账号及拨号信息。
(3)工具:ssh、scp、wg/wg-quick(WireGuard)或openvpn、pppd/pppoe软件、ddclient或acme-ddns。
3. 在香港VPS上部署WireGuard(示例)
(1)安装:Ubuntu上 sudo apt update && sudo apt install wireguard -y。
(2)生成密钥:wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key。
(3)配置 /etc/wireguard/wg0.conf 示例:
[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = (服务端私钥)
PostUp = sysctl -w net.ipv4.ip_forward=1; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
(4)启动:systemctl enable wg-quick@wg0 && systemctl start wg-quick@wg0。
4. 本地拨号客户端与WireGuard配置
(1)为每个ADSL口创建pppd/pppoe拨号脚本,例如 /etc/ppp/peers/adsl1,包含user、password、defaultroute可选项。拨号命令:pppd call adsl1 &。
(2)WireGuard客户端配置 /etc/wireguard/wg-client.conf:
[Interface]
Address = 10.200.200.10/32
PrivateKey = (本地私钥)
[Peer]
PublicKey = (服务端公钥)
Endpoint = VPS_PUBLIC_IP:51820(无需固定,本地发起连接即可)
AllowedIPs = 0.0.0.0/0, ::/0
(3)启动:wg-quick up wg-client。因本地为拨号上网,请在pppd成功后再起wg客户端,可在pppd的up script中调用 wg-quick up。
5. 路由与优先级设置(Linux示例)
(1)为每个拨号接口创建单独路由表:在 /etc/iproute2/rt_tables 添加 100 adsl1、101 adsl2、200 wg。
(2)拨号成功后运行脚本设置策略路由:
ip route add default via
dev ppp0 table adsl1
ip rule add from /32 table adsl1 priority 100
类似为adsl2设置。对于WireGuard备用:ip route add default via 10.200.200.1 dev wg0 table wg;ip rule add from table wg priority 200(或使用iptables mark配合ip rule)。
(3)刷新:ip route flush cache。
6. 健康检查与自动切换
(1)使用脚本定期ping检测主链路出口(如ISP DNS、公司外网关键IP)。示例脚本流程:每30s ping 8.8.8.8 三次,失败计数超过阈值->触发切换。
(2)切换实现:修改默认路由,或通过iptables mark结合ip rule切换到wg表。示例命令:ip route replace default via 10.200.200.1 dev wg0。
(3)恢复:当主链路回复ping后,恢复原默认路由并关闭不必要的wg连接以节省带宽(但保留心跳)。
7. 多线路负载与会话保持(可选)
(1)会话保持:对重要业务(VPN、VoIP)使用策略路由,将这些服务流量固定走主链路,避免频繁切换中断。使用 iptables -t mangle -j MARK --set-mark,并用ip rule按mark路由。
(2)负载分担:若需要带宽合并,可使用MPTCP或流量分流工具;若只需容灾,优先保证会话完整性。
8. 动态DNS与反向隧道(针对动态IP)
(1)动态DNS:在拨号成功脚本中调用 ddclient 或 curl 更新DNS记录,便于远端访问本地服务(若需)。
(2)反向隧道:若本地必须暴露服务且VPS为中转,可在本地通过ssh -R或在WireGuard上做端口转发,将外部请求透过VPS转到本地。
9. 安全与监控建议
(1)加密:优先使用WireGuard或OpenVPN,避免明文隧道;在VPS上限制允许的Peer公钥和端口。
(2)防火墙:在VPS和本地都配置iptables/nftables规则,只打开必要端口;设置登录告警。
(3)日志与告警:把关键事件(切换、拨号失败、隧道掉线)写入syslog并邮件/企业微信告警。
10. 部署与测试步骤清单(操作顺序)
(1)在VPS上搭建WireGuard并验证可连通。
(2)在本地设备编写拨号脚本并测试每条ADSL能拨通并上网。
(3)配置本地WireGuard客户端并在拨号后启动,确保能到达VPS并上网。
(4)实现路由表与策略路由,测试主/备切换(手动断开主链路)。
(5)加入健康检测脚本并启用自动切换,进行多次故障恢复演练。
11. 问:如果我的VPS被封或干扰,如何保证备援?
答:建议准备两台不同供应商、不同机房的VPS并配置双隧道;在检测到主VPS异常时脚本自动切换到次VPS,并通过动态DNS/健康检测验证通道可用。
12. 问:ADSL拨号IP频繁变化,会影响连接吗?
答:不会影响出站隧道,因为WireGuard/OpenVPN为客户端发起连接,允许本地IP变动。只需确保拨号后自动启动隧道并更新路由表。
13. 问:如何避免切换导致的业务中断(如数据库连接)?
答:对关键业务使用策略路由固定走主链路,或在应用层做重试和连接池;若必须无缝,考虑MPLS/专线或高级会话迁移方案,否则只能将中断窗口降到最小并做好重连策略。
来源:企业备份网络方案 香港拨号vps 动态 adsl 在多线路容灾中的应用