Я пытаюсь маршрутизировать трафик, поступающий из сети Docker... У меня запущен и работает Wireguard, и в отличие от примеров в документации, которые маршрутизируют ВЕСЬ трафик через VPN на основе назначения, я пытаюсь маршрутизировать только ЧАСТЬ трафика на основе исходной сети, политики маршрутизации, а затем назначения.
По сути, я хочу, чтобы весь трафик, идущий из 10.30.0.0 (сеть моста докера), проходил через интерфейс wg0, за исключением трафика, который возвращается в ту же сеть или мою локальную сеть. Так что по сути это просто исходящий интернет-трафик.
У меня это работает... ну, или почти... с использованием статических маршрутов.
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200
post-up ip route add 192.168.0.0/16 via 192.168.0.1 table 200
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
Используя таблицу 200 для всего трафика, поступающего с 10.30.0.0, маршрут по умолчанию проходит через wg0. Резервный маршрут — это черная дыра, kill switch на случай, если wg0 выйдет из строя.
Следующие два маршрута заботятся о маршрутизации всего внутреннего вокруг wg0, в противном случае контейнеры не смогут общаться друг с другом в сетях или не будет доступа к любым веб-интерфейсам. Это работает идеально.
ЗА ИСКЛЮЧЕНИЕМ Я вызываю эти маршруты в /etc/network/interfaces.d/wg0, чтобы интерфейсы создавались и поднимались при загрузке с правильными маршрутами. Все хорошо, кроме этого маршрута:
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200
Он терпит неудачу, потому что мост docker еще не запущен, когда поднимается wg0, поэтому он не может создать маршрут, потому что шлюз отсутствует. На данный момент я все это собрал и использовал "@reboot" в cron, чтобы поднять этот маршрут после того, как сеть docker будет запущена.
Есть ли более элегантное решение? Я думал пометить все пакеты, приходящие с 10.30.0.0, которые не предназначены для 10.30.0.0 или 192.168.0.0 и (iptables -s 10.30.0.0/16 ! -d 192.168.0.0/16 и т. д. и т. п.), чтобы избежать необходимости использовать этот маршрут, но я не могу понять это, хоть убей.
Буду признателен за любую помощь.
решение1
Я решил эту проблему, вызвав основную таблицу для этих локальных маршрутов вместо того, чтобы иметь маршруты в таблице 200 для них.
post-up ip rule add from 10.30.0.0/16 table 200
post-up ip rule add from 10.30.0.0/16 to 192.168.0.0/16 table main
post-up ip rule add from 10.30.0.0/16 to 10.30.0.0/16 table main
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200