Меню Рубрики

Vpn l2tp server linux

Установка и настройка L2TP VPN-сервера на Ubuntu Server

L2TP сервер удобен тем, что позволяет использовать встроенные средства Windows для подключения. В данной инструкции рассмотрим процесс его установки и настройки на Ubuntu 16.04 и 18.04. В итоге мы получим:

  • VPN-сервер, использующий туннельный протокол L2TP.
  • Защита соединения посредством общего ключа + аутентификация пользователя.
  • Доступ к локальной сети.

Мы выполним следующие настройки:

Настройка IPSEC

Для управления IPSec используется пакет strongswan — установим его командой:

apt-get install strongswan

Открываем конфигурационный файл для настройки ipsec:

Для config setup добавим:

config setup
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
protostack=netkey

* где virtual_private для нас является наиболее важным параметром и определяет приватные сети. В данном примере просто перечислены сети, зарезервированные под локальные — мы можем указать и другие.

. а также вставляем ниже:

conn l2tpvpn
type=transport
authby=secret
pfs=no
rekey=no
keyingtries=2
left=%any
leftprotoport=udp/l2tp
leftid=@l2tpvpnserver
right=%any
rightprotoport=udp/%any
auto=add

  • type — тип соединения. Возможны варианты tunnel ( хост-хост, хост-подсеть или подсеть-подсеть); transport (хост-хост); passthrough (без обработки IPsec).
  • authby — способы аутентификации двух узлов. Возможны варианты secret (по паролю) или rsasig (цифровые подписи RSA).
  • pfs — расшифровывается как Perfect Forward Secrecy. Позволяет активировать совершенную секретность в канале ключей соединения.
  • rekey — перепроверить соединение, когда оно истекает.
  • keyingtries — число попыток, чтобы «договориться» о соединении или его замене.
  • left — IP-адрес левого участника (сервера). %any означает, что адрес может быть любой.
  • leftprotoport — определяет протокол и порт, на котором будет работать левая сторона (сервер). В данном примере указан UDP и порт 1701.
  • leftid — идентификация левого участника соединения.
  • right — IP-адрес правого участника (клиента). %any означает, что адрес может быть любой.
  • rightprotoport — определяет протокол и порт, на котором будет работать правая сторона (клиент). В данном примере указан UDP и любой порт.
  • auto — операция, которая должна запуститься автоматически при старте IPsec.

Создаем секретный ключ — для этого открываем на редактирование файл:

%any %any : PSK «my_key_password»

* в данном примере мы устанавливаем общий пароль my_key_password для соединений с любого IP.

Разрешаем автозапуск strongswan и перезапускаем службу:

systemctl enable strongswan

systemctl restart strongswan

Устанавливаем сервер L2TP:

apt-get install xl2tpd

Открываем файл настройки сервера:

[global]
port = 1701
access control = no
ipsec saref = yes
force userspace = yes
auth file = /etc/ppp/chap-secrets

[lns default]
ip range = 176.16.10.10-176.16.10.200
local ip = 176.16.10.1
name = l2tpserver
pppoptfile = /etc/ppp/options.xl2tpd
flow bit = yes
exclusive = no
hidden bit = no
length bit = yes
require authentication = yes
require chap = yes
refuse pap = yes

  • port — порт UDP, на котором работает VPN. По умолчанию, 1701.
  • access control — принимать или нет запросы только от клиентов с определенными IP, перечисленными в настройках клиентов.
  • ipsec saref — указывает использовать или нет ipsec Security Association, позволяющий отслеживать несколько клиентов с одинаковыми IP-адресами.
  • force userspace — повышает производительность за счет декапсуляции пакетов L2TP.
  • auth file — путь к файлу аутентификации.
  • ip range — диапазон адресов, которые назначаются подключенным клиентам.
  • local ip — IP-адрес сервера в сети VPN.
  • name — имя сервера для процесса согласования.
  • pppoptfile — путь к файлу с настройкой pppd.
  • flow bit — позволяет добавлять в пакеты порядковые номера.
  • exclusive — если поставить в yes, сервер разрешит только одно соединение с клиентом.
  • hidden bit — скрывать или нет AVP.
  • length bit — использовать ли бит длины, указывающий полезную нагрузку.
  • require authentication — требовать ли аутентификацию.
  • require chap — требовать ли аутентификацию PPP по протоколу CHAP.
  • refuse pap — требовать ли аутентификацию PPP по протоколу PAP.

Разрешаем автозапуск vpn-сервера и перезапускаем его:

systemctl enable xl2tpd

systemctl restart xl2tpd

Открываем на редактирование конфигурационный файл:

Источник

Развёртывание L2TP-сервера с IPSec / PSK

Некоторое время назад был рассмотрен простой OpenVPN-сервер, который позволял обеспечить защиту трафика при использовании небезопасных соединений с интернет. При всей простоте у OpenVPN есть один недостаток: необходимость установки дополнительного ПО на клиентские машины.

Для большинства популярных устройств (на Windows, Android и iOS) от этого недостатка свободен протокол L2TP. По умолчанию L2TP не использует шифрование, однако его можно использовать в связке с IPSec, инициализируемым с помощью PSK (Pre-shared Key — дополнительный ключ). Далее будет показано как можно быстро настроить IPSec L2TP-сервер с PSK на Ubuntu.

Для начала берём недорогую VPS с Ubuntu 16.04 и сразу устанавливаем на неё неободимые пакеты. Нам понадобятся:

  • strongswan: для управления IPSec;
  • xl2tpd: демон, который будет обслуживать L2TP-соединения;
  • iptables-persistent: для управления правилами пакетного фильтра (файрволла);
  • denyhosts: для защиты SSH от перебора пароля;

Следующим шагом придумываем ключ для шифрования IPSec, например «Sup3rP4ss», и приведём файл «/etc/ipsec.secrets» к виду:

Далее открываем файл «/etc/ipsec.conf», удаляем всё его содержимое и заносим в него следующее:

На этом настройка IPSec закончена. Остаётся перезапустить обслуживающий IPSec демон strongswan:

Приступаем к настройке xl2tpd. Основная часть его настроек находится в файле «/etc/xl2tpd/xl2tpd.conf», который нужно привести к виду:

Следующим на очереди у нас идёт файл «/etc/ppp/options.xl2tpd» В нём описываются дополнительные опции ppp. В нашем случае он будет иметь вид:

На этом настройка xl2tpd заканчивается. Перезапускаем процесс:

Приступаем к настройке пакетного фильтра (файрволла). Для удобства создадим скрипт «firewall.sh», в котором опишем все необходимые нам правила:

Применяем правила и сохраняем их для автоматической загрузки при старте системы:

Ещё надо включить саму возможность пересылки пакетов между интерфейсами. Делается это в файле «/etc/sysctl.conf» добавлением (или раскомментированием) строки:

Чтобы эти изменения вступили в силу до перезагрузки нужно выполнить:

Остаётся обезопасить SSH от попыток перебора пароля и можно заводить пользователей. За это отвечает сервис «denyhosts», который блокирует IP-адреса, с которых идёт перебор паролей. В целом конфигурация по умолчанию (находится в файле «/etc/denyhosts.conf») нас вполне устроит. Единственный момент который стоит поправить: по умолчанию адреса блокируются навсегда. Лучше всё-таки их удалять из чёрного списка через несколько дней после блокировки:

И перезапускаем сервис:

Теперь можно заводить пользователей нашего VPN-сервера. Для этого нужно открыть в текстовом редакторе файл «/etc/ppp/chap-secrets» и добавлять примерно такие строки:

На этом настройка сервера заканчивается и можно переходить к настройке клиентских устройств. На Android 7.0 нужно зайти в настройки VPN, выбрать пункт «добавить» и добавить соединение, указав тип соединения «L2TP/IPSec PSK», в качестве сервера указать IP-адрес нашей VPS, в качестве общего ключа IPsec — выбранную ранее ключевую фразу. Имя соединения — произвольное. Создав соединение сразу можно подключаться (потребуется ввести логин и пароль).

Следует помнить что на Android для использования штатного (встроенного в систему) VPN-клиента необходимо предварительно настроить блокировку экрана с помощью пароля, пин-кода, графического ключ, отпечатка пальца или какого-ещё доступного на вашем устройстве способа.

На Windows 10 настройки находятся в панели параметров: «Настройки сети», «VPN». Поля заполняются полностью аналогично Android. После чего так же можно сразу выполнять подключение.

На этом всё. Приятной работы!

Комментарии:

Осталось найти время проверить правильность написанного выше.
Какая часть написанного тебя смущает?:)

Anonymous 2018-06-18 22:22:48 (#)

Anonymous 2018-06-18 22:25:43 (#)

Попробовал вместо скрипта взять часть другой инструкции с iptables — заработало, но совершенно не обращает внимание на общий пароль, т.е. можно любой писать((
Это означает что у вас не работает IPSec. Т.е. L2TP работает, но без шифрования. Видно что-то у вас всё-таки настроено не так.

Собственно скорее всего у вас не «взлетел» strongswan. Потому и пришлось в iptables разрешать весь udp-трафик по порту 1701, а не только тот что с шифрованием. Так дело было?:)

Смотрите логи strongswan для начала.

Anonymous 2018-06-18 23:57:44 (#)

service strongswan restart корректно перезапустился, я так понимаю значит он работает. А где логи strongswan смотреть
Попробуйте:

не могу у вас на сайте авторизоваться «Notice: Undefined index: result in /home/moose/www/ylsoftware.com/enter.inc on line 25»
Каюсь. Косяк в коде. Исправил. Если сейчас не получится авторизоваться то напишите на moose@ylsoftware.com. Будем разбираться детальнее.

Anonymous 2018-06-26 08:37:46 (#)

# journalctl -xe -u strongswan.service
Jun 22 03:45:26 vps46396 ipsec_starter[3295]: ### 4 parsing errors (0 fatal) ###
Jun 22 03:45:26 vps46396 systemd[1]: Started strongSwan IPsec services.
— Subject: Unit strongswan.service has finished start-up
— Defined-By: systemd
— Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

— Unit strongswan.service has finished starting up.

— The start-up result is done.
Jun 22 03:45:26 vps46396 charon[3310]: 00[DMN] Starting IKE charon daemon (stron
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading ca certificates from ‘/et
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading aa certificates from ‘/et
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading ocsp signer certificates
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading attribute certificates fr
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading crls from ‘/etc/ipsec.d/c
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading secrets from ‘/etc/ipsec.
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loaded IKE secret for %any %any
Jun 22 03:45:26 vps46396 charon[3310]: 00[LIB] loaded plugins: charon test-vecto
Jun 22 03:45:26 vps46396 charon[3310]: 00[LIB] dropped capabilities, running as
Jun 22 03:45:26 vps46396 charon[3310]: 00[JOB] spawning 16 worker threads
Jun 22 03:45:26 vps46396 ipsec_starter[3309]: charon (3310) started after 20 ms
Jun 22 03:45:26 vps46396 charon[3310]: 07[CFG] received stroke: add connection ‘
Jun 22 03:45:26 vps46396 charon[3310]: 07[CFG] added configuration ‘l2tpvpn’
lines 80-102/102 (END)
Jun 22 03:45:26 vps46396 ipsec_starter[3295]: ### 4 parsing errors (0 fatal) ###
Jun 22 03:45:26 vps46396 systemd[1]: Started strongSwan IPsec services.
— Subject: Unit strongswan.service has finished start-up
— Defined-By: systemd
— Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel

— Unit strongswan.service has finished starting up.

— The start-up result is done.
Jun 22 03:45:26 vps46396 charon[3310]: 00[DMN] Starting IKE charon daemon (strongSwan 5.3.5, Linux 2.6.32-042stab127.2, x86_64)
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading ca certificates from ‘/etc/ipsec.d/cacerts’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading aa certificates from ‘/etc/ipsec.d/aacerts’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading ocsp signer certificates from ‘/etc/ipsec.d/ocspcerts’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading attribute certificates from ‘/etc/ipsec.d/acerts’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading crls from ‘/etc/ipsec.d/crls’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loading secrets from ‘/etc/ipsec.secrets’
Jun 22 03:45:26 vps46396 charon[3310]: 00[CFG] loaded IKE secret for %any %any
Jun 22 03:45:26 vps46396 charon[3310]: 00[LIB] loaded plugins: charon test-vectors aes rc2 sha1 sha2 md4 md5 random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp agent xcbc h
Jun 22 03:45:26 vps46396 charon[3310]: 00[LIB] dropped capabilities, running as uid 0, gid 0
Jun 22 03:45:26 vps46396 charon[3310]: 00[JOB] spawning 16 worker threads
Jun 22 03:45:26 vps46396 ipsec_starter[3309]: charon (3310) started after 20 ms
Jun 22 03:45:26 vps46396 charon[3310]: 07[CFG] received stroke: add connection ‘l2tpvpn’
Jun 22 03:45:26 vps46396 charon[3310]: 07[CFG] added configuration ‘l2tpvpn’

Anonymous 2018-07-12 22:52:31 (#)

По авторизации: починил. При обновлении MySQL произошли изменения, из-за которых один запрос некорректно отрабатывал.

По срокам ответа: этот проект моё хобби, а не работа. Я занимаюсь им в личное время, которого, к сожалению, не так уж много. Быстрой реакции стоит искать у тех, кому за это платят:)

По логу: с виду всё нормально. Покажите вывод:

Anonymous 2018-08-22 13:08:33 (#)

Вот в этом снипплете опечатка, из-за которой не работает:

Если IP прописан — всё ок, если нет — то ой.
Там последняя строчка должна выглядеть вот так (для выдачи динамического адреса):

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Семейство операционных систем mac os
  • Секундомер для mac os
  • Секреты терминала в mac os x
  • Секреты mac os sierra
  • Секвенсор для mac os