모든 노드에서 이와 유사한 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할 수 있습니다. 하지만 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
내 wg 이름은 어디에 있습니까?
답변1
노드 4,5,6이 각각 자신의 뒤에 있는 경우CGNAT, 그러면 평소와 같이 그들 사이에 적절한 의사소통이 이루어질 수 없습니다. 트래픽을 중계하려면 노드 1,2,3에 의존해야 합니다. 따라서 이러한 CGNAT 노드에는 추가 비용이 필요합니다.허용된 IP설정에서 일부 공개 피어의 경우 공개 노드를 통해 다른 CGNAT 노드를 허용해야 하며 공개 노드는 라우터로 설정되어야 합니다.
IP 주소가 10.1.0.51/32이고 노드 2를 라우팅 노드로 사용하는 것으로 가정되는 노드 4의 예:
[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에서는 예를 들어 다음과 같이 수행됩니다(인터페이스를 가정).wg0):
sysctl -w net.ipv4.conf.wg0.forwarding=1
방화벽 규칙은 다음 위치에서도 전달된 트래픽을 허용해야 합니다.wg0.
CGNAT 노드에서 다른 CGNAT 피어를 정의할 필요가 없으며 정의된 경우해서는 안 된다다른 CGNAT 노드의 IP 주소가 있습니다.허용된 IP:
- 직접 연결할 수 없으며,
- 이후에도 동일한 주소가 설정되면허용된 IP이는 이전의 각 정의에서 삭제되며 마지막으로 정의된 피어만이 이를 갖게 됩니다. 와 함께암호화 키 라우팅IP 주소 <=> 피어.
노드 5와 6은 호환 가능한 구성을 가져야 합니다(또한 노드 2를 라우터로 사용). 대신 다음을 수행하는 것을 상상할 수도 있습니다.
- 4와 5가 노드 2에 의해 라우팅되고, 4와 6이 노드 3에 의해, 5와 6이 노드 1에 의해 라우팅되는 분할 역할,
- 또는 각 블록이 다른 라우팅 노드를 통해 라우팅될 수 있도록 서로 다른 IP 블록 내에 여러 IP 주소가 있는 경우,
- 또는 WireGuard 트래픽 내에서 WireGuard 트래픽과 함께 양파 라우팅을 사용하여 라우팅 노드가 의도되지 않은 트래픽을 디코딩할 수 없도록 합니다.
- 또는 여러 개의 독립적인 WireGuard 인터페이스를 사용하는 경우(자체 간 암호화 키 상호 작용은 적용되지 않고 라우팅 테이블에만 적용됨)
- 또는 이전 옵션의 조합,
[...]
모든 경우에, 의도된 변경이 아닌 오류로 인해 토폴로지가 변경된 경우에도 영향을 받는 모든 피어의 구성 변경 사항을 동기화하는 방법이 필요하며 현재 이를 수행하는 전용 도구는 없습니다.
결론적으로, 다음은 블로그입니다.BGP(누락된 도구일 수 있음)는 여러 주소와 피어 노드당 하나의 인터페이스를 사용하여 WireGuard와 함께 사용되며 해당 피어만 암호화 키 라우팅을 회피하도록 정의됩니다. 아마 이것으로부터 배울 것이 있을 것입니다. 그러나 주제가 제게는 너무 고급입니다.