동일한 원격 LAN을 사용하는 Wireguard: 정책 기반 라우팅 또는 네트워크 네임스페이스?

동일한 원격 LAN을 사용하는 Wireguard: 정책 기반 라우팅 또는 네트워크 네임스페이스?

여러 개의 WireGuard VPN이 있는 서버가 있습니다.
각 VPN은 다른 VPN과 독립적이며 VPN 간에는 연결이 없습니다.

일부 VPN은 동일한 주소 공간을 사용하여 원격 LAN에 연결됩니다. 예를 들어 내 OFFICE_1과 OFFICE_2는 모두 192.168.0.0/24를 사용합니다.
저는 LXC를 사용하여 WireGuard를 호스팅하는 "가상 머신"을 생성합니다. 따라서 각 WireGuard가 별도의 가상 머신에 있기 때문에 동일한 원격 LAN은 문제가 되지 않습니다.
이 솔루션은 간단하지만 시스템 유지 관리에 편리하지 않습니다.

다른 방법은 익숙하지 않아요. 정책 기반 라우팅, 네트워크 네임스페이스, cgroup 또는 다른 것이 더 나은 옵션입니까?

답변1

이를 위해 LXC VM(또는 컨테이너)을 사용하는 것은 편리하고 간단합니다(물론 WireGuard 수신 대기 포트를 VM/컨테이너로 전달하기 위해 서버의 방화벽을 일부 수정해야 할 수도 있음).


그러나 서버가 각 WireGuard 네트워크에서 다른 주소를 사용하는 한(예: 192.168.0.1OFFICE_1, OFFICE_2 등에 대해) 192.168.0.2정책 라우팅을 사용할 수 있습니다 . 당신이 사용하는 경우빠른 작업 그룹서버에서 각 WireGuard 인터페이스를 시작하려면 PreUp서버의 WireGuard 구성 파일에 필요한 정책 규칙을 명령으로 추가할 수 있습니다.

# /etc/wireguard/office1.conf
[Interface]
PrivateKey = 123ABC...
Address = 192.168.0.1/32
ListenPort = 51821
Table = 111

PreUp = ip rule add iif office1 table 111 priority 101
PostDown = ip rule del iif office1 table 111 priority 101

[Peer]
PublicKey = 123DEF...
AllowedIPs = 192.168.0.10/32

[Peer]
PublicKey = 123GHI...
AllowedIPs = 192.168.0.11/32
# /etc/wireguard/office2.conf
[Interface]
PrivateKey = 234ABC...
Address = 192.168.0.2/32
ListenPort = 51822
Table = 222

PreUp = ip rule add iif office2 table 222 priority 102
PostDown = ip rule del iif office2 table 222 priority 102

[Peer]
PublicKey = 234DEF...
AllowedIPs = 192.168.0.10/32

[Peer]
PublicKey = 234GHI...
AllowedIPs = 192.168.0.11/32

위 구성 파일의 설정은 Tablewg-quick에게 각 피어의 설정에 해당하는 경로를 추가할 때 명명된 경로 테이블을 사용하도록 지시합니다 AllowedIPs. 이 PreUp명령은 일치하는 WireGuard 인터페이스에서 들어오는 연결을 라우팅할 때 테이블을 사용하기 위한 정책 라우팅 규칙을 추가합니다(그리고 PostDown명령은 규칙을 삭제합니다).

서버가 WireGuard 네트워크의 다른 호스트에 대한 연결을 시작해야 하는 경우 해당 WireGuard 네트워크의 인터페이스나 주소를 명시적으로 사용하여 올바른 정책 규칙을 트리거해야 합니다. 예를 들어 office1위 네트워크의 호스트를 ping하려면 다음이 필요합니다. 이 네트워크에 있는 서버의 WireGuard 주소를 지정하려면( 192.168.0.1):

ping -I 192.168.0.1 192.168.0.10

또한 서버의 방화벽이 각 WireGuard 네트워크의 호스트 간 연결 전달을 허용하는지 확인해야 합니다(예: 호스트 간 무제한 전달을 iptables -A FORWARD -i office1 -o office1 -j ACCEPT허용하려는 경우 ).office1


그러나 서버가 각 WireGuard 네트워크에 대해 동일한 주소를 사용해야 하는 경우(예: 192.168.0.1OFFICE_1 및 192.168.0.1OFFICE_2 등) 어떤 형태의 컨테이너화를 사용하지 않을 수 없습니다. 가장 가벼운 버전은 단순히 각 WireGuard 인터페이스에 대해 별도의 네트워크 네임스페이스를 생성합니다.

"공통 컨테이너화" 섹션WireGuard 라우팅 및 네트워크 네임스페이스 통합가이드에서는 루트 네임스페이스에 각 WireGuard 인터페이스를 생성한 다음 이를 사용자 정의 네임스페이스로 이동하여 서버의 포트 전달을 방지하는 영리한 트릭을 통해 이를 보여줍니다.

(전체 컨테이너 대신) 네트워크 네임스페이스를 사용하는 경우의 단점은 wg-quick을 사용하여 도움을 받을 수 없다는 것입니다. WireGuard 인터페이스를 설정하기 위해 wg-quick이 일반적으로 실행하는 일부 iproute2 명령을 수동으로 실행해야 합니다.

관련 정보