# Практика №6. OpenVPN L2 - туннелирование
## Задание к практической работе №6
- Построить инфраструктуру в системе pnet
- Организация OpenVPN L2 тоннеля вовнутрь инфраструктуры
---
## Выполнение практической работы
### Построить инфраструктуру в системе pnetlab
Начиная с практической работы №5 работы, все пользователи и устройства были переименованы, чтобы соотвествовать требованиям преподавателя по идентификации учеников. Выбор пал на имя, которое установлено на родном ноутбуке.
При выполнении данного пункта было решено модифицировать инфраструктуру из предыдущей практики №4. На устройствах pfSense и Switch сохраняются VLAN 10 и VLAN 20 c сетями 172.16.10.0/24 и 172.16.20.0/24 соотстветсвенно. SecretDebianOlezhi с предыдущей практики является "мостовым" устройством, чужим во внутренней инфраструктуре. Через него и будем проводить L2 тоннель OpenVPN вовнутрь инфраструктуры.

**OpenVPN L2** (уровень 2) используется для создания виртуального частного сетевого соединения между двумя удаленными сетями на уровне канального уровня (уровень 2) модели OSI. Это означает, что OpenVPN L2 создает виртуальный Ethernet-мост между двумя удаленными сетями, позволяя устройствам, подключенным к этому мосту, обмениваться данными напрямую, так как они будто бы находятся в одной локальной сети.
Когда клиентское устройство подключается к серверу OpenVPN L2, оно получает виртуальный Ethernet-адаптер (TAP-интерфейс) и IP-адрес из IP-подсети сервера. Далее, клиентское устройство может обмениваться данными с другими устройствами, подключенными к этой же IP-подсети через виртуальный Ethernet-мост.
OpenVPN L2 использует протокол Ethernet для передачи данных между устройствами, поэтому он поддерживает все протоколы и приложения, работающие на канальном уровне модели OSI, такие как ARP, DHCP, NetBIOS, и т.д.
:::danger
**!!ВАЖНОЕ ЗАМЕЧАНИЕ!!**
После закрытия лабаторной работы IP некоторых устройств менются, поэтому неудивительно, что на некоторых скриншотах разные IP одних и тех же устройств!
:::
### Организация OpenVPN L2 тоннеля вовнутрь инфраструктуры
Сохраним настройки уровня l3 с предыдущей практики, скопировав их в отдельный файл, поскольку для l2 нам будет необходимо поменять некоторые параметры.
```
cp server.conf server.conf.l3
```

Открываем server.conf для редактирования.

Здесь нам необходимо всего лишь сменить tun интерфейс на tap.
> **tun и tap** -- это виртуальные сетевые интерфейсы в Linux, которые используются для реализации виртуальных частных сетей (VPN) и других сетевых приложений.
>
> **tun** (название происходит от "tunnel") интерфейс используется для создания p2p соединения между двумя сетями. Он работает на уровне сетевого уровня (Layer 3) и используется для маршрутизации пакетов между виртуальными сетями. TUN-интерфейс может быть использован для создания VPN-соединений, а также для реализации других сетевых приложений, таких как динамический маршрутизатор или мост между сетями.
>
> **tap** (название происходит от "tap-bridge") интерфейс, в отличие от tun, работает на уровне канального уровня (Layer 2) и используется для создания Ethernet-соединений между виртуальными машинами или между виртуальными машинами и хост-системой. tap-интерфейс может быть использован для создания моста между виртуальными машинами и физической сетью, а также для реализации других сетевых приложений, таких как симулятор сетевого устройства.

Перезапускаем сервис openvpn, чтобы задействовать изменения.
```
service openvpn restart
```

Далее необходимо поставить OpenVPN на "мостовой" дебиан SecretDebianOlezhi.
```
apt install openvpn
```

Необходимо передать файл client.ovpn из 5 практики, но не забудем, что там тоже следует изменить настройки. Сделаем это позже.
Для передачи используем всё тот же scp.
```
scp olezha@192.168.192.131:/home/olezha/client.ovpn ./client.conf
```
Убедимся, что файл передался, вписав `ls` и увидев его в списке.

Перенесём его в новообразовавшуюся после установки папку openvpn.
```
mv client.conf /etc/openvpn/
```

Наконец мы подошли к изменениям в данной файлике. Тут так же необходимо поменять tun интерфейс на tap.

Вводим изменения, чтобы соединение присходило на уровне L2.

И вновь перезапускаем сервис openvpn.

Если на данном моменте что-то пошло не так и интерфейс не поднялся, как было у меня, необходимо ещё прописать `service networking restart`, которая перезапускает сетевую службу и перезагружает сетевые интерфейсы, и `reboot`, чтобы система перезагрузилась самостоятельно.
В том числе надо удалить оставшиеся следы от l3, а точнее файл client, который мы прописывали для добавления IP-адресов сетей в таблицу маршрутизации.

И опять перезапускаем службу openvpn..

После этого можем удачно наблюдать, как поднялся tap0-тоннель.

Необходимо добавить его в конфигурацию интерфейсов на SecretDevianOlezhi. Для этого откроем файл `/etc/network/interfaces` и допишем в него:
```
auto tap0
iface tap0 inet manual
```
Также не забываем указать его как часть моста br0 и перезапускаем сетевую службу.
```
service networking restart
```



Вернёмся на Kali Linux и просмотрим, появился ли tap0 там. Да, всё создалось как надо.

Пробуем прослушать tap0 на всю входящую/выходящую информацию. Ничего интересного на нём найдено не было (логично, поскольку в сети ничего и не происходит).


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

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

Он отлично пингуется. Заходим на веб-интерфейс фаекрвола и видим то же подтверждение, что и раньше: мы часть локальной сети с IP 192.168.1.105.

Для пинга устройства необходимо знать его IP с помощью ipconfig. Получаем 172.16.20.102.

Как видно ниже, VLAN данный l2 тоннель в том числе обходит.

Таким образом, на основе 5 практики, сервер OpenVPN был скорректирован для работы с уровнем L2 вместо L3, и нам вновь удалось проникнуть в инфраструктуру, но используя технологии OpenVPN.