上一篇 下一篇 分享链接 返回 返回顶部

如何在香港服务器上跑Windows Server,做多WAN + BGP多线接入,稳住跨境访问

发布人:Minchunlin 发布时间:2025-08-28 10:50 阅读量:948


周五夜里,我在值班室被同事一通电话叫醒:“大陆用户今晚一卡一卡的,广东到香港抖成筛子,平均 RTT 飙到 200ms+。”我背上工具包进了机房,三根光纤从不同运营商的 ODF 口进来,在机柜顶端汇聚到我们的两台边界盒子。应用跑在 Windows Server 上,边界要做多 WAN+BGP,多线就绪,但流量分布不稳、回程路径发散。那晚我做了两件事:

  1. 把多 WAN 物理与逻辑路径重新梳理;
  2. 让BGP 说人话——有策略、有度量,知道给谁让路、让几步。

第二天清晨 6 点,烟雾测试、拨测、流监都回到顺滑曲线,工单才算真正关单。

文章适用读者与目标

适用对象:需要在香港机房用 Windows Server 承载业务的运维/网络/架构人员;需要多 ISP 出口、跨境访问优化的人。

目标:

  • 拿到一份可落地的多 WAN + BGP 实操流程;
  • 既能在有自有 ASN+/24 的正规多宿场景跑通,也能在没有自有资源时用 “BGP 隧道/中转” 方案快速上线;
  • 给出参数、配置片段、测试与回滚方法;
  • 列出坑与解决路径。

1. 拓扑与硬件清单(真实可复刻)

1.1 目标拓扑

拓扑:
              ┌────────────────────┐
 ISP-A  ───────┤  Edge-Router-1    ├─────(LAN)─────┐
 (eBGP)         │  (VyOS/CCR)       │               │
               └────────────────────┘               │
               ┌────────────────────┐               │
 ISP-B  ───────┤  Edge-Router-2    ├─────(LAN)─────┤── Windows Server Farm
 (eBGP)         │  (VyOS/CCR)       │               │   (IIS/.NET/SQL/…
               └────────────────────┘               │
               ┌────────────────────┐               │
 ISP-C  ───────┤  Edge-Router-1/2  ├─────(LAN)─────┘
 (eBGP)         │  (第三口/子接口)  │
               └────────────────────┘

                ↑                             ↑
             VRRP/MC-LAG冗余               East-West
             eBGP多宿                        Traffic

原则:BGP 建议跑在专用边界路由器(物理/虚拟皆可),Windows Server 专注业务。Windows 自身也能跑 RRAS+BGP,但工程上不推荐承载互联网边界(可当过渡/实验)。

1.2 硬件与链路表

角色 型号/规格 关键参数 备注
边界路由器 x86 1U(Intel i5/i7 或 Xeon D)/MikroTik CCR2004 4-8C / 16-32GB RAM / NVMe 128GB / 4×10GbE VyOS 1.4 LTSRouterOS v7
TOR 交换机 10G L2/L3(支持 LACP、VLAN、VRRP 或 MLAG) 2×10G 上联,24×10G 下联 建议双机 MLAG
Windows 服务器 2×Intel NIC 10G、NVMe SSD Windows Server 2019/2022 Datacenter 业务与日志分盘
ISP-A/B/C 港区不同运营商 GPON/以太专线/交割 1G/2G/10G 提供 eBGP Peering
时钟/监控 NTP、Smokeping、NetFlow/sFlow RTT/Loss/抖动/路径 用于回路验证

接口命名示例:

  • Edge-R1:eth0→ISP-A、eth1→LAN、eth2→ISP-C
  • Edge-R2:eth0→ISP-B、eth1→LAN、eth2→ISP-C 备

2. 前置条件:你有没有 ASN 和 /24?

有自有 ASN + /24(APNIC/代理):首选。你可以把同一前缀用 BGP 对外多宿宣告,做入站工程(AS-PATH Prepend、ISP 社区/Community、MED)。

没有自有资源:两条常见路:

  • BGP 隧道/代播:和中转商建立 GRE/WireGuard 隧道,由对方宣告你的业务前缀(或借用其前缀)并回注到你;你对外仍可多线出站、对内统一入口。
  • SD-WAN/策略路由:不涉及 BGP,对入站工程有限,只能做出站选择与健康探测。
  • 本文主线走“自有 ASN+/24”,并附带“BGP 隧道”作为可落地替代。

3. 物理与基础网络落地

3.1 端口与 MTU

ISP 口:建议 MTU 1500(若走隧道,隧道口 MTU 1476/1460,并MSS Clamping 1436/1420)。

LAN 口:10G,MTU 1500(东西向可 9000,但注意 Windows 端 NIC/交换机一致)。

3.2 Windows 网卡基础

# 统一驱动/固件,固定速率与双工
Get-NetAdapter | Format-Table Name, Status, LinkSpeed

# 禁用可能引发跨境乱序的硬件合并
Disable-NetAdapterRsc -Name "Ethernet*"
Disable-NetAdapterLso -Name "Ethernet*"

# TCP 全局
netsh interface tcp show global
netsh interface tcp set global autotuninglevel=normal ecncapability=disabled rss=enabled rsc=disabled

# MTU(示例)
netsh interface ipv4 set subinterface "Ethernet0" mtu=1500 store=persistent

坑 1:某些 NIC 的 RSC/LSO 在高延迟+抖动链路下会放大重传,跨境访问时建议关闭做 A/B。

4. 在边界路由器上启用 BGP(推荐 VyOS)

我选择 VyOS 1.4 LTS(滚动配置直观、开源、稳定)。MikroTik CCR 也可,语法略有差异。

4.1 基础系统与接口

# 系统与接口
set system host-name 'hk-edge-1'
set interfaces ethernet eth0 description 'to-ISP-A'
set interfaces ethernet eth0 address '203.0.113.2/30'     # 对端 ISP-A: 203.0.113.1
set interfaces ethernet eth2 description 'to-ISP-C'
set interfaces ethernet eth2 address '198.51.100.2/30'    # 对端 ISP-C: 198.51.100.1
set interfaces ethernet eth1 description 'to-LAN'
set interfaces ethernet eth1 address '10.10.10.1/24'

# VRRP (与 Edge-2 组对,提高网关可靠性)
set high-availability vrrp group G1 interface 'eth1'
set high-availability vrrp group G1 virtual-address '10.10.10.254/24'
set high-availability vrrp group G1 priority '110'

4.2 BGP 主体与 Peers

# 本地 ASN
set protocols bgp 65010 parameters router-id '203.0.113.10'
set protocols bgp 65010 parameters graceful-restart
set protocols bgp 65010 address-family ipv4-unicast maximum-paths ebgp 2

# 我方播报的前缀(自有 /24)
set protocols bgp 65010 network '203.0.113.0/24'

# 邻居 ISP-A
set protocols bgp 65010 neighbor 203.0.113.1 remote-as '64512'
set protocols bgp 65010 neighbor 203.0.113.1 timers holdtime '12'
set protocols bgp 65010 neighbor 203.0.113.1 timers keepalive '4'
set protocols bgp 65010 neighbor 203.0.113.1 ebgp-multihop '2'
set protocols bgp 65010 neighbor 203.0.113.1 update-source '203.0.113.2'

# 邻居 ISP-C
set protocols bgp 65010 neighbor 198.51.100.1 remote-as '64513'
set protocols bgp 65010 neighbor 198.51.100.1 timers holdtime '12'
set protocols bgp 65010 neighbor 198.51.100.1 timers keepalive '4'
set protocols bgp 65010 neighbor 198.51.100.1 ebgp-multihop '2'
set protocols bgp 65010 neighbor 198.51.100.1 update-source '198.51.100.2'

4.3 入站/出站工程(本地优选与回程收敛)

出站(我们选哪条出去):用 local-preference(仅本 AS 有效)

入站(外界如何选进来):用 AS-PATH Prepend、MED 或 ISP 社区(取决于对端支持)

# 定义前缀列表(必要时做更细粒度)
set policy prefix-list MY-PFX rule 10 action 'permit'
set policy prefix-list MY-PFX rule 10 prefix '203.0.113.0/24'

# 对 ISP-A:出站默认更偏好(本地优先级高)
set policy route-map OUT-TO-ISPA rule 10 action 'permit'
set policy route-map OUT-TO-ISPA rule 10 match ip address prefix-list 'MY-PFX'
set policy route-map OUT-TO-ISPA rule 10 set local-preference '200'
set protocols bgp 65010 neighbor 203.0.113.1 route-map 'OUT-TO-ISPA' out

# 对 ISP-C:对某些地域(例如海外)不做 prepend;对大陆入口适当 prepend 3 次
set policy prefix-list CN-ENTRY rule 10 action 'permit'
set policy prefix-list CN-ENTRY rule 10 prefix '203.0.113.0/24'

set policy route-map OUT-TO-ISPC rule 10 action 'permit'
set policy route-map OUT-TO-ISPC rule 10 match ip address prefix-list 'CN-ENTRY'
set policy route-map OUT-TO-ISPC rule 10 set as-path-prepend '65010 65010 65010'
set protocols bgp 65010 neighbor 198.51.100.1 route-map 'OUT-TO-ISPC' out

# 入站过滤:只收对方的默认/必要前缀,避免全表
set policy route-map IN-FILTER rule 10 action 'permit'
set policy route-map IN-FILTER rule 10 match ip address prefix-list 'DEFAULT-ONLY'
set policy prefix-list DEFAULT-ONLY rule 10 action 'permit'
set policy prefix-list DEFAULT-ONLY rule 10 prefix '0.0.0.0/0'
set protocols bgp 65010 neighbor 203.0.113.1 route-map 'IN-FILTER' in
set protocols bgp 65010 neighbor 198.51.100.1 route-map 'IN-FILTER' in

提示:如果 ISP 提供 Community 手册,通常能更优雅地影响其上游(例如“提高优先级”“不向特定区域传播”),优先使用 社区 而不是盲目 prepend。

4.4 健康检测与快速收敛

# BFD 快速检测
set protocols bgp 65010 neighbor 203.0.113.1 bfd
set protocols bgp 65010 neighbor 198.51.100.1 bfd

# 静态缺省(作为临时/回退)
set protocols static route 0.0.0.0/0 next-hop 203.0.113.1 distance '250'
set protocols static route 0.0.0.0/0 next-hop 198.51.100.1 distance '251'

5. Windows Server 侧的网络与网关

Windows 服务器不直接跑 BGP,只需把缺省网关指向 VRRP 虚 IP(例如 10.10.10.254)。

New-NetIPAddress -InterfaceAlias "Ethernet0" -IPAddress 10.10.10.10 -PrefixLength 24 -DefaultGateway 10.10.10.254
Set-DnsClientServerAddress -InterfaceAlias "Ethernet0" -ServerAddresses 10.10.10.2,10.10.10.3

坑 2:如果一台服务器有多块上行(多网关),Windows 的“死网关检测”并不总是可靠,容易走错路。生产里只保留一个网关,把智能切换交给边界路由器。

6. 没有 ASN+/24?用 BGP 隧道落地

当你没有自有前缀时,和“中转/代播”服务商拉一条 GRE/WireGuard 隧道最省事:

对端在多个 ISP 宣告其前缀(或为你代播一个 /24),把回程通过隧道打回你;

你这边出站照样多 WAN(策略路由/ECMP),入站统一从隧道来。

VyOS 侧示例(WireGuard):

set interfaces wireguard wg0 address '172.16.0.2/30'
set interfaces wireguard wg0 peer transit1 public-key 'xxx='
set interfaces wireguard wg0 peer transit1 endpoint 'x.x.x.x:51820'
set interfaces wireguard wg0 peer transit1 allowed-ips '0.0.0.0/0'
set protocols static route 0.0.0.0/0 next-hop 172.16.0.1 distance '5'     # 入站/默认走隧道
# 出站仍可根据策略分流到 ISP-A/B/C

MSS Clamping(很关键):

set policy route pbr TCP-MSS rule 10 protocol 'tcp'
set policy route pbr TCP-MSS rule 10 tcp flags 'syn'
set policy route pbr TCP-MSS rule 10 tcp mss 'set 1436'
set interfaces wireguard wg0 policy route 'TCP-MSS'

7. 跨境优化的“几板斧”

路径工程:

  • 出站用 local-pref 或基于目的前缀的策略(国内方向优先某 ISP)。
  • 入站优先用 Community(如果 ISP 支持),其次是 AS-PATH Prepend。

传输层:

  • Windows 上关闭 RSC/LSO,保留 RSS;
  • autotuninglevel=normal,ECN 视对端启用情况;
  • 正确的 MSS Clamping(尤其隧道链路)。

DNS 策略:

  • 用 GeoDNS/EDNS ECS,让大陆解析到更友好的入口;
  • TTL 不要过大,便于快切。

观测:

  • Smokeping(HK→华南/华东/华北)、拨测节点;
  • NetFlow/sFlow 看不对称与热点;
  • BGP 会话与路由变化告警(BFD flap、Prefix Count)。

8. 验证与数据(真实格式示例)

8.1 拨测结果(优化前后)

目的地 方案 平均 RTT Jitter 丢包 备注
深圳移动 优化前 168ms 22ms 1.8% 路径漂移
深圳移动 优化后 62ms 4ms 0.2% 入站社区 + 出站优选
上海联通 优化前 190ms 30ms 2.1% -
上海联通 优化后 78ms 6ms 0.4% Prepend 到不优链
北京电信 优化前 210ms 28ms 2.5% -
北京电信 优化后 95ms 8ms 0.6% BFD 快切生效

8.2 会话与前缀健康

eBGP 会话 2/2 Established(A、C)
收前缀 1(默认)
播前缀 1(/24)
BFD Up(Detect 300ms)
VRRP Master on Edge-1(优先级 110)

9. 常见坑与“现场解法”

异步路由引发会话 Reset

现象:大陆方向入口走 ISP-A,回程误走 ISP-C,引发 QoS/丢包。

解法:用 Community 限制某入口的传播或对不优链 Prepend,确保“来回一致”。

MTU 黑洞

现象:大包卡死,小包正常。

解法:MSS Clamping 到 1436/1420(取决于隧道),端到端统一 MTU。

RRAS/BGP 在 Windows 上实战不稳

现象:测试可用,上生产扛不住边界复杂度。

解法:BGP 固化到边界路由器,Windows 只做业务与 East-West。

硬件卸载导致乱序/延迟抖动

现象:跨境 TCP Retrans 增多。

解法:关闭 RSC/LSO,保留 RSS;观察 netsh tcp 统计项。

ISP 只给静态路由/不愿 eBGP

现象:谈不拢 BGP。

解法:签补充协议或走 BGP 隧道/中转 暂替;同时给对方做健康检测承诺(BFD/探测)。

路由抖动(Flap)触发对端抑制

现象:频繁切换触发 Flap-Damping。

解法:稳住健康检测阈值,避免“抖一下就切”;出站策略尽量确定性。

IRR/ROA 不齐

现象:前缀被过滤。

解法:在相应 IRR 建好 Route-Object,完整 RPKI/ROA(若有)。

10. 进阶:把 BGP 与业务“黏”起来

按业务分前缀/Anycast:热点业务切出独立 /24,便于独立工程。

灰度切换:把 GeoDNS 权重与 BGP 策略联动,先 10% 观察,再放量。

可观测栈:

  • BGP:ExaBGP + Prometheus Exporter;
  • 链路:Smokeping/LibreNMS;
  • 业务:APM(入口 RTT/错误率)。

11. 附:Windows RRAS+BGP(实验/过渡用)

谨慎使用:生产边界不建议;但很多人会问“能不能在 Windows 上直接跑 BGP?”。可以,做法如下(以 2019/2022 为例):

# 安装 RRAS / Routing
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-WindowsFeature Routing

# 初始化(GUI 可选:打开“路由和远程访问”,配置仅路由)
# BGP 相关 PowerShell(命令以版本为准,以下为常用形态)
Add-BgpRouter -LocalASN 65010 -RouterId 203.0.113.10
Add-BgpPeer -Name "ISP-A" -LocalASN 65010 -PeerASN 64512 -PeerIPAddress 203.0.113.1 -LocalIPAddress 203.0.113.2 -PeeringMode IPv4 -HoldTime 12 -KeepAliveTime 4
Add-BgpPeer -Name "ISP-C" -LocalASN 65010 -PeerASN 64513 -PeerIPAddress 198.51.100.1 -LocalIPAddress 198.51.100.2 -PeeringMode IPv4 -HoldTime 12 -KeepAliveTime 4

# 公告前缀(把服务前缀引入 BGP)
#(不同版本可能为 Add-BgpCustomRoute / Add-BgpRoute 等,建议 Get-Command -Module RemoteAccess/Routing 查准)
# 示例:
# Add-BgpCustomRoute -Network 203.0.113.0/24

# 查看状态
Get-BgpPeer
Get-BgpRoute -All

强提醒:RRAS BGP 的路由策略、社区、过滤在 GUI/PowerShell 的灵活度和观测性都不如专业边界设备。生产建议迁出到边界路由器。

12. 变更/回滚与 SOP

变更窗口:跨境高峰外(凌晨 1–3 点),灰度(先单 ISP)→ 全量。

三步验证:

BGP 会话 Established,前缀数/默认路由正确;

Smokeping 拨测三地(华南/华东/华北)稳定;

业务 APM:错误率/时延无异常。

回滚:

移除新 Route-Map/Prepend,恢复原策略;

关闭新建 eBGP Peer;

静态缺省恢复到旧链路(distance 更低)。

13. 成本与收益评估(样例)

项目 一次性 月租/运维 备注
边界路由器(x86×2) 2×¥10,000 - 可虚拟化节省
ISP-A/B/C 专线 - ¥X,XXX–¥XX,XXX 视带宽/运营商
机柜/交叉(X-Connect) ¥1,000–¥3,000 ¥500–¥1,000 机房定价差异
观测/拨测 - ¥200–¥1,000 自建基本免费
收益 - - 跨境 RTT/Jitter 降低 40–60%,峰值错误率下降 50%+

14. “收官”的那个清晨

早上 5 点 40,VRRP 主备在 HSRP 旁一排绿灯,Smokeping 的绿条拉回了久违的平直。我们把针对华东的 Prepend 收了一格,华南入口固定在 A 链路。站在机柜前,我把工单里的“临时策略”打了删除线,留下一份可复用的 SOP。
运维的浪漫不过是:让每一次波峰起落,都在我们的预期之内。

15. 速查清单(Checklist)

  •  物理与 MTU/MSS 一致
  •  BGP 会话稳(BFD/GR 开启)
  •  入站:社区/Prepend 策略生效
  •  出站:Local-Pref/策略路由合理
  •  Windows:RSC/LSO 关闭,RSS/Autotune 正常
  •  DNS:ECS/Geo 策略与路由一致
  •  观测:RTT/Jitter/丢包 + BGP 事件告警
  •  回滚路径清晰可操作

这篇不是“某某黑科技”的神话,只有边界清晰、参数可追溯、策略能复盘的老老实实工程。把 多 WAN + BGP 收拾利索,Windows Server 就能安心做业务,跨境访问也会回到它该有的样子——稳定、可预期、能被度量。如果你也正卡在香港机房的那口风里,不妨照着这份手册走一遍;等到烟雾测试的曲线变直,你会知道,折腾是值得的。

目录结构
全文