Маршрутизация на основе политик WireGuard

Этот вопрос касается настройки ретранслятора WireGuard, который направляет весь трафик своего однорангового узла на другой сервер WireGuard, но сам ретранслятор не использует этот сервер WireGuard в качестве шлюза по умолчанию.

Я занимаюсь кое-каким самостоятельным хостингом. В настоящее время моя сеть содержит три узла, шлюз, сервер ownCloud и мой мобильный телефон. Эти узлы соединены в сетку. Шлюз размещен на VPS, и мобильный телефон будет использовать его для доступа в Интернет.

Все работает. Но проблема возникает, когда я добавляю узел Windows в эту сеть, поскольку функция аварийного отключения клиента WireGuard Windows требует, чтобы в конфигурации был ровно один узел, а разрешенный IP-адрес — 0.0.0.0/0. По соображениям безопасности я не хочу, чтобы VPS располагался между узлом Windows и сервером ownCloud, поэтому маршрут должен быть таким:

Узел Windows -> сервер ownCloud -> Шлюз -> Интернет

Более того, сервер ownCloud будет ежечасно выполнять резервное копирование. Я не хочу, чтобы этот трафик направлялся на шлюз из-за скорости.

Я пробую маршрутизацию на основе политик уже около нескольких часов, но все еще не могу заставить ее работать. Может ли кто-нибудь помочь? Спасибо. Ниже приведены работающие конфигурации.

шлюз

wg0

      [Interface]
Address = 10.0.0.1/32
ListenPort = 51820

[Peer]
PublicKey = (ownCloud server's public key)
AllowedIPs = 10.0.0.2/32

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32

nftables

          chain postrouting {
        type nat hook postrouting priority srcnat;
        ip saddr 10.0.0.0/24 oif eth0 masquerade
    }
    chain forward {
        type filter hook forward priority filter; policy drop;
        ct state established,related accept
        ip saddr 10.0.0.0/24 accept
    }

собственныйОблачный сервер

      [Interface]
Address = 10.0.0.2/32
ListenPort = 51820

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 10.0.0.1/32
PersistentKeepalive = 25

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25

мобильный

      [Interface]
Address = 10.0.0.3/32
ListenPort = 51820
DNS = 10.0.0.2

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

[Peer]
PublicKey = (ownCloud server's public key)
Endpoint = (ownCloud server's domain name):51820
AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25

1 ответ

Да, маршрутизация на основе политики — это то, что вам нужно для вашего собственного облачного сервера. Попробуйте следующую конфигурацию WireGuard для вашего сервера ownCloud:

      [Interface]
PrivateKey = (ownCloud server's private key)
Address = 10.0.0.2/24
ListenPort = 51820
Table = 123

PreUp = sysctl -w net.ipv4.ip_forward=1
PreUp = ip rule add iif %i table 123 priority 456
PostDown = ip rule del iif %i table 123 priority 456

[Peer]
PublicKey = (gateway's public key)
Endpoint = $gateway_ip_address:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

[Peer]
PublicKey = (mobile's public key)
AllowedIPs = 10.0.0.3/32

[Peer]
PublicKey = (windows node's public key)
AllowedIPs = 10.0.0.4/32
  • Используя/24сетевая маска для его адреса WireGuard добавит10.0.0.0/24маршрут вашей сети WireGuard к ее основной таблице маршрутизации.
  • УказаниеTable = 123запустит wg-quick для использования пользовательского123таблицу маршрутизации вместо основной таблицы, когда она добавляет маршруты для узлов WireGuard.
  • The iff i% table 123 priority 456Правило маршрутизации политики гарантирует, что весь трафик, поступающий через интерфейс WireGuard, будет использовать эту пользовательскую таблицу вместо основной таблицы (в то время как исходящий трафик, генерируемый в самой системе, будет продолжать использовать основную таблицу).
  • УказаниеAllowedIPs = 0.0.0.0/0для узла шлюза означает, что весь трафик, отправляемый через интерфейс WireGuard и не предназначенный для других узлов, будет отправляться на шлюз.

Также убедитесь, что вы настроили брандмауэр на своем сервере ownCloud, чтобы разрешить пересылку трафика из вашей сети WireGuard, так же, как вы это сделали для своего шлюза (но вам не нужно маскировать его, как на шлюзе):

      chain forward {
    type filter hook forward priority filter; policy drop;
    ct state established,related accept
    ip saddr 10.0.0.0/24 accept
}

Затем вы сможете использовать конфигурацию WireGuard, подобную следующей, на своем узле Windows и получать через нее доступ как к Интернету, так и к остальной части вашей сети WireGuard:

      [Interface]
PrivateKey = (windows node's private key)
Address = 10.0.0.4/32
ListenPort = 51820
DNS = 10.0.0.2

[Peer]
PublicKey = (ownCloud server's public key)
Endpoint = (ownCloud server's domain name):51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Другие вопросы по тегам