Как подключиться к офисной сети по VPN L2TP/IPsec с общим ключом (PSK): из Linux через NetworkManager и из Windows. Отдельно — три проблемы, на которые я наткнулся на практике: туннель поднят, а сервер в офисе не пингуется; соединение рвётся при копировании больших файлов; сервер сам закрывает сеанс каждые 10–15 минут.
Пример — подключение к шлюзу UserGate, но всё описанное подходит для любого сервера L2TP/IPsec (MikroTik, pfSense, Windows RRAS, Keenetic и т.п.). Адрес шлюза, логин и ключи на скриншотах заменены.
Что понадобится от администратора VPN
| Параметр | Пример | Где вводится |
|---|---|---|
| Адрес шлюза | vpn.example.ru или внешний IP |
«Шлюз» |
| Тип VPN | L2TP с IPsec, предварительный ключ (PSK) | — |
| Общий ключ IPsec (PSK) | строка из букв и цифр | настройки IPsec |
| Логин и пароль | ivanov / … |
«Имя пользователя», «Пароль» |
| Протокол проверки подлинности | PAP (иногда CHAP или MS-CHAP v2) | настройки PPP |
| Сети за VPN | например 192.168.1.0/24 |
маршруты |
Последний пункт важен: если пускать в VPN только трафик к офисным сетям, а интернет оставить напрямую, нужно знать, какие сети там находятся.
Linux: NetworkManager
Пакеты
Нужен плагин L2TP для NetworkManager, а он тянет за собой xl2tpd и strongSwan (или libreswan).
# ALT Linux (KDE Plasma)
apt-get install NetworkManager-l2tp plasma-nm-connect-l2tp
# Debian / Ubuntu
apt install network-manager-l2tp network-manager-l2tp-gnome
# Fedora / RED OS
dnf install NetworkManager-l2tp NetworkManager-l2tp-gnomeПосле установки перезапустите NetworkManager (systemctl restart NetworkManager) или просто перелогиньтесь, чтобы в списке типов VPN появился L2TP.
Настройка в графическом интерфейсе
Скриншоты сделаны в KDE Plasma («Параметры системы → Wi-Fi и сеть»), в GNOME (nm-connection-editor) поля называются так же.
Добавьте подключение типа «Протокол туннелирования второго уровня (L2TP)» и на вкладке VPN (l2tp) заполните шлюз, тип аутентификации «Пароль», логин и пароль.

«Сохранить пароль для всех пользователей» нужно, если подключение должно подниматься без входа в графический сеанс или из консоли (nmcli con up). Иначе пароль хранится в KWallet / GNOME Keyring и спрашивается при подключении.
Кнопка Настроить IPsec… — включаем туннель IPsec, тип «Предварительно согласованный общий ключ (PSK)», вставляем ключ. Остальные поля оставляем пустыми: NetworkManager предложит серверу стандартный набор алгоритмов, и с большинством шлюзов этого достаточно.

Кнопка Настроить PPP… — здесь две важные вещи:
- методы аутентификации: оставьте только то, что требует сервер. В нашем случае — PAP (CHAP оставлен как запасной). Если включить только MSCHAPv2, а сервер ждёт PAP, подключение будет падать сразу после установки IPsec с ошибкой аутентификации PPP;
- MRU и MTU = 1280 — об этом подробно ниже, в разделе про обрывы.

Шифрование MPPE не включайте: трафик и так идёт внутри IPsec, а большинство серверов L2TP/IPsec MPPE не поддерживает.
Маршруты: только офисные сети через VPN
На вкладке IPv4 нажмите Маршруты…, добавьте сети офиса и поставьте галочку «Использовать только для ресурсов этого соединения».


Галочка означает «не делать VPN шлюзом по умолчанию» — интернет продолжает ходить напрямую, а через туннель идёт только то, что указано в маршрутах. Шлюз в строке маршрута можно оставить 0.0.0.0 — тогда маршрут вешается прямо на интерфейс ppp0.
То же самое из командной строки
nmcli connection add type vpn con-name office-l2tp ifname '*' vpn-type l2tp \
vpn.data "gateway=vpn.example.ru, user=ivanov, password-flags=0, ipsec-enabled=yes, ipsec-psk-flags=0, \
refuse-eap=yes, refuse-mschap=yes, refuse-mschapv2=yes, mtu=1280, mru=1280" \
vpn.secrets "password=ПАРОЛЬ, ipsec-psk=ОБЩИЙ_КЛЮЧ" \
ipv4.never-default yes \
ipv4.routes "192.168.1.0/24"
nmcli connection up office-l2tppassword-flags=0 и ipsec-psk-flags=0 — хранить секреты в самом подключении (в /etc/NetworkManager/system-connections/, файл доступен только root). Изменение системного подключения требует прав root: если nmcli connection modify отвечает Insufficient privileges, выполните его через sudo.
Проверка:
ip -br addr show ppp0 # адрес из пула VPN
ip route get 192.168.1.10 # должно быть: dev ppp0
ping -c3 192.168.1.10Windows
Встроенный клиент Windows умеет L2TP/IPsec, но с двумя особенностями.
Твик реестра для NAT
Если компьютер находится за NAT (почти всегда — домашний роутер, офисная сеть), Windows по умолчанию отказывается устанавливать IPsec с сервером, который тоже за NAT. Лечится параметром реестра, после которого обязательна перезагрузка:
reg add HKLM\SYSTEM\CurrentControlSet\Services\PolicyAgent /v AssumeUDPEncapsulationContextOnSendRule /t REG_DWORD /d 2 /fБез него подключение висит на «Проверка имени пользователя и пароля…» и падает с ошибкой 809.
Создание подключения
«Параметры → Сеть и Интернет → VPN → Добавить VPN»: тип «L2TP/IPsec с предварительным ключом», адрес сервера, ключ, логин и пароль. Затем в «Панель управления → Сетевые подключения → свойства подключения → Безопасность» выставляем:
- шифрование данных — «обязательное»;
- «Разрешить следующие протоколы» — только «Незашифрованный пароль (PAP)» (или то, что требует ваш сервер).

Ключ IPsec задаётся там же, кнопкой «Дополнительные параметры».
Чтобы интернет не шёл через офис, на вкладке «Сеть → IP версии 4 → Свойства → Дополнительно» снимите «Использовать основной шлюз в удалённой сети» и добавьте маршрут к офисной сети, который будет появляться при каждом подключении:
Add-VpnConnectionRoute -ConnectionName "VPN Офис" -DestinationPrefix 192.168.1.0/24 -PassThruПроблема 1. VPN подключён, а офисные серверы недоступны
Симптом: значок VPN показывает «подключено», адрес на ppp0 есть, но до серверов в офисе не достучаться — ping молчит, SSH и RDP по таймауту. Особенно коварно, когда раньше всё работало, а после переподключения перестало.
Диагностика — одна команда:
ip route get 192.168.1.10
# плохо: 192.168.1.10 via 10.0.0.1 dev enp5s0 ... ← пакет ушёл в обычную сеть мимо туннеля
# хорошо: 192.168.1.10 dev ppp0 ...Причина: стоит «использовать только для ресурсов этого соединения» (ipv4.never-default yes), но маршрутов к офисным сетям в подключении нет. NetworkManager честно не делает VPN шлюзом по умолчанию и ставит маршрут только до адреса противоположной стороны туннеля (/32). Если раньше маршрут добавлялся руками (ip route add …), при каждом переподключении он пропадает.
Решение — прописать сети в самом подключении (как в разделе «Маршруты» выше), тогда они восстанавливаются при каждом подъёме туннеля:
sudo nmcli connection modify office-l2tp +ipv4.routes 192.168.1.0/24
nmcli connection up office-l2tpПроблема 2. Туннель рвётся при копировании больших файлов
Симптом: обычная работа (SSH, RDP) идёт нормально, но стоит начать копировать файл в сотни мегабайт — через 20–40 секунд связь пропадает целиком, VPN переподключается. В журнале:
xl2tpd[...]: Connection 110 closed to <шлюз>, port 1701 (Timeout)
pppd[...]: Connect time 0.6 minutes.
pppd[...]: Sent 2377129 bytes, received 39961 bytes.Ключевое слово — (Timeout): туннель закрыл не сервер, а сам клиент, потому что перестал получать служебные пакеты L2TP (hello). Пакеты PPP внутри L2TP внутри IPsec внутри UDP получают много заголовков; полноразмерные пакеты при MTU 1400–1500 не пролезают через канал без фрагментации, фрагменты теряются, очередь забивается, и вместе с данными теряются служебные пакеты.
Что помогает:
-
Уменьшить MTU и MRU до 1280 (в настройках PPP или
mtu=1280, mru=1280вvpn.data). Это главное. -
Ограничить скорость больших передач, если канал всё равно не выдерживает:
bashrsync -a --partial --append-verify --bwlimit=3000 файл user@192.168.1.10:/path/ # ~3 МБ/с, с докачкой sftp -l 24000 user@192.168.1.10 # лимит в Кбит/с--partial --append-verifyу rsync иreputу sftp позволяют докачать файл с места обрыва, а не начинать сначала. -
Для SSH-сессий —
-o ServerAliveInterval=15, чтобы зависшее соединение быстро обнаруживалось.
Проблема 3. Сервер сам закрывает сеанс
Симптом: туннель живёт 10–15 минут и падает, хотя ничего не копировалось. В журнале:
xl2tpd[...]: Connection 108 closed to <шлюз>, port 1701 (Server closing)
pppd[...]: Connect time 10.0 minutes.Здесь (Server closing) — инициатор сервер. Самые частые причины:
- тот же логин подключён ещё откуда-то — с рабочего ноутбука, с телефона, со второго компьютера. Многие шлюзы (в том числе UserGate) разрешают одному пользователю один сеанс L2TP и при новом подключении выбивают старое. Два устройства по очереди выбивают друг друга. Решение — отдельная учётная запись VPN на каждое устройство;
- таймаут бездействия на сервере — если обрыв ровно через одинаковое время при простое. Решается настройкой сервера или эхо-пакетами PPP («Посылать эхо-пакеты PPP» в настройках PPP);
- политика сервера (лимит времени сеанса, смена ключей IPsec) — смотреть журнал на стороне шлюза.
Где смотреть журналы
journalctl -u NetworkManager --since "-30 min" | grep -E 'xl2tpd|pppd|charon|ppp0'
journalctl --since "-30 min" | grep -E 'pppd\[[0-9]+\]: (Connect time|Sent)|closed to' # краткая история обрывов| Что видно в журнале | Что это значит |
|---|---|
charon ... no proposal chosen / NO_PROPOSAL_CHOSEN |
не совпали алгоритмы IPsec — задать «Алгоритмы фазы 1/2» в настройках IPsec под сервер |
charon ... authentication of ... failed |
неверный общий ключ PSK |
pppd ... PAP authentication failed / CHAP authentication failed |
неверный логин/пароль или не тот метод аутентификации в настройках PPP |
xl2tpd ... closed ... (Timeout) |
обрыв со стороны клиента — MTU, перегруженный канал (проблема 2) |
xl2tpd ... closed ... (Server closing) |
сервер закрыл сеанс (проблема 3) |
Итог
- В Linux L2TP/IPsec настраивается штатным NetworkManager с плагином L2TP; в Windows — встроенным клиентом плюс твик реестра для NAT.
- Если VPN нужен только для офиса — включайте «только для ресурсов этого соединения» и обязательно прописывайте маршруты к офисным сетям в самом подключении.
- MTU/MRU 1280 и ограничение скорости больших копирований избавляют от обрывов
(Timeout). - Обрывы
(Server closing)чаще всего — один логин на двух устройствах.