# 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...**:

В разделе **Network Connections** нажимаем на "**Add**":

В появившемся окне нажимаем на просмотр предлагаемых типов подключений и выбираем **Layer 2 Tunneling Protocol (L2TP).**

В поле **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 соединении).

Далее выбираем пункт **PPP Settings..**
Ставим галочку на пункте **Use Point-to-point encryption(MPPE).** И в поле **Security** выбираем **128-bit most secure.**
В разделе **Misc** устанавливаем значения **MTU** и **MRU** в 1410.

Нажимаем **OK** и переходим в **IPSec Settings**. В **Pre-shared key** указываем фразу из `/etc/ipsec.secrets`. Для нашего примера данной фразой будет `private`.

После чего нажимаем **Ok** и **Save**. Настройка клиента завершена.
Кликаем на иконку сетевых подключений вверху и выбираем **VPN Connections**, наводим курсор и выбираем созданное нами правило. При успешном подключении в верхней строке состояния подключения должен появиться значок с замком.
