В WireGuard существует важный аспект, касающийся маршрутизации трафика, который вы описали. Дело в том, что когда создается туннель с помощью WireGuard, он настраивает свои собственные правила маршрутизации для трафика, направленного к пиру (peer), но делает это с учетом того, чтобы всегда сохранять связь с удаленным узлом.
Когда настраивается туннель с `allowed-ips`, например, на `0.0.0.0/0`, это означает, что весь трафик должен быть отправлен через этот туннель. Однако, особенность WireGuard заключается в том, что трафик, предназначенный для самого пира (в данном случае `100.100.100.100`), не проходит через туннель, а вместо этого используется стандартный маршрут.
Вот причины, почему так происходит:
1. **Поддержание связи с пиром**: Если весь трафик к пиру шел бы через туннель, это создало бы замкнутую петлю — трафик идет к пире, который сам же отвечает на этот трафик, проходя обратно по тому же туннелю. Это привело бы к тому, что активация маршрутизации через WireGuard могла бы привести к потере связи с пиром.
2. **Упрощение логики маршрутизации**: WireGuard имеет упрощенную модель маршрутизации, где он полагается на стандартные маршруты для трафика, предназначенного для пиров. Это позволяет избежать усложнений и проблем, связанных с управляющим трафиком и его маршрутизацией.
3. **Автоматическое определение адреса источника**: Так как WireGuard использует для шифрования и аутентификации пару ключей, он может определить источник трафика на основе интерфейса (в данном случае `wg0`). Поэтому он может обрабатывать трафик, предназначенный для конкретного пира, но не маршрутизирует его через туннель.
В результате, когда происходит попытка достичь адреса пира, система использует стандартный маршрут, что позволяет сохранить связь с удаленным узлом и избежать циклической маршрутизации. Трафик от локального узла к удаленному идет напрямую, без создания дополнительных накладных расходов и риска разрушения туннеля.