R1和R2是eBGP对等体,R2和R3是iBGP对等体。
R1广告网络192.168.1.0/24。 R2接收到此路由,但不将其发布给R3。
是否将从eBGP学到的路由发布给iBGP?
这里是输入的完整配置:
loop0(R1)s0/0 <--> s0/0(R2)s0/1 <--> s0/1(R3)
R1:
configure terminal
interface s0/0
ip address 172.16.1.1 255.255.255.252
no shutdown
interface loopback0
ip address 192.168.1.1 255.255.255.0
router bgp 1
neighbor 172.16.1.2 remote-as 2
network 192.168.1.0 mask 255.255.255.0
R2:
configure terminal
interface s0/0
ip address 172.16.1.2 255.255.255.252
no shutdown
interface s0/1
ip address 172.16.1.5 255.255.255.252
no shutdown
router bgp 2
neighbor 172.16.1.1 remote-as 1
neighbor 172.16.1.6 remote-as 2
R3:
configure terminal
interface s0/1
ip address 172.16.1.6 255.255.255.252
no shutdown
router bgp 2
neighbor 172.16.1.5 remote-as 2
#1 楼
假设您没有配置IGP(例如EIGRP / OSPF / ISIS / RIP),那么最简单的解释是,当iBGP更新到达R3时,R3没有到达192.168.1.0/24下一跳的路由。 />loop0(R1)s0/0 <-----------> s0/0(R2)s0/1 <-------------> s0/1(R3)
AS 1 AS 2 AS 2
---------> ----------->
Prefix: 192.168.1.0/24 Prefix: 192.168.1.0/24
AS-path: 1 AS-path: 1
Next-hop: 172.16.1.1 Next-hop: 172.16.1.1
*via eBGP* *via iBGP*
由于iBGP从R1接收更新时不会重置下一跳,因此必须能够访问192.168.1.0/24的下一跳(172.16.1.1) (有关更多详细信息,请参阅为什么路由器忽略BGP路径。)测试此问题的最基本方法是在R3上配置静态地址:
ip route 172.16.1.0 0.0.0.3 172.16.1.5 name BAD_HACK_FOR_IBGP
obviously这显然是错误的解决方案,但这是一个简单的测试,以说明发生问题的原因(请记住,在192.168.1.0/24的路由通过之前,您可能需要稍等片刻才能运行BGP下一跳扫描程序。已安装)。
有两种可能的解决方案,但在大多数网络中只有一种确实有意义...
最佳解决方案:配置一个IGP ...选择您喜欢的任何IGP,然后在整个AS 2中通告172.16.1.0/30 hat IGP
可选解决方案:配置R2和R3之间的对等会话以设置
next-hop-self
下一跳可达性是理解BGP时最基本的问题之一;几乎每个人都在尝试协议时遇到了这个问题。
#2 楼
您必须宣布R2上的连接接口。因为唯一的网络192.168.1.0现在不知道下一跳是什么。您可以在R3上使用“ show ip bgp”进行检查。
您可以在R3 bgp表中看到192.168.1.0,但未将其插入路由表。因为它不知道下一跳是什么
解决方案:
在R2上重新分配连接的接口
说是下一跳的EBGP邻居作为R1上的“邻居172.16.1.2 next-hop-self”。
评论
很好的解释。我没有意识到iBGP传递了未经修改的下一跳。
–user1038451
2014年1月8日14:41
迈克(Mike),您能否提供一个示例,说明您何时不想使用next-hop-self(除了已经有一个IGP通告eBGP对等体的下一跳地址之外)?我最初打算对此提出另一个问题,但认为这将是对您的答案的轻松补充。最近一直在研究BGP,而我一直在研究它,这使我好奇为何下一跳自我不是默认行为。
–艾迪
2014年12月29日下午16:40
我可以添加有关此信息,但是可能要花几天时间。简而言之:BGP下一跳的IGP开销是默认eBGP路径选择算法的一部分
–迈克·彭宁顿
2014年12月29日下午16:43