# L2TP over IPSec ## Подготовка Чтобы установить нужные пакеты L2TP-over-IPSec должен иметь выход в интернет, для этого нужно чтобы в лабораторной работе работал NAT и устройство имело следующие настройки (если вы используетет сервер уже расположенный в лабораторной работе, он подписан). > Скорее всего там, где расположен L2TP-over-IPSec не будет текстовой надписи с информацией о использующейся сети, вы можете использовать свою сеть, которой нет в лабораторной, для примера будет использоваться сеть 12.14.12.0/30. Также нужно будет прописать необходимые настройки (назначить ip на интерфейс, дополнить настройки маршрутизации) на подключенном Router. **При помощи редактора nano переходим в окно настройки сетевых интерфейсов:** ``` root@ubuntu:~# nano /etc/network/interfaces ``` **В открывшемся окне редактора изменяем и добавляем следующие строчки:** ``` # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 12.14.12.1 netmask 255.255.255.252 gateway 12.14.12.2 ``` - Далее нажимаем CTRL+O и ENTER - сохранение - CTRL+X - выход из режима редактирования **Также необходимо прописать DNS, чтобы это сделать нужно выполнить следующее:** ``` root@ubuntu:~# nano /etc/resolv.conf ``` **В открывшемся окне редактора изменяем и добавляем следующие строчки:** ``` nameserver 8.8.8.8 ``` - Далее нажимаем CTRL+O и ENTER - сохранение - CTRL+X - выход из режима редактирования **Перезапуск сетевых служб:** ``` root@ubuntu:~# service networking restart ``` **Просмотр ip-адреса:** ``` root@ubuntu:~# ip a ``` **Теперь нужно провести обновление, для этого делаем следующее:** ``` root@ubuntu:~# sudo apt update root@ubuntu:~# sudo apt upgrade ``` ## Установка L2TP over IPSec Вы можете выполнять команды от root-пользователя, в таком случае не нужно использовать sudo(во всех пунктах). Первым делом установим необходимые пакеты: Установим StrongSwan, демон IPSec с открытым исходным кодом, который мы настроим как наш VPN-сервер. Мы также установим компонент инфраструктуры открытого ключа, чтобы мы могли создать центр сертификации: ``` root@ubuntu:~# sudo apt-get install strongswan xl2tpd ``` ## Настройка L2TP over IPSec **Создадим раздел конфигурации для нашего VPN. Для этого добавим следующие строки в файл `/etc/ipsec.conf`:** ``` conn L2TP-IPSEC authby=secret rekey=no keyingtries=3 type=transport esp=aes128-sha1 ike=aes128-sha-modp1024 ikelifetime=8h keylife=1h left= # your router's external IP leftprotoport=17/1701 right=%any rightprotoport=17/%any rightsubnet=0.0.0.0/0 auto=add dpddelay=30 dpdtimeout=120 dpdaction=clear #force all to be nat'ed. because of iOS forceencaps=yes ``` >В строчке left вставляем наш внешний ip адрес. * **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. **Настроим Pre-Shared Key, чтобы можно было подключиться к нашему VPN. Заходим в `/etc/ipsec.secrets`:** ``` ip_address %any : PSK "your_psk" ``` >Вместо ip_address вставляем внешний ip адрес сервера. В кавычках прописываем любой Pre-Shared Key, например, "private". **Изменим файл `/etc/ppp/options.xl2tpd`:** ``` root@ubuntu:~# sudo nano /etc/ppp/options.xl2tpd ``` **Для этого добавим следующие строки в файл:** ``` require-mschap-v2 refuse-mschap ms-dns 8.8.8.8 ms-dns 8.8.4.4 asyncmap 0 auth crtscts idle 1800 mtu 1410 mru 1410 connect-delay 5000 lock hide-password local #debug modem name l2tp proxyarp lcp-echo-interval 30 lcp-echo-failure 4 ``` **Сохраняемся и выходим из файла. Далее открываем файл `/etc/xl2tpd/xl2tpd.conf`** **Общие настройки находятся в секции global:** ``` [global] ipsec saref = no debug tunnel = no debug avp = no debug network = no debug state = no access control = no rand source = dev port = 1701 auth file = /etc/ppp/chap-secrets ``` **Настройки сервера находятся в секции lns:** ``` [lns default] ip range = 192.168.1.10-192.168.122.20 local ip = 192.168.1.1 require authentication = yes name = l2tp pass peer = yes ppp debug = no length bit = yes refuse pap = yes refuse chap = yes pppoptfile = /etc/ppp/options.xl2tpd ``` **Сохраняем и закрываем файл.** * **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. ## Настройка пользователей **В файле** `/etc/ppp/chap-secrets`**:** ``` root@ubuntu:~# nano /etc/ppp/chap-secrets ``` **Указываются аутентификационные данные пользователей для CHAP аутентификации:** ``` # client server secret IP addresses username L2TPServer password * ``` * **username** - имя пользователя * **L2TPServer** - имя сервера * **password** - пароль пользователя * **“*”** - локальный ip будет выдаваться из пула адресов, указанного в файле `/etc/xl2tpd/xl2tpd.conf` ## Настройка форвардинга Очень важно включить форвардинг IP на L2TP over IPSec. Это позволит пересылать пакеты между публичным IP и приватными IP, которые были настроены при помощи L2TP. **Отредактируем /etc/sysctl.conf:** ``` root@ubuntu:~# nano /etc/sysctl.conf ``` **В открывшемся окне нужно найти следующую строчку** `#net.ipv4.ip_forward = 1` **, нужно ее раскомментировать, для этого удаляется символ** `#`. **Для применения изменений выполните команду:** ``` root@ubuntu:~# sudo sysctl -p ``` ## Создание NAT-правил для iptables Перед тем, как изменить этот файл, мы должны найти публичный интерфейс сети. **Для этого наберите команду:** ``` root@ubuntu:~# sudo ip route | grep default ``` Публичный интерфейс должен следовать за словом **dev**. Например, в нашем случае этот интерфейс называется `eth0`. **Далее перейдем к настройкам iptables:** ``` root@ubuntu:~# sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` **Далее нужно сохранить проделанные нами изменения. Воспользуемся утилитой** `iptables-persistent`**:** ``` root@ubuntu:~# sudo apt install iptables-persistent ``` > Во время установки в открывшихся диалогах нужно выбрать два раза **Yes**. **Сохраним настройки iptables:** ``` root@ubuntu:~# sudo netfilter-persistent save root@ubuntu:~# sudo netfilter-persistent reload ``` ## Перезапуск сервисов **Перезапускаем сервис xl2tpd и strongswan для применения новых настроек и смотрим состояние сервиса:** ``` root@ubuntu:~# service xl2tpd restart root@ubuntu:~# service xl2tpd status root@ubuntu:~# service strongswan restart root@ubuntu:~# service strongswan status ``` **Включаем на автозагрузку xl2tpd и strongswan:** ``` root@ubuntu:~# sudo systemctl enable xl2tpd root@ubuntu:~# sudo systemctl enable strongswan ``` ## Настройка клиентов > Нужно убедиться что на устройстве IPSec-L2TP-Client установлен linux-ubuntu-desktop-16.04.02. Если же установлен linux-ubuntu-server-16.04.02, то следует поменять на необходимую версию, иначе придется устанавливать дополнительные пакеты. > Примечание. По умолчание графическое окно линукс интерфейса маленького размера. Далее при добавлении VPN мы столкнемся с тем, что не все настройки будут помещаться на экране. Для увеличения разрешения остановим ноду. В ее конфигурации(правой кнопкой -> Edit) в пункте QEMU custom options меняем -vga std на -vga qxl. Нажимаем Save. **Для начала установим необходимые пакеты, для этого нужно убедиться, что у вас есть подключение к интеренету, открыть окно терминала и выполнить следующие команды:** ``` root@ubuntu:~# sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp root@ubuntu:~# sudo apt update root@ubuntu:~# sudo apt install network-manager-l2tp root@ubuntu:~# sudo apt install network-manager-l2tp-gnome ``` >**Если подключение к интернету отсутствует, можно настроить сетевые интерфейсы через консоль, пример есть выше, либо через окно настройки подключения.** Для подключения к VPN воспользуемся следующей инструкцией. Нажимаем на иконку подключений и выбираем **Edit Connections...**: ![Настройка](https://i.imgur.com/LcfECVr.png) В разделе **Network Connections** нажимаем на "**Add**": ![Добавление VPN](https://i.imgur.com/kPbfWnQ.png) В появившемся окне нажимаем на просмотр предлагаемых типов подключений и выбираем **Layer 2 Tunneling Protocol (L2TP).** ![Выбор L2TP](https://i.imgur.com/GsFKba0.png) В поле **Connection name** даем любое название VPN(к примеру "L2TP-over-IPSec"). В поле **Gateway** указываем IP-адрес VPN сервера. В лабораторной работе это адрес 12.14.12.1. В поле **User name** и **Password** вводим логин и пароль для пользователя, который мы указывали на сервере в файле `/etc/ppp/chap-secrets`. (Для ввода пароля нужно нажать на знак вопроса в поле Password и выбрать "Store the password for all users". В противном случае система будет запрашивать пароль при каждом VPN соединении). ![Ввод данных](https://i.imgur.com/HQj2F7n.png) Далее выбираем пункт **PPP Settings..** Ставим галочку на пункте **Use Point-to-point encryption(MPPE).** И в поле **Security** выбираем **128-bit most secure.** В разделе **Misc** устанавливаем значения **MTU** и **MRU** в 1410. ![PPP settings](https://i.imgur.com/JActMib.png) Нажимаем **OK** и переходим в **IPSec Settings**. В **Pre-shared key** указываем фразу из `/etc/ipsec.secrets`. Для нашего примера данной фразой будет `private`. ![IPSec Options](https://i.imgur.com/71b2Oxy.png) После чего нажимаем **Ok** и **Save**. Настройка клиента завершена. Кликаем на иконку сетевых подключений вверху и выбираем **VPN Connections**, наводим курсор и выбираем созданное нами правило. При успешном подключении в верхней строке состояния подключения должен появиться значок с замком. ![Подключение](https://i.imgur.com/NKueYgX.png)