
gateway
인터넷에 공개적으로 표시되고 appserver
NAT/방화벽 뒤에 숨겨져 있는 두 개의 서버가 있다고 가정합니다 . 또한 이 두 서버 각각에둘완전히 별도의 인터넷 업링크에 연결된 인터페이스(아래 다이어그램 참조)
두 서버 중 하나가 실패할 경우 서버 연결을 유지한다는 목표로 두 서버 사이에 두 개의 독립적인 Wireguard 터널을 설정하고 싶습니다.
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <-----> (ens1) < - - - - > (ens1) <----> (wg0)
| |
| |
| |
(wg1) <-----> (ens2) < - - - - > (ens2) <----> (wg1)
| |
| |
기본적으로 Wireguard는 시스템의 기본 게이트웨이를 통해 모든 트래픽을 라우팅하는 것으로 보입니다. 따라서 appserver
에 연결을 시도 하면 gateway
다음 두 인터페이스 중 하나만 사용됩니다.
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <--+--> (ens1) < - - - - > (ens1) <--+--> (wg0)
| | | |
| | | |
| | | |
(wg1) <--+ (ens2) X (ens2) +--> (wg1)
| |
| |
일부 네트워크 도구에서는 네트워크 트래픽을 보낼 때 사용할 특정 네트워크 인터페이스를 설정할 수 있으므로 Wireguard도 동일한 작업을 수행할 수 있습니까? 즉, 기본 경로 메트릭을 통해서만 트래픽을 보내 ens1
거나 이에 관계없이 트래픽을 보내시겠습니까? ens2
그렇지 않다면 대신 이 작업을 수행하도록 Linux의 네트워킹 시스템을 어떻게 설정할 수 있습니까?
답변1
Wireguard 자체가 특정 인터페이스를 통해 연결되도록 하는 방법을 찾을 수 없었기 때문에 결국 의 라우팅 테이블 ens2
에 새 경로를 추가하여 단순히 트래픽을 라우팅하는 것으로 결정했습니다.appserver
ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50
APPSERVER_ESN2_ADDR_GW
appserver
의 게이트웨이 라우터 주소입니다 .
FwMark
이를 조사하는 동안 Wireguard를 사용하면 아래 필드를 설정하여 특정 Wireguard 인터페이스에 속하는 나가는 트래픽에 fwmark를 설정할 수 있다는 것을 알았습니다 [Interface]
. Wireguard는 이 글을 쓰는 시점(2021-09) 현재 피어별로 이 표시를 설정하는 것을 지원하지 않습니다.
*누군가가 적절한 해결책을 발견할 경우를 대비해 이 질문을 열어 두겠습니다.