Сейчас моя сетка настроена так:
С аналогичной конфигурацией 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
Это позволяет мне пропинговать все зеленые линии на графике выше. Но я не могу пинговать ни один из красных цветов между узлами в CGNAT. Как я могу?
Если каждый из узлов 4,5,6 находится за своим собственным CGNAT, то, как обычно, они не могут обеспечить правильную связь между собой. Им приходится полагаться на узлы 1,2,3 для ретрансляции трафика.Таким образом, этим узлам CGNAT потребуются дополнительные AllowedIPs для некоторых общедоступных узлов в их настройках, чтобы разрешить другим узлам 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
Ожидается, что IP-адреса других узлов CGNAT будут маршрутизироваться через узел 2 и должны быть добавлены к этому узлу Разрешенные IP-адреса. Это также должно автоматически добавить их в таблицу маршрутизации.
Узел 2 теперь также должен быть маршрутизатором, по крайней мере, на его интерфейсе WireGuard, который будет одновременно входным и выходным. В Linux это можно сделать, например, с помощью (при условии, что интерфейс wg0):
sysctl -w net.ipv4.conf.wg0.forwarding=1
Правила его брандмауэра также должны разрешать переадресацию трафика на wg0.
Обратите внимание, что нет необходимости определять другие одноранговые узлы CGNAT на узлах CGNAT, и если они определены, они не должны иметь IP-адреса других узлов CGNAT в AllowedIPs:
Узлы 5 и 6 должны иметь совместимую конфигурацию (также использовать узел 2 в качестве маршрутизатора).Вместо этого вы также можете представить:
[...]
Во всех случаях для любого изменения топологии, даже если оно вызвано сбоем, а не намеренным изменением, необходим способ синхронизации изменений конфигурации во всех затронутых одноранговых узлах, и в настоящее время нет специального инструмента для сделай это.
В заключение, вот блог, в котором BGP (этот инструмент был бы отсутствующим) используется вместе с WireGuard, с несколькими адресами, а также с одним интерфейсом на одноранговый узел, и только этот одноранговый узел определен для обхода маршрутизации криптоключа. . Вероятно, из этого можно чему-то научиться, но тема слишком сложна для меня.