Почему в WireGuard трафик для удалённых узлов (peers) передаётся по стандартным маршрутам, а не через созданный тоннель?

Пожалуйста, внимательно прочтите следующий вопрос, который не касается маршрутизации внутри тоннеля WireGuard. <br/> <br/> Допустим, у нас настроен тоннель WireGuard с использованием wg-quick и именем интерфейса "wg0". В конфигурации указан peer с адресом 100.100.100.100 и allowed-ips равным 0.0.0.0/0. <br/> В этом случае создаваемые правила маршрутизации (ip rules) определяют, что для всего немаркированного трафика следует использовать таблицу маршрутизации 100500: <br/> <i>&gt; ip rule</i> <br/> <blockquote>0: from all lookup local<br/>
32765: not from all fwmark 0x1234 lookup 100500<br/>
32766: from all lookup main<br/>
32767: from all lookup default</blockquote> <br/> <br/> В таблице 100500 находится маршрут по умолчанию, который указывает на тоннель WireGuard: <br/> <i>&gt; ip route show table 100500</i> <br/> <blockquote>default dev wg0 scope link<br/>
192.168.0.1 dev wg0 scope link</blockquote> <br/> <br/> Исходящий трафик к пиру 100.100.100.100 не подлежит маркировке и должен идти через тоннель. <br/> Более того, если выполнить команду "<i>ip route get 100.100.100.100</i>", мы получим следующий результат: <br/> <blockquote>100.100.100.100 dev wg0 table 100500 src 192.168.0.2<br/>
</blockquote> Хоть кажется, что трафик к самому пиру должен также проходить через тоннель, это не так, поскольку в противном случае связь с пиром будет потеряна, и тоннель прекратит функционировать. <br/> <br/> Итак, каким образом после активации тоннеля WireGuard осуществляется маршрутизация трафика к пиру?
  • 25 сентября 2024 г. 13:45
Ответы на вопрос 2
В WireGuard существует важный аспект, касающийся маршрутизации трафика, который вы описали. Дело в том, что когда создается туннель с помощью WireGuard, он настраивает свои собственные правила маршрутизации для трафика, направленного к пиру (peer), но делает это с учетом того, чтобы всегда сохранять связь с удаленным узлом.

Когда настраивается туннель с `allowed-ips`, например, на `0.0.0.0/0`, это означает, что весь трафик должен быть отправлен через этот туннель. Однако, особенность WireGuard заключается в том, что трафик, предназначенный для самого пира (в данном случае `100.100.100.100`), не проходит через туннель, а вместо этого используется стандартный маршрут.

Вот причины, почему так происходит:

1. **Поддержание связи с пиром**: Если весь трафик к пиру шел бы через туннель, это создало бы замкнутую петлю — трафик идет к пире, который сам же отвечает на этот трафик, проходя обратно по тому же туннелю. Это привело бы к тому, что активация маршрутизации через WireGuard могла бы привести к потере связи с пиром.

2. **Упрощение логики маршрутизации**: WireGuard имеет упрощенную модель маршрутизации, где он полагается на стандартные маршруты для трафика, предназначенного для пиров. Это позволяет избежать усложнений и проблем, связанных с управляющим трафиком и его маршрутизацией.

3. **Автоматическое определение адреса источника**: Так как WireGuard использует для шифрования и аутентификации пару ключей, он может определить источник трафика на основе интерфейса (в данном случае `wg0`). Поэтому он может обрабатывать трафик, предназначенный для конкретного пира, но не маршрутизирует его через туннель.

В результате, когда происходит попытка достичь адреса пира, система использует стандартный маршрут, что позволяет сохранить связь с удаленным узлом и избежать циклической маршрутизации. Трафик от локального узла к удаленному идет напрямую, без создания дополнительных накладных расходов и риска разрушения туннеля.
not from all - ни откого не принимать, по факту никогда не будет работать 

не маркированый 1234
32765: from all not fwmark 0x1234 lookup 100500

вообще без меток
32765: from all fwmark 0x0/0xFFFFFFFF lookup 100500

Надеюсь ты в курсе что в wg0.conf можно указать таблицу маршрутизации (Table=100500) для интерфейса WG и не издеваться так над правилами?
Похожие вопросы