每個節點上的wireguard 配置都與此類似:
[Interface]
Address = 10.1.0.1/32
PrivateKey =
ListenPort = 5888
[Peer] # example public node [1-3]
PublicKey =
AllowedIPs = 10.1.0.2/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25
[Peer] # example node behind cgnat [4-6]
PublicKey =
AllowedIPs = 10.1.0.51/32
PersistentKeepalive = 25
這使我能夠 ping 通上圖中的所有綠線。但我無法 ping 通 CGNAT 中節點之間的任何紅色。我怎麼能夠?
試 1(無Node3
)
範例 CGNAT ( Node4
)
[Interface] # NODE 4
Address = 10.3.0.3/32
PrivateKey =
[Peer] # NODE 1, 5 & 6
PublicKey =
AllowedIPs = 10.3.0.1/32,10.3.0.51/32,10.3.0.52/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25
[Peer] # NODE 2
PublicKey =
AllowedIPs = 10.3.0.2/32
Endpoint = X.X.X.Y:5888
PersistentKeepalive = 25
公共端點範例 ( Node1
)
[Interface] # NODE 1
Address = 10.3.0.1/32
PrivateKey =
ListenPort = 5888
[Peer] # NODE 5
PublicKey =
AllowedIPs = 10.3.0.51/32
PersistentKeepalive = 25
[Peer] # NODE 6
PublicKey =
AllowedIPs = 10.3.0.52/32
PersistentKeepalive = 25
[Peer] # NODE 2
PublicKey =
AllowedIPs = 10.3.0.2/32
Endpoint = X.X.X.Y:5888
PersistentKeepalive = 25
[Peer] # NODE 4
PublicKey =
AllowedIPs = 10.3.0.3/32
PersistentKeepalive = 25
我也跑過Node1
:
$ sysctl -w net.ipv4.ip_forward=1
$ sysctl -w net.ipv4.conf.maxnet.forwarding=1
maxnet
我的工作小組名字在哪裡。
答案1
如果節點 4,5,6 各自落後於自己CGNAT,然後像往常一樣,他們無法在他們之間進行適當的溝通。它們必須依賴節點 1、2、3 來中繼流量。所以這些CGNAT節點將需要額外的允許的IP對於某些公共節點,在其設定中允許其他 CGNAT 節點通過公共節點,且公共節點必須設定為路由器。
假定節點 4 的 IP 位址為 10.1.0.51/32 並使用節點 2 作為路由節點的範例:
[Interface]
Address = 10.1.0.51/32
PrivateKey =
[Peer] # example public node 1
PublicKey =
AllowedIPs = 10.1.0.1/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25
[Peer] # example public node 2
PublicKey =
AllowedIPs = 10.1.0.2/32,10.1.0.52/32,10.1.0.53/32
Endpoint = Y.Y.Y.Y:5888
PersistentKeepalive = 25
[Peer] # example public node 3
PublicKey =
AllowedIPs = 10.1.0.3/32
Endpoint = Z.Z.Z.Z:5888
PersistentKeepalive = 25
其他 CGNAT 節點的 IP 位址預計將透過節點 2 進行路由,並應新增至該對等方的 IP 位址中允許的IP。這也應該自動將它們添加到路由表中。
節點 2 現在也必須是路由器,至少在其 WireGuard 介面上,該介面既是入口也是出口。在 Linux 上,這可以透過以下方式完成(假設有一個介面工作小組0):
sysctl -w net.ipv4.conf.wg0.forwarding=1
其防火牆規則也必須允許轉送流量工作小組0。
請注意,無需在 CGNAT 節點上定義其他 CGNAT 對等體,如果定義了它們一定不有其他CGNAT節點的IP位址允許的IP:
- 無法直接聯絡他們,
- 如果後續設定了相同的地址允許的IP它將從先前的每個定義中刪除,並且只有最後定義的對等點才會擁有它。和密鑰路由IP 位址 <=> 對等點。
節點 5 和 6 必須具有相容的設定(也使用節點 2 作為路由器)。你也可以想像有:
- 分割角色,其中 4 和 5 由節點 2 路由,4 和 6 由節點 3 路由,5 和 6 由節點 1 路由,
- 或是在不同的IP區塊內有多個IP位址,這樣每個區塊都可以透過不同的路由節點進行路由,
- 或在 WireGuard 流量中使用洋蔥路由和 WireGuard 流量,以便路由節點無法解碼不適合它們的流量,
- 或使用多個獨立的 WireGuard 介面(它們之間不受加密金鑰互動的影響,而僅受路由表的影響),
- 或之前選項的某種組合,
[...]
在所有情況下,對於任何拓撲更改,即使是由於故障而不是預期的更改,也需要一種在所有受影響的對等點中同步配置更改的方法,並且當前沒有專用工具可以執行此操作。
作為結論,這是一個博客,其中邊界網關協議(這將是缺少的工具)與 WireGuard 一起使用,具有多個地址,每個對等節點也有一個接口,只有該對等節點定義為迴避加密金鑰路由。可能可以從中學到一些東西,但這個主題對我來說太高級了。