Короткий ответ

Сначала таблица клиента, не серверный firewall. Нет маршрута на 10.0.10.0/24 — пакеты в офис не пойдут, даже при живом 10.8.0.1. Источники маршрута: WireGuard AllowedIPs (+ wg-quick Table), OpenVPN push "route ..." vs route-nopull, Windows SplitTunneling + Add-VpnConnectionRoute, IPsec TS. Снимите ip route / Get-NetRoute в момент Connected. Не включайте 0.0.0.0/0 как замену забытому push.

Если маршрут есть, а ping нет — это уже forwarding, другая статья.

Симптомы и как отличить

  • ip route get 10.0.10.10 → через домашний шлюз.
  • Windows: SplitTunneling True, список Get-VpnConnectionRoute пуст.
  • OpenVPN лог: route-nopull / ignoring pushed route.
  • WireGuard: AllowedIPs = 10.8.0.0/24 без LAN; или Table = off.

Отличия: overlapping connected route (пересечение); internet пропал из-за default (full tunnel); handshake без трафика при наличии маршрута (AllowedIPs/filter).

Возможные причины

  1. В клиенте WG не перечислили LAN в AllowedIPs.
  2. Table = off / Table = 123 без правил policy routing.
  3. OpenVPN клиент route-nopull, сервер push игнорируется.
  4. Windows split без маршрутов (галка default gateway снята и всё).
  5. GPO Always On VPN перезаписывает профиль.
  6. Метрика VPN хуже, чем у другого адаптера с overlapping.
  7. wg-quick не отработал PostUp с маршрутами.
  8. IPsec Child без установки маршрута в ОС (политика xfrm есть, route нет).

Диагностика

1. Снимок таблицы

Linux:

ip route
ip rule
ip route get 10.0.10.10
ip route get 10.8.0.1
wg show

Windows 11:

Get-VpnConnection | Format-List Name, ConnectionStatus, SplitTunneling
Get-VpnConnectionRoute -ConnectionName 'Office'
Get-NetRoute -AddressFamily IPv4 | Sort-Object InterfaceMetric, DestinationPrefix
Find-NetRoute -RemoteIPAddress 10.0.10.10

2. Что пушит сервер

OpenVPN 2.6 server.conf:

push "route 10.0.10.0 255.255.255.0"
push "route 10.8.0.0 255.255.255.0"

Лог клиента: PUSH_REPLY. Нет route в PUSH — сервер молчит, не клиент «ломается».

3. Права на добавление маршрута

На Windows без админа GUI-клиент иногда не ставит маршруты. OpenVPN: route-delay, ошибка route addition failed. Linux: wg-quick без CAP_NET_ADMIN в контейнере.

Решение

Сценарий A. WireGuard

AllowedIPs = 10.8.0.0/24, 10.0.10.0/24

Уберите Table = off либо добавьте:

ip route add 10.0.10.0/24 dev wg0

в PostUp и симметричный PostDown. Перезапуск wg-quick@wg0.

Сценарий B. OpenVPN клиент

Удалите route-nopull. Если pull нельзя (политика), пропишите статически:

route 10.0.10.0 255.255.255.0

Linux: скрипт up с ip route add. Проверьте, что redirect-gateway не добавлен случайно.

Сценарий C. Windows RAS

Set-VpnConnection -Name 'Office' -SplitTunneling $true
Add-VpnConnectionRoute -ConnectionName 'Office' -DestinationPrefix '10.0.10.0/24'
Add-VpnConnectionRoute -ConnectionName 'Office' -DestinationPrefix '10.8.0.0/24'

Отключите и включите VPN. Если профиль All-user:

Get-VpnConnection -AllUserConnection

правите с -AllUserConnection.

Сценарий D. Метрики

Set-VpnConnection -Name 'Office' -SplitTunneling $true
Get-NetIPInterface -AddressFamily IPv4 | Format-Table InterfaceAlias, InterfaceMetric

Повысьте метрику домашнего NIC только если понимаете эффект на бытовой трафик. Лучше убрать overlapping.

Сценарий E. IPsec

После CHILD_SA добавьте маршрут на 10.0.10.0/24 via VTI/xfrm как в вашей схеме. Без VTI полагаются на policy: тогда ip xfrm policy должна ловить пакет. Если policy есть, а ip route get всё равно в eth0 — пакет не попадёт в xfrm. Нужен route в туннель/VTI.

Стенд: OpenVPN push есть, Windows маршрут нет

В логе клиента PUSH_REPLY,route 10.0.10.0 255.255.255.0, но Get-NetRoute без префикса. Причины: клиент запущен без права менять таблицу; route-nopull ниже в ovpn; антивирус откатывает route. Запуск GUI «от администратора» для проверки — не постоянная модель. Нужен сервис OpenVPN с привилегией или RAS-профиль с Add-VpnConnectionRoute под учёткой, которой разрешено.

WireGuard Table = off в одном из drop-in файлов /etc/wireguard/wg0.conf.d/ легко не заметить. wg show AllowedIPs заполнен, ip route пуст. Ищите все Table.

grep -R 'Table\|AllowedIPs\|route-nopull' /etc/wireguard /etc/openvpn 2>/dev/null
ip rule

Policy routing ip rule с таблицей 51820: маршруты могут быть в ip route show table 51820, не в main. Тогда ip route get 10.0.10.10 всё равно покажет wg0, а человек, смотрящий только ip route, решит, что маршрутов нет. Снимайте ip route get.

На Windows не смешивайте Add-VpnConnectionRoute user-профиля и -AllUserConnection. После GPO Always On пользовательский маршрут исчезает — править XML/GPO, не «ещё раз Add» в профиле жертвы.

Проверка после reconnect

Маршрут, добавленный руками route add, исчезает после disconnect. Эталон — тот, что ставит агент сам. Сценарий: Connect, снять Get-VpnConnectionRoute, Disconnect, Connect, сравнить. Расхождение — баг профиля или GPO, не «Windows забыла». На Linux wg-quick down/up должен вернуть PostUp. Если PostUp в комментарии — верните в файл, не в crontab root «на всякий».

Как проверить, что проблема устранена

ip route get 10.0.10.10
ping -c 2 10.0.10.10
Get-VpnConnectionRoute -ConnectionName 'Office'
Find-NetRoute -RemoteIPAddress 10.0.10.10
Test-NetConnection 10.0.10.10

Destination prefix виден, интерфейс VPN, ping/TCP к LAN. После reconnect маршруты на месте (не только до ребута).

Если не помогло

  • Маршрут есть, ping нет — LAN.
  • Маршрут исчезает через минуту — DHCP/GPO/конкурирующий VPN-клиент.
  • Только после сна — драйвер, статья разрывов.
  • route add ок от администратора, у пользователя нет — права/UAC, выдайте маршрут в профиле, не «запусти от админа каждый раз».

Профилактика

  • Эталонный клиентский конфиг с явным списком префиксов.
  • Запрет route-nopull в корпоративном ovpn.
  • Чеклист: после Connect сверить Get-VpnConnectionRoute.
  • Не надеяться, что RAS сам угадает 10.0.10.0/24.

FAQ

Почему ping 10.8.0.1 есть без маршрута на LAN?

Туннельная /24 часто ставится как connected на интерфейсе VPN. LAN — отдельный префикс, его надо пушить.

Add-VpnConnectionRoute «уже существует», а Get-NetRoute пуст

Профиль не тот (user vs all-user) или VPN не connected. Сверяйте -ConnectionName и статус.

Конфликт маршрута или нет прав. Читайте строку, не игнорируйте. Часто уже есть overlapping.

Можно ли пушить много /32 вместо /24?

Да, для подрядчика даже лучше. См. подрядчик и split.

OpenVPN iroute на сервере vs route на клиенте

iroute — для трафика к клиенту с сервера (CCD). Клиенту в LAN офиса нужен push route. Путают постоянно.