---
# System prepended metadata

title: L2TP over IPSec
tags: [VPN]

---

# 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)
