Как настроить интерфейс Wireguard для подключения к удаленному узлу через определенный сетевой интерфейс?

Предположим, у меня есть два сервера, gatewayкоторый общедоступен для Интернета и appserverкоторый скрыт за nat/firewall. Также предположим, что каждый из этих двух серверов имеет два интерфейса, подключенных к совершенно отдельным восходящим каналам Интернета (, см. схему ниже).

Я хочу настроить два независимых туннеля 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 для этого?

0
задан 24 September 2021 в 10:06
1 ответ

Мне не удалось найти способ заставить wireguard подключаться через определенный интерфейс, поэтому в конце концов я остановился на простой маршрутизации трафика, предназначенного для ens2, добавив новый маршрут к appserverтаблицы маршрутизации:

ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50

APPSERVER_ESN2_ADDR_GW— это адрес шлюзового маршрутизатора appserver.

Изучая этот вопрос, я заметил, что wireguard позволяет вам установить fwmark для исходящего трафика, принадлежащего определенному интерфейсу wireguard, установив поле FwMarkв [Interface]. На момент написания этой статьи (2021-09)Wireguard не поддерживает установку этой метки для каждого-пира.

Я оставлю этот вопрос открытым на случай, если кто-то найдет верный ответ на этот вопрос.

0
ответ дан 26 September 2021 в 07:06

Теги

Похожие вопросы