运行 BGP 的节点必须占用一个公网 IP 吗?

73 天前
 Licsber
最近在玩 dn42
刚通过自助方式完成第一个 peer 建立并成功 Established

p2p 类型的 wireguard
互联用的是各自 dn42 的“公网”地址
因此有点小疑问

想象一下现实中的网络
如果拥有公网地址 如 8.8.8.8
在和别人 peer 的时候
双方用/30 的私网来互联 比如本端 10.100.64.1 和对端 10.100.64.2
本端需要通告对端 8.8.8.8 的下一跳是 10.100.64.1
这样对端加进它的路由表 看起来运行良好
唯一我能想到的问题是对端和其他人 peer 时不知道怎么描述 8.8.8.8 到底是谁给自己的
但是如果对别人通告 8.8.8.8 的下一跳是自己 自己知道跳给谁 是不是也可以

难道我的边界路由器就必须也有一个公网 IP 吗
1429 次点击
所在节点   BGP
9 条回复
Int100
73 天前
可以用私网地址 peer
yyzh
73 天前
当然可以.这个难听点叫 BGP 劫持好听点叫路由泄露反正都那样.
baobao1270
73 天前
dn42 的习惯是用 link local 做 interface ip 吧?公网好像是要一个有效 ip 的
非广播网络可以用/31
Int100
73 天前
@yyzh

用私网地址 peer 和 BGP 劫持/路由泄露 有什么关系?
yyzh
72 天前
@Int100 认真看内容,别光看个标题就来回答
"唯一我能想到的问题是对端和其他人 peer 时不知道怎么描述 8.8.8.8 到底是谁给自己的
但是如果对别人通告 8.8.8.8 的下一跳是自己 自己知道跳给谁 是不是也可以"
Licsber
72 天前
@Int100 #1 公网中也会有人这么做吗 话说各 AS 运行 BGP 的设备地址在哪可以查到不

@yyzh #2 其实看了主要是 Next_Hop 属性

“BGP Speaker 在向 EBGP 对等体发布某条路由时,会把该路由信息的下一跳属性设置为本地与对端建立 BGP 邻居关系的接口地址。”

那传递给别人的时候 我理解就是必须要一个自己 AS 内的 IP 才行
然后如果是广播网络 就必须自己分走一个/30 给对方
如果不是 那也至少要一个/32

@baobao1270 #3 嗯 我在看 MP-BGP 用 IPv6 Link-Local 目前我还是建了两条
非广播网络用/31 但其实 p2p 下 随便用啥接口地址都可以

直到今天才发现正常 DNS 是不区分 IPv4 和 IPv6 的
用 v4 的 DNS 或 v6 的 DNS 查询都会返回 v4 和 v6 的结果
还以为 v4 的 DNS 只会返回 v4
leschans
70 天前
@Licsber 不一定,neighbor 和 local 不一定是同一个网段的 IP 地址 (multihop),然后至于建立 session 的时候要不要公网 IP 地址,这个一般取决于双方是怎么安排的。
Licsber
69 天前
@leschans #7 嗯 neighbor 确实不必同一网段 这个我理解了
甚至还可以不用 v4 可以仅 v6 单栈 用拓展下一跳来实现 v4 访问
172.31.0.0/16 via inet6 fe80::ade0 dev AS4242423914 proto bird src 172.22.122.122 metric 32

但是 session 如果不用公网地址 怎么 export 呢
leschans
65 天前
@Licsber 这个没有所谓的 你看看一些 traceroute 在公网上 其中的 hop 也有用私有地址的 其实只要那一台 router 能访问到那个地址就行 具体的话在 bird 里有一个 next hop self 的设置

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1101364

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX