4. 与多家运营商建立EBGP邻居
在多出口网络里,与多家运营商建立EBGP邻居是出口设计真正落地的一步。邻居能不能建起来,取决于三件事:TCP能否到达对端、对端是否接受你的源地址、双方在BGP参数上是否一致。本节围绕直连、环回口、多跳、认证、TTL安全以及邻居状态排错展开,重点讲清楚每种建邻方式的适用场景、配置要点和排错路径。
一、直连建邻:最直接,也最容易踩坑
直连建邻指两台设备通过同一网段互联,BGP报文不经过任何三层转发设备。这是最常见的方式,配置也最简单:
router bgp 65001
neighbor 203.0.113.2 remote-as 65002
neighbor 203.0.113.2 description To-ISP-A
neighbor 203.0.113.2 password Bgp@2024
neighbor 203.0.113.2 ttl-security hops 1
直连建邻的关键点在于:源地址必须是接口地址,且对端必须能回程到该地址。如果本端用物理接口地址发起,对端也配置了指向该地址的邻居,通常一次就能建立。但若本端接口地址被汇总或过滤,对端可能无法回程,导致邻居卡在 Active 或 Connect 状态。
直连场景下,TTL安全(GTSM)非常有用。设置 ttl-security hops 1 后,本端只接受TTL为255且经过0跳的报文,能有效防止伪造源地址的BGP攻击。注意:TTL安全要求双方都配置,否则一方发送的报文TTL为255,另一方未启用GTSM时仍可正常接收,但反向可能被丢弃。
二、环回口建邻:稳定性的首选
当物理链路有多条或存在备份路径时,用环回口建邻更稳定。环回口不会因为单条物理链路故障而消失,只要路由可达,BGP会话就能保持。配置时需指定更新源:
interface Loopback0
ip address 10.0.0.1 255.255.255.255
router bgp 65001
neighbor 10.0.0.2 remote-as 65002
neighbor 10.0.0.2 update-source Loopback0
neighbor 10.0.0.2 ebgp-multihop 2
环回口建邻必须配合 ebgp-multihop,因为默认EBGP报文的TTL为1,跨设备后会被丢弃。多跳值应等于实际经过的三层跳数,通常设为2即可覆盖大多数直连+备份场景。同时,双方必须通过IGP或静态路由知道对方环回口地址,否则TCP三次握手无法完成。
三、多跳与TTL安全:一对需要配合的参数
多跳和TTL安全是一对相互制约的参数。多跳放宽了TTL限制,TTL安全则收紧了可接受范围。实际部署中,如果使用环回口建邻,通常不启用TTL安全,或者将hops值设为实际跳数。例如经过两台路由器,hops设为3。若错误地设为1,报文会被丢弃,邻居无法建立。
下面这张图展示了直连、环回口多跳两种建邻方式的报文路径与TTL变化关系:
四、认证:MD5与TCP-AO
EBGP邻居默认不认证,任何能发起TCP 179连接的主机都可能尝试建邻。生产环境建议启用MD5认证:
neighbor 203.0.113.2 password Bgp@2024
MD5认证在TCP层对每个报文计算摘要,双方密码必须完全一致。如果密码不匹配,邻居会反复在 Connect 和 Active 之间切换,且日志中通常不会直接提示“密码错误”,需要抓包或查看TCP重置记录。部分厂商支持TCP-AO(TCP Authentication Option),比MD5更安全,但需要双方设备都支持。
五、邻居状态排错:从Idle到Established
BGP邻居状态机是排错的核心线索。常见状态及含义如下:
| 状态 | 含义 | 常见原因 |
|---|---|---|
| Idle | 未发起连接 | 无路由、邻居未配置、ACL阻断 |
| Connect | TCP连接中 | 对端未监听179、路由不可达 |
| Active | 尝试重连 | TCP被拒绝、源地址错误、密码错误 |
| OpenSent | 已发Open | 等待对端Open,AS号不匹配 |
| OpenConfirm | 收到Open | 等待Keepalive,能力协商中 |
| Established | 会话建立 | 正常,可交换路由 |
排错时按顺序检查:先看路由(能否ping通对端源地址)、再看TCP(telnet 179是否通)、再看BGP配置(AS号、密码、更新源、多跳值)、最后看策略(ACL、TTL安全、前缀过滤)。如果邻居卡在 Active,优先怀疑源地址或密码;卡在 OpenSent,优先怀疑AS号或版本能力。
debug bgp neighbor 或 debug ip bgp 观察状态迁移,但生产环境慎用debug,建议先用 show bgp neighbor 查看详细状态和最后错误码。
六、多运营商场景的建邻策略
与多家运营商建邻时,建议统一采用环回口建邻,便于后续增加物理链路而不影响BGP会话。每家运营商使用独立的环回口或子接口,并配置独立的认证密码。TTL安全根据实际跳数设置,通常ISP侧会要求直连建邻并启用GTSM。若运营商不支持环回口建邻,则退化为直连建邻,但需在接口上做好ACL,仅允许对端地址访问179端口。
最后,建议为每个EBGP邻居配置描述和最大前缀数限制,防止对端误通告大量路由导致本地资源耗尽:
neighbor 203.0.113.2 maximum-prefix 5000 80 restart 30
neighbor 203.0.113.2 description To-ISP-A-Primary
邻居建立只是第一步,后续还需要通过路由策略控制收发路由。但只有邻居稳定,一切策略才有意义。