Маршрутизация на основе политик 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