Короткий ответ
Сначала таблица клиента, не серверный 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).
Возможные причины
- В клиенте WG не перечислили LAN в
AllowedIPs. Table = off/Table = 123без правил policy routing.- OpenVPN клиент
route-nopull, сервер push игнорируется. - Windows split без маршрутов (галка default gateway снята и всё).
- GPO Always On VPN перезаписывает профиль.
- Метрика VPN хуже, чем у другого адаптера с overlapping.
wg-quickне отработалPostUpс маршрутами.- 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 showWindows 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.102. Что пушит сервер
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.0Linux: скрипт 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 rulePolicy 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.10Get-VpnConnectionRoute -ConnectionName 'Office'
Find-NetRoute -RemoteIPAddress 10.0.10.10
Test-NetConnection 10.0.10.10Destination 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 и статус.
wg-quick пишет ip: RTNETLINK при up
Конфликт маршрута или нет прав. Читайте строку, не игнорируйте. Часто уже есть overlapping.
Можно ли пушить много /32 вместо /24?
Да, для подрядчика даже лучше. См. подрядчик и split.
OpenVPN iroute на сервере vs route на клиенте
iroute — для трафика к клиенту с сервера (CCD). Клиенту в LAN офиса нужен push route. Путают постоянно.