ebgp-multihop 和next-hop-self实践(修订4)(22/2/26)

本文详细讲解了如何在不同AS的边界路由器R1、R2和内部路由器R3之间配置EBGP和IBGP,包括设置ebgp-multihop、next-hop-self策略,确保路由学习和正确下一跳指向。涉及静态路由、BGP邻居配置和跨AS路由传递优化。

上述命令出现的EBGP邻居(ebgp-multihop)和IBGP邻居(next-hop-self)中。如下图

一、基础认识EBGP和IBGP

R1--R2属于不同AS号,是外部边界网关EBGP;

R2--R3属于同意AS号,是内网边界网关IBGP;

二、基本配置

1.配置R1,R2,R3的直连,保证直连连通性(略)

2.只在R2和R3之间部署OSPF,保证OSPF区域连通性(略)

3.部署BGP

(1)在R1和R2部署BGP基于环回口(基于环回口意义是:若远程拉多条线,再用直连地址就显得麻烦。)

(a)R1,R2部署静态路由

R1:        ip route 2.2.2.2 255.255.255.255 Serial0/0

R2:        ip route 1.1.1.1 255.255.255.255 Serial0/0

(b)R1,R2基于静态路由建立BGP邻居

R1:

router bgp 100

 no synchronization

 bgp router-id 1.1.1.1

neighbor 2.2.2.2 remote-as 230

 neighbor 2.2.2.2 update-source Loopback1

network 1.1.1.1 mask 255.255.255.255

 no auto-summary

R2:

router bgp 230

 no synchronization

 bgp router-id 2.2.2.2

 neighbor 1.1.1.1 remote-as 100

 neighbor 1.1.1.1 update-source Loopback1

network 2.2.2.2 mask 255.255.255.25

 no auto-summary

(c)R1,R2部署多跳

使用sh ip bgp summary查看该1.1.1.1,2.2.2.2 的bgp路由状态是Idle—初始化,因为EBGP是跨不同的AS号,头部的包的TTL值默认是1(防止信息泄露的内网),需要把信息送到内网,就需要更改TTL值,比如:传到R3的就需要2跳,故TTL=2,(更改多跳的命令就是该neighbor 对方地址 ebgp-multihop 2)

R1:

Route bgp 100

neighbor 2.2.2.2 ebgp-multihop 2

R2:

Route bgp 230

neighbor 1.1.1.1 ebgp-multihop 2

上述2图的状态值为0,属于正常状态,表示没有学到2.2.2.2的路由。

在R1,R2通告1.1.1.1,2.2.2.2

R1:

network 1.1.1.1 mask 255.255.255.255

R2:

network 2.2.2.2 mask 255.255.255.255

上述2图的状态值,变成1,说明都学到对方的路由信息,只有1条。

可在R1,R2上,sh ip route bgp,一条也没有,是因为R1和R2使用的环回口建立的邻居,使用的静态路由,所以使用sh ip route bgp什么也没有。

在sh ip route static,就可以看见

4.在R2,R3部署BGP,使R3学到路由信息

R2:

neighbor 3.3.3.3 remote-as 230

 neighbor 3.3.3.3 update-source Loopback1

R3:

router bgp 230

 no synchronization

 bgp router-id 3.3.3.3

 network 3.3.3.3 mask 255.255.255.255

 neighbor 2.2.2.2 remote-as 230

 neighbor 2.2.2.2 update-source Loopback1

  no auto-summar

若不指定下一条,就会出现,R3学不到R1的路由,并R1 ping不通R3的3.3.3.3

指定后

R2:

router bgp 230

neighbor 3.3.3.3 next-hop-self

指定后R3学到R1的路由

 

验证:R1 ping 3.3.3.3 source 1.1.1.1

 

注意:next-hop

1.R1,R2,R3是同一AS;

R2学到的1.1.1.1 的下一跳是12.1.1.1

R3学到的1.1.1.1 的下一跳是23.1.1.1

2.R1与R2--R3属于不同AS;

R2学1.1.1.1的下一跳是12.1.1.1,

R3学1.1.1.1的下一跳也是12.1.1.1--因为R2,R3同一AS,所以需要在R2上:

方法一:(推荐)

R2:

neighbor 3.3.3.3 remote-as 230
neighbor 3.3.3.3 update-source Loopback1

neighbor 3.3.3.3 next-hop-self  //从R3学到的路由,下一跳是3.3.3.3

R3:

neighbor 2.2.2.2 remote-as 230
neighbor 2.2.2.2 update-source Loopback1

neighbor 2.2.2.2 next-hop-self  /

方法二:

R2:

neighbor 23.1.1.3 remote-as 230
neighbor 23.1.1.3 next-hop-self //从R3学到的路由,下一跳是23.1.1.3

R3:

neighbor 23.1.1.2 remote-as 230
neighbor 23.1.1.2 next-hop-self //从R2学到的路由,下一跳是23.1.1.2

3.一般在 AS边界路由器(R2) 对 内部其它路由(R3)指明“下一跳”为自己,可以将访问外部AS流量交给ASBR(自治系统边界路由)

注:菜鸟心得,若有误,感谢指出。

<think>我们正在讨论的是BGP中的`ebgp-multihop`命令。根据用户提供的引用内容,我们可以总结出以下关键点: 1. **问题背景**:当使用环回口建立EBGP邻居时,邻居状态为Idle,原因在于EBGP默认TTL=1,而环回口通常不是直连接口(需要多跳)。 2. **解决方案**:使用`ebgp-multihop`命令调整TTL值,使得非直连的EBGP邻居能够建立会话。 3. **命令作用**:修改EBGP会话的TTL值,以允许非直连的EBGP邻居建立会话(默认TTL=1,即只能直连)。 4. **配置方法**:在BGP配置模式下,使用`neighbor <ip-address> ebgp-multihop <ttl>`,其中`<ttl>`是一个介于1到255之间的整数。如果不指定`<ttl>`,则默认设置为255。 5. **相关命令**:`update-source`命令(指定建立邻居的源接口,通常为环回口)往往与`ebgp-multihop`一起使用。 此外,引用中还提到了`next-hop-self`命令,但用户的问题主要集中在`ebgp-multihop`上,因此我们重点介绍它。 下面我们根据这些信息,详细回答用户的问题。 </think>### `ebgp-multihop` 命令详解 #### 一、**核心作用与原理** 1. **解决 EBGP 邻居建立问题** - EBGP 默认 TTL=1,只允许**直连邻居**建立会话[^1]。 -EBGP 邻居**非直连**时(如通过环回口建邻居),需修改 TTL: $$ \text{TTL} \geq \text{实际跳数} $$ 通过 `ebgp-multihop <ttl>` 覆盖默认值[^3]。 2. **防环机制** - 限制 EBGP 会话只能在 AS 边界建立,防止路由意外泄露到其他 AS[^1]。 ```mermaid graph LR A[AS 100] -- 直连 EBGP TTL=1 --> B[AS 200] A -- 非直连 EBGP --> C[环回口] -->|TTL=1 丢弃| B A -- ebgp-multihop 2 --> C -->|TTL=2 通过| B ``` --- #### 二、**典型应用场景** | **场景** | **配置示例** | **必要性说明** | |---------------------------|---------------------------------------------|-----------------------------------| | **环回口建邻居** | `neighbor 10.10.10.10 ebgp-multihop 2` | 环回口非直连,需 TTL>1[^1] | | **多路径冗余** | `neighbor 192.0.2.1 ebgp-multihop 255` | 通过多条路径连接同一邻居 | | **跨设备集群** | `neighbor 203.0.113.5 ebgp-multihop 3` | 邻居位于不同机架 | --- #### 三、**配置方法与注意事项** 1. **基础配置步骤** ```bash router bgp 100 neighbor 10.10.10.10 remote-as 200 # 声明 EBGP 邻居 neighbor 10.10.10.10 update-source lo0 # 指定源接口(环回口) neighbor 10.10.10.10 ebgp-multihop 2 # 设置 TTL=2(需≥实际跳数) ``` 2. **关键参数解析** - **`<ttl>` 取值规则**: - 默认不指定时:TTL=255 - 最小有效值:1(但此时等同于直连) - 最大值:255 - **建议**:设置为路径实际跳数+1(容错) 3. **验证命令** ```bash show bgp neighbors 10.10.10.10 | include "Multihop" # 输出示例:External BGP neighbor may be up to 2 hops away ``` 4. **常见错误** - **状态持续 Idle**: - 未配置 `update-source`(源地址不匹配) - TTL 值小于实际路径跳数[^3] - **会话震荡**: - 物理路径跳数 > 配置的 TTL 值 --- #### 四、**与相关命令的协同** 1. **`update-source`(必配)** - 当使用环回口时,**必须同时配置**: ```bash neighbor 10.10.10.10 update-source Loopback0 ``` 2. **`next-hop-self`(可选)** - 解决 IBGP 下一跳不可达问题,与 `ebgp-multihop` 无直接关联[^2]。 - **典型场景**: ```mermaid graph LR EBGP[AS 100 - EBGP] -- 通告路由 --> IBGP[AS 200 - IBGP] IBGP -- next-hop-self --> 内部路由器 ``` --- ### 相关问题 1. 如何精确计算 EBGP 路径的实际跳数以确定 TTL 值? 2. `ebgp-multihop` 与 `ttl-security` 命令有何区别与冲突? 3. 在多厂商环境中配置 `ebgp-multihop` 需要注意哪些兼容性问题? 4. 为什么某些场景下明明配置了 `ebgp-multihop` 但 BGP 会话仍无法建立? [^1]: EBGP使用环回口建邻居需配置 `ebgp-multihop` `update-source` [^2]: `next-hop-self` 用于解决 IBGP 下一跳可达性问题 [^3]: TTL 值必须 ≥ 实际路径跳数,否则邻居状态保持 Idle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值