L2TP-соединение - что это такое? Как настроить L2TP-соединение. Запуск VPN -подключения. Windows: Сетевые ошибки RAS

Руководство по настройке VPN сервера IPSEC L2TP

  • Установка осуществляется на сервер под управлением CentOS 6
  • В качестве клиентов могут выступать операционные системы поддерживающие IPsec/L2tp (Mac OS, Android, Windows, Ubuntu )
  • Используемые порты, которые следует открыть на файрволе 1701/TCP , 4500/UDP и 500/UDP

Перед началом установки немного разъяснений о том, почему я выбрал стек IPSec/L2TP и для чего нам понадобится xl2tpd и ppp .

IPSec шифрует пакеты для обеспечения шифрования и аутентификации, чтобы никто не смог расшифровать или подделать данные между клиентами и сервером.
L2TP обеспечивает туннель для передачи данных, он ни в коем случае не обеспечивает шифрование и аутентификацию.
xl2tpd используется как демон L2TP и ppp для обеспечения аутентификации соединения.

Установка Epel

Поскольку в релизе OpenSwan из EPEL 6.8 существует баг , то нам необходимо выполнить даунгрейд пакета или установить вручную.

Скачиваем необходимые пакеты: i686 , x86_64

В sysctl.conf добавим следующие строчки

%SERVERIP% - IP-адрес VPN сервера.
Вышеуказанные строчки необходимо добавить до строки exit 0

Конфигурация Openswan (IPSEC)

nano /etc/ipsec.conf
version 2 # conforms to second version of ipsec.conf specification

config setup
dumpdir=/var/run/pluto/
#in what directory should things started by setup (notably the Pluto daemon) be allowed to dump core?

nat_traversal=yes
#whether to accept/offer to support NAT (NAPT, also known as "IP Masqurade") workaround for IPsec

virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v6:fd00::/8,%v6:fe80::/10
#contains the networks that are allowed as subnet= for the remote client. In other words, the address ranges that may live behind a NAT router through which a client connects.

protostack=netkey
#decide which protocol stack is going to be used.

force_keepalive=yes
keep_alive=60
# Send a keep-alive packet every 60 seconds.

conn L2TP-PSK-noNAT
authby=secret
#shared secret. Use rsasig for certificates.

pfs=no
#Disable pfs

auto=add
#the ipsec tunnel should be started and routes created when the ipsec daemon itself starts.

keyingtries=3
#Only negotiate a conn. 3 times.

ikelifetime=8h
keylife=1h

ike=aes256-sha1;modp1024!
phase2alg=aes256-sha1;modp1024
# specifies the phase 1 encryption scheme, the hashing algorithm, and the diffie-hellman group. The modp1024 is for Diffie-Hellman 2. Why "modp" instead of dh? DH2 is a 1028 bit encryption algorithm that modulo"s a prime number, e.g. modp1028. See RFC 5114 for details or the wiki page on diffie hellmann, if interested.

type =transport
#because we use l2tp as tunnel protocol

left=%SERVERIP%
#fill in server IP above

leftprotoport=17/1701
right=%any
rightprotoport=17/%any

dpddelay=10
# Dead Peer Dectection (RFC 3706) keepalives delay
dpdtimeout=20
# length of time (in seconds) we will idle without hearing either an R_U_THERE poll from our peer, or an R_U_THERE_ACK reply.
dpdaction=clear
# When a DPD enabled peer is declared dead, what action should be taken. clear means the eroute and SA with both be cleared.

Общий пароль

Общий пароль находится в файле /etc/ipsec.secrets .
Убедитесь в его надежности, также не забудьте изменить IP-адрес на свой.

%SERVERIP% %any: PSK "357xCT1h2QY8+059k2eHZdaL3eogoTM8jHyzCF2kQxr6Zn4+PGmvuEILJMW8fP63"

Проверка

Запускаем проверку

ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path
Linux Openswan U2.6.32/K2.6.32-573.7.1.el6.x86_64 (netkey)
Checking for IPsec support in kernel
SAref kernel support
NETKEY: Testing for disabled ICMP send_redirects
NETKEY detected, testing for disabled ICMP accept_redirects
Checking that pluto is running
Pluto listening for IKE on udp 500
Pluto listening for NAT-T on udp 4500
Two or more interfaces found, checking IP forwarding
Checking NAT and MASQUERADEing
Checking for "ip" command
Checking /bin/sh is not /bin/dash
Checking for "iptables" command
Opportunistic Encryption Support

Если много ошибок - проверяем, запущен ли сервис ipsec , если нет, то запускаем

  • force userspace = из-за ошибки, по которой мы вынуждены были сделать даунгрейд Ipsec ;
  • ip range = Диапазон IP-адресов, который будет назначен клиентам;
  • local ip = IP адрес VPN сервера;
  • refuse pap = отключаем pap-аутентификацию;
  • ppp debug = yes - когда тестируем, no в продакшн.

Локальные пользователи (PAM авторизация//etc/passwd)

Чтобы использовать локальные учетные записи пользователей для авторизации через PAM (или /etc/passwd) и, таким образом, не использовать пароли пользователя в открытом виде в текстовом файле, необходимо выполнить следующее:

В файле конфигурации /etc/xl2tpd/xl2tpd.conf добавим

В файле /etc/ppp/options.xl2tpdz убедимся, что отсутствует строка (ниже говорится добавить его, но если хотим использовать UNIX аторизацию, то удаляем)

Файл /etc/pam.d/ppp приводим к следующему виду:

Конфигурация PPP

Редактируем конфигурационный файл /etc/ppp/options.xl2tpd

Проверка

Перезапускаем сервисы и проверяем

/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart

Сегодня подключения к интернету по локальной или виртуальной сети на основе беспроводных технологий стали очень популярными и среди обычных пользователей, и среди корпоративных клиентов. Неудивительно, ведь при установке такого защищенного соединения обеспечивается наилучшая защита передаваемых и принимаемых данных, а проще говоря, исходящего и входящего трафика. Одним из самых распространенных типов можно назвать использование протокола L2TP-соединения. Что это такое и как настроить соединение на его основе самостоятельно, далее и предлагается разобраться. Принципиально ничего такого, что бы отличалось от создания обычного подключения на основе беспроводных технологий, тут нет, однако многие специалисты советуют соблюсти несколько условий и принять к сведению некоторые рекомендации, чтобы избежать типичных ошибок.

L2TP-соединение: что это?

Для начала рассмотрим, что собой представляет данный или по сети с использованием именно такого типа доступа. На самом деле протокол L2TP является одной из разновидностей установки доступа в интернет на основе VPN с применением так называемого туннелирования.

При подключении компьютеров к интернету таким способом обеспечивается максимально возможная конфиденциальность. И достигается это не только потому, что доступ к туннелю блокируется, но и потому, что все данные на входе и на выходе шифруются. Плюс ко всему - наличие проверочных ключей с обеих сторон. Иными словами, не зная автоматически генерируемых ключей, украсть или просмотреть информацию никто не может. К тому же, как уже понятно, она находится в зашифрованном виде.

Обязательные условия для работы подключения

Но это были всего лишь краткие теоретические сведения, так сказать, для общего развития. Теперь перейдем к практическим действиям и рассмотрим использование L2TP-соединения. Что это за технология, думается, немного понятно, так что основные действия по созданию такого подключения от стандартной практически ничем отличаться не будут.

Однако перед тем, как заниматься подобными действиями, обратите внимание на несколько обязательных пунктов, без соблюдения которых создаваемое подключение не то что работать не будет, его даже создать не получится. Основные критерии таковы:

  • операционная система не ниже Windows Vista (рекомендуется), хотя в XP настройка тоже возможна;
  • наличие адреса корпоративного сервера, к которому предполагается произвести подключение;
  • наличие логина и пароля для входа в сеть.

Начальный этап создания соединения

Итак, сначала необходимо войти в «Центр управления сетями и общим доступом» (вызвать данный раздел можно либо из стандартной «Панели управления», либо через меню ПКМ на значке сети в системном трее (слева от часов и даты).

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

Далее вопрос о том, как настроить L2TP-соединение, предполагает выбор отложенного подключения, а не немедленной установки связи (такое действие рекомендовано, но обязательным не является, и единого решения по этому поводу нет).

На следующем этапе будьте особо внимательны, поскольку точность ввода адреса сервера здесь играет первостепенную роль. Вписываете адрес, вводите произвольное название нового соединения (тип местоназначения), после чего в чекбоксе ставите флажок на запоминание введенных данных (это избавит вас от постоянного ввода информации при последующих входах). Далее просто нажимаете кнопку создания подключения, после чего оно появится в разделе сетевых настроек и в системном трее.

типа VPN

Теперь самое главное. Новое подключение вроде бы и создано, но без дополнительных настроек работать оно может некорректно.

Используйте свойства соединения через меню ПКМ, а затем на вкладке безопасности для типа соединения L2TP выберите одноименный протокол с IPsec (уровень защиты). Это тоже обязательный параметр. Все остальные настройки, предлагаемые к использованию по умолчанию, в принципе, можно оставить без изменений.

Иногда на некоторых нестандартных моделях маршрутизаторов нужно будет в параметрах веб-интерфейса указать тип соединения PPTP L2TP, однако при использовании обычных роутеров и ADSL-модемов такие действия не требуются.

Возможные ошибки и сбои

Что же касается появления ошибок и сбоев при установке подключения к интернету через созданное соединение, тут проблем может быть сколько угодно. Самая главная состоит в обычной невнимательности пользователя, который просто неправильно вписал адрес сервера или ввел недействительные логин и пароль.

Второй момент, на который следует обратить внимание, - свойства протокола IPv4. В его параметрах и настройках в обязательном порядке должно быть указано автоматическое получение всех адресов, включая и IP, и DNS. Кроме того, для локальных адресов должно быть отключено использование прокси. Имейте в виду, что со статическими IP беспроводные технологии работать не хотят. Единственный вариант - подключение нескольких терминалов, объединенных в локальную или виртуальную сеть через один L2TP-сервер (в этом случае логины и пароли присваиваются каждой машине).

Наконец, если и при такой постановке вопроса возникают ошибки, попробуйте использовать бесплатные DNS-адреса для предпочитаемого и альтернативного сервера, предоставляемые, например, Google (сочетания четверок и восьмерок).

Вместо послесловия

Вот, собственно, и все, что касается L2TP-соединения. Что это за технология и как установить соответствующее подключение, думается, уже понятно. Если внимательно посмотреть на практические действия, все они представляют собой стандартную процедуру создания VPN-подключения. Разница состоит только в том, что обязательно нужно указать адрес соответствующего сервера и выбрать протокол с предпочитаемым уровнем защиты. Настройки маршрутизаторов в данном материале не рассматривались принципиально, поскольку в большинстве случаев можно обойтись и без их изменения.

Многие операционные системы поддерживают L2TP/IPsec VPN "из коробки". Объединяя сервисы конфиденциальности и аутентификации IPsec (безопасность Интернет-протокола), сетевое туннелирование протокола туннелирования второго уровня (L2TP) и идентификацию пользователя через pppd, администраторы могут создавать VPN-сети на множестве разнородных систем. Это позволяет настроить VPN на Android, Windows, Linux, MacOS и других операционных системах без использования какого-либо коммерческого ПО.

Введение

IPsec/L2TP – повсеместно используемый VPN протокол, применяемый в Windows и других операционных системах. Все версии Windows, начиная с Windows 2000, имеют встроенную поддержку этого протокола и не требуют сторонних клиентов (например, OpenVPN), что делает его более удобным. Однако, значительно сложнее настроить серверную сторону на Linux, поскольку задействованы как минимум 3 слоя: IPsec, L2TP и PPP.

  1. IPsec обеспечивает конфиденциальность сетевого соединения и авторизации клиента (системы)
  2. С L2TP туннель настроен так, что VPN трафик прозрачно проходит через IPsec
  3. PPP (протокол точка-точка) контролирует авторизацию пользователей

Это руководство не охватывает установку DHCP, RADIUS, Samba или Инфраструктуры Открытых Ключей (PKI). Оно также совсем не объясняет, как настраивать Linux-клиентов, хотя этот шаг может быть довольно легко получен из руководства. Будет освещена часть конфигурации Windows-клиентов с целью устранения неполадок в настройке сервера.

Условные обозначения

В этом руководстве будут использованы следующие условные обозначения (пример настроек):

  • Домен – example.com
  • Имя сервера – vpn.example.com
  • Имя файла сертификата CA – ca.crt
  • Сертификат сервера – vpn.example.com.crt
  • Ключ сервера – vpn.example.com.key
  • Сертификат клиента – client.example.com.crt
  • Ключ клиента – client.example.com.key

IPsec

Первый и самый сложный уровень для настройки – IPsec. Заметим, что IPsec – одноранговая сеть, таким образом, в её терминологии клиент называется инициатор , а сервер ответчик .

Windows использует IKEv1. Существуют 3 реализации IPsec в Portage: ipsec-tools (racoon), LibreSwan и strongswan.

В следующих разделах объясняются различные конфигурации. Для каждого варианта документируется

  • как использовать PSK для авторизации и
  • как использовать сертификаты для авторизации

Выберете один из вариантов (PSK или сертификаты). При использовании авторизации на основе сертификата предполагается, что нужные сертификаты уже доступны.

Вариант 1: ipsec-tools (racoon)

root # emerge --ask net-dialup/pptpd

Авторизация

Без авторизации

Самый простой путь настройки pppd – вообще не использовать авторизацию. В этом случае, убедитесь что указан "noauth". Это может оказаться полезным с целью тестирования, но в противном случае не рекомендуется, особенно с использованием PSK. Для некоторых установок PKI, такая конфигурация может быть благоразумной, например,

  • все клиентские компьютеры полностью доверены и находятся под контролем, или
  • все пользователи доверены и ключи есть только на компьютерах рядом с самими пользователями, имеющими доступ, и нигде более, или
  • все соединения являются автоматическими (этот метод используется для подключения нескольких мест)

Авторизация через chap.secrets

Для небольших пользователей (обычно тех, кто хочет подключаться к своей домашней сети в другом месте), авторизация может быть произведена через файл chap.secrets :

Файл /etc/ppp/chap-secrets

Предупреждение
/etc/ppp/chap-secrets содержит незашифрованные пароли, поэтому убедитесь, что только root может выполнять чтение или запись в этот файл

Авторизация через Samba

Если компьютер является частью домена Microsoft или леса Active Directory, а клиенты используют winbind, то авторизацию может выполнять Samba. Добавьте plugin winbind.so к опциям ppp. Настройка Samba и pppd находится за пределами этого руководства.

Авторизация через RADIUS

Если на компьютере запущен сервер RADIUS, то pppd может использовать его. Убедитесь, что net-dialup/ppp собран с USE-флагом radius . Затем добавьте plugin radius.so к опциям PPP. Настройка RADIUS и pppd находится за пределами этого руководства.

Авторизация через EAP-TLS

Если у пользователя есть сертификаты (не такие, как сертификаты компьютера, о которых говорилось раньше), тогда настройте pppd для авторизации через EAP-TLS. Рекомендуется, чтобы пользователи авторизовались с помощью смарт-карт или RSA secureID. Убедитесь, что net-dialup/ppp собран с USE-флагом eap-tls . Требуется, чтобы был настроен RADIUS (см. выше). Может потребоваться включить require-eap в файл опций PPP. Настройка pppd выходит за пределы этого руководства.

Устранение неполадок клиента

Windows: Правильная установка сертификата (для пользователей PKI)

Сертификат должен быть запакован в пакет PKCS12. Это может быть сделано посредством openssl или gnutls:

user $ openssl pkcs12 -export -certfile ca.crt -inkey client.example.com.key -in client.example.com.crt -out client.example.p12

user $ certtool --load-ca-certificate ca.crt --load-certificate client.example.com.crt --load-privkey client.example.com.key --to-p12 --outfile client.example.com.p12

Когда создан файл .p12 , импортируйте его в Windows. Однако, способ не очевиден. Не надо дважды щёлкать по ключу и следовать инструкциям, это не будет работать. Ключ будет импортирован в личное хранилище сертификатов, но в Windows в авторизации нуждается локальный компьютер, таким образом сертификат должен быть добавлен в хранилище ключей локального компьютера. Для этого используйте Консоль управления Microsoft (MMC). Для работы требуются привилегии администратора.

Код Импорт ключа в Windows

Пуск -> Выполнить -> mmc Файл -> Добавить или удалить оснастку... -> Сертификаты -> Добавить учетной записи компьютера -> локальным компьютером -> Готово -> OK.

Разверните Сертификаты. Выберете любую папку (без разницы какую), щёлкните правой кнопкой мыши, выберете "Все задачи", затем "Импорт...". Только сейчас следуйте указаниям мастера, но на последнем шаге убедитесь, что выбрано "Автоматически выбрать хранилище на основе типа сертификата".

Windows: Сетевые ошибки RAS

Ошибка 766: Сертификат не может быть найден

Если происходит такая ошибка, значит сертификат не был правильно импортирован. Убедитесь, что импортировали его через MMC, а не двойным щелчком файла.

Ошибка 810: VPN соединение не завершено

При использовании ipsec-tools (racoon) в системном логе может появится следующее сообщение:

Код Сообщение об ошибке в системном логе при использовании ipsec-tools/racoon

ERROR: ignore information because ISAKMP-SAhas not been established yet.

Это значит, что сертификат был неправильно импортирован, или пакет p12 отсутствует в сертификате ЦС. Убедитесь, что импортировали ключ через MMC и выбрали "Автоматически выбрать хранилище на основе типа сертификата" в конце процесса импорта.

XP SP2 и выше: Ошибка 809: Сервер не отвечает (Сервер за NAT)

Windows XP SP2 и Vista умолчанию не будут подключаться к серверу за NAT . Требуется взлом реестра. Отдельные исправления требуются для Windows XP и Windows Vista.

Vista: Ошибка 835 Невозможно авторизоваться

Эта ошибка появляется только при использовании PKI. Она значит, что subjectAltName не соответствует серверу, к которому подключается клиент. Такое часто случается при использовании динамического DNS, – сертификат имеет внутреннее имя, а не внешнее. Добавьте к сертификату внешнее имя или отключите опцию "Проверить атрибуты имени и использования у сертификата сервера" в настройках соединения: Безопасность -> Дополнительные параметры -> L2TP.

Ошибка 741: Локальный компьютер не поддерживает требуемый тип шифрования

Windows будет пытаться реализовать MPPE (слабое) шифрование, когда

  • система не использует авторизацию PPP, или
  • система не имеет pppd с поддержкой MPPE, или
  • MPPE поддерживается, но не скомпилировано с ядром (или как модуль)

тогда происходит данная ошибка.

Если используется авторизация PPP, рекомендуется исправить pppd или ядро (с минимальными изменениями конфигурации), даже если нет смысла в двойном шифровании. Если система не использует авторизацию PPP, или двойное шифрование однозначно не требуется, тогда отключите его на вкладке Безопасность.

Заметка
Соединение всё же так или иначе защищено шифрованием IPsec, отключится только потребность в MPPE.

Mac OS X

Mac OS X клиенты должны быть требовательны к рекомендациям, с которыми они соглашаются. В частности:

  • dh_group должен быть modp1024 .
  • my_identifier должен быть адресом, а не полным именем домена (адрес используется по умолчанию, таким образом просто уберите эту строку из racoon.conf ).

Mac OS X не будет подключаться, если subjectAltName не соответствует имени сервера, с которым он соединяется. В отличие от Vista, эта проверка не может быть отключена.

Также, Mac OS X не подключится, если сертификат сервера содержит поля "Расширенное использование ключа" (EKU) (кроме устаревших ikeIntermediate). В частности, при использовании сертификатов из утилиты easy-rsa OpenVPN , добавляются EKU "TLS WWW Сервер" или "TLS WWW Клиент", поэтому такие сертификаты не будут работать. Однако, они всё же могут быть использованы Mac OS X клиентом, поскольку его интересуют только сертификаты сервера.

Ссылки

  • a Linux L2TP/IPsec VPN server от Jacco de Leeuw

Некоторые важные особенности смотрите в конце страницы!

1. Откройте Центр уведомлений в правом нижнем углу экрана:

3. В открывшемся окне Параметры во вкладке VPN нажмите на кнопку Добавление VPN-подключения :

4. В окне Добавить VPN-подключение заполните следующие параметры:

Поставщик услуг VPN: Windows (встроенные)

Имя подключения: VPNki

Имя или адрес подключения: сайт

Тип VPN: Протокол PPTP (либо Протокол L2TP/IPSec )

Тип данных для входа: Имя пользователя и пароль

Имя пользователя и пароль: полученные в системе vpnki (например userXXX)

7. Нажмите правой кнопкой мыши на адаптер VPNki и выберите Свойства :

8. Выберите в списке IP версии 4 (TCP/IPv4) и нажмите кнопку Свойства :

9. Оставьте получение IP-адреса и адреса DNS-сервера автоматически и нажмите кнопку Дополнительно :

10. Во вкладке Параметры IP Снимите галочку с Использовать основной шлюз в удаленные сети и нажмите кнопку OK

Разрешить следующие протоколы и оставьте только Протокол проверки пароля (CHAP)

12. (Только для L2TP) нажмите кнопку Дополнительные параметры и выберите

Для проверки подлинности использовать общий ключ и введите ключ: vpnki


13. На этом настройка завершена, нажмите кнопку Подключиться и при успешном подключении

состояние VPNki должно измениться на Подключено

14. Если вам необходимо иметь подключение к удаленной домашней сети (например 192.168.x.x/x), то необходимо сообщить Windows о том, что адреса вашей удаленной сети следует искать в VPN туннеле.

Это можно сделать двумя способами:

Добавив сети 192.168.x.x/x (ваша удаленная сеть) и 172.16.0.0/16 (сеть VPNKI) в таблицу маршрутов при помощи команды route add

При помощи поступления данных с сервера по протоколу DHCP

Прежде чем сделать выбор вам очень желательно ознакомиться с этой инструкцией и пройти ее до конца.

Особенность 1

Для использования соединения с шифрованием вам необходимо в настройках соединения:
- использовать авторизацию MS-CHAPv2 и указать что будет использоваться шифрование (MPPE)

Для соединения без шифрования вам необходимо:
- использовать авторизацию CHAP и указать, что шифрование использоваться не будет .

Будьте внимательны,
все иные сочетания методов авторизации и шифрования будут приводить к неработоспособности подключения!!!

Особенность 2

Работа протокола PPTP осуществляется с использованием протокола GRE, с которым у некоторых интернет провайдеров России имеются технические сложности. Эти сложности не позволят вам использовать PPTP для построения VPN туннлей. К таким провайдерам относятся МГТС (Московская городская телефонная сеть), Yota, Мегафон. Однако, такая ситуация не во всех частях их сетей.

Для пользователя ситуация будет выглядеть так, что проверка имени пользователя и пароля проходить не будут. Точнее до этого момента даже не дойдет...В пункте меню "События безопасности" вы будете видеть начало успешного подключения и последней будет являться фраза, говорящая о том, что мы готовы проверять имя и пароль, но...

Access granted. No whitelist is set for user. Ready to check username / password.

Отсуствие соединения и дальнейших записей в логе (при том, что вы твердо уверены в том, что логин и пароль верные), скорее всего, говорит о том, что GRE у вашего провайдера не пропускается. Можете погуглить на этот счет.

PS: В целях борьбы с зависшими сессиями мы принудительно отключаем пользовательские туннели с протоколами PPTP, L2TP, L2TP/IPsec через 24 часа после установления соединения. При правильной настройке соединения должны автоматически переустановиться.

Наша система будет работать с многими типами домашних и офисных маршрутизаторов. Более подробно смотрите в разделе по настройке оборудования, а начать настройку лучше с этого примера .

ДОПОЛНИТЕЛЬНО ПО ТЕМЕ

  • Немного более подробно про IP адреса можно прочитать на нашем сайте
  • Про выход в Интернет через VPN и центральный офис можно
  • Про VPN и протоколы можно почитать

Который позволял обеспечить защиту трафика при использовании небезопасных соединений с интернет. При всей простоте у 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 от перебора пароля;

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

Apt-get install strongswan xl2tpd iptables-persistent denyhosts

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

Config setup virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 nat_traversal=yes protostack=netkey conn l2tpvpn type=transport authby=secret pfs=no rekey=no keyingtries=1 left=%any leftprotoport=udp/l2tp leftid=@l2tpvpnserver right=%any rightprotoport=udp/%any auto=add

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

Service strongswan restart

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

Port = 1701 access control = no ipsec saref = yes force userspace = yes ; Файл с логинами и паролями auth file = /etc/ppp/chap-secrets ; Диапазон адресов, динамически выдаваемых клиентам; Мы ограничимся подсетью 172.28.253.64/26 ; Первую её часть оставим под статически привязанные к логинам адреса; А вторая - динамический пул ip range = 172.28.253.96-172.28.253.126 ; IP-адрес на стороне сервера local ip = 172.28.253.65 ; Это имя используется в качестве ipparam при поиске логинов и паролей в auth file name = l2tpserver ; Файл с дополнительными опциями для ppp 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

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

Noccp auth crtscts mtu 1410 mru 1410 nodefaultroute lock noproxyarp silent modem asyncmap 0 hide-password require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4

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

Service xl2tpd restart

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

#!/bin/bash # Внешний интерфейс сервера IF_EXT="ens3" # Внутренние интерфейсы (обслуживающие ВПН-клиентов) IF_INT="ppp+" # Сеть, адреса из которой будут получать ВПН-клиенты NET_INT="172.28.253.64/26" # Сбрасываем все правила iptables -F iptables -F -t nat # Устанавливаем политики по умолчанию iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP # Разрешаем весь трафик на петлевом интерфейсе iptables -A INPUT -i lo -j ACCEPT # Разрешаем всё для ВПН-клиентов iptables -A INPUT -i ${IF_INT} -s ${NET_INT} -j ACCEPT # Разрешаем входящие соединения к L2TP # Но только с шифрованием! iptables -A INPUT -p udp -m policy --dir in --pol ipsec -m udp --dport 1701 -j ACCEPT # Разрешаем IPSec iptables -A INPUT -p esp -j ACCEPT iptables -A INPUT -p ah -j ACCEPT iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT # Разрешаем доступ к серверу по SSH iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT # Разрешаем входящие ответы на исходящие соединения iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # NAT для локальной сети (ВПН-клиентов) iptables -t nat -A POSTROUTING -s ${NET_INT} -j MASQUERADE -o ${IF_EXT} iptables -A FORWARD -i ${IF_INT} -o ${IF_EXT} -s ${NET_INT} -j ACCEPT iptables -A FORWARD -i ${IF_EXT} -o ${IF_INT} -d ${NET_INT} -m state --state RELATED,ESTABLISHED -j ACCEPT

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

Bash firewall.sh netfilter-persistent save

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

Net.ipv4.ip_forward=1

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

Sysctl -p /etc/sysctl.conf

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

PURGE_DENY = 3d

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

Service denyhosts restart

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

# "логин" имя_сервиса(ipparam) "пароль" "IP-клиента(опционально)" # Пользователь с постоянным IP-адресом: "user1" l2tpserver "D4dLMy44gc" "172.28.253.67" # Пользователь, получающий динамический адрес "user2" l2tpserver "HPg0dBZRxv"

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

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

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

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