# Практика №5. OpenVPN L3 - туннелирование Возьмем инфрастуктуру из четвртой практической работы и добавим еще одну линукс-машинку, которую подключим к свитчу. ![](https://i.imgur.com/GWEJM14.png) Так же с прошлой практики оставляем настройку моста br0 и интерфейсов ens3 и ens4 на Debian. Нужно обновить репозиторий на нашем устройстве - Kali Linux. ![](https://i.imgur.com/z1ng2CU.png) Далее нужно установить openvpn. Сделать это можно с помощью команды: `curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh` Затем нужно сделать этот файл исполняемым: `chmod +x openvpn-install.sh` ![](https://i.imgur.com/OtEOzRZ.png) Командой `sudo ./openvpn-install.sh` запустим скрипт для создания нашего собственного впн. ![](https://i.imgur.com/3eiiRwU.png) В качестве публичного ip укажем тот, который был присвоен Kali Linux. ![](https://i.imgur.com/yK9vj6B.png) Все остальные настройки оставляем поумолчанию. В качестве названия файла указываем имя client и создаем его без пароля. ![](https://i.imgur.com/frxoLLl.png) Файл успешно создался и находится в домашней директории. ![](https://i.imgur.com/DEIOkDo.png) Далее можно посмотреть открытые порты и убедиться, что все работает. ![](https://i.imgur.com/H1aZThp.png) Нужно изменить конфигурационный файл. Командой `sudo nano /etc/openvpn/server.conf` открываем файл через текстовый редактор и коментируем следующие три строки. **'dhcp-option DNS 94.140.14.14'** и **'dhcp-option DNS 94.140.14.14'** - преобразовывают доменные имена адресов. **'redirect-gateway def1 bypass-dhcp'** - в качестве gateway клиента нельзя будет установить gateway сервера. Перезагружаем openvpn, чтобы новые настройки применились. ![](https://i.imgur.com/0kb0902.png) Далее переходим в настройки файла клиента. ![](https://i.imgur.com/GrmdjX2.png) Изименяем конфигурационный файл и сохраняем его. **explicit-exit-notify** - посылает уведомление об отключении от сервера vpn. **setenv optblock-outside-dns** - устанавливает переменную среды **Windows 10 DNS leak** - предотвращает утечку активности пользователя Windows 10. **ignore-unknown-option block-outside-dns** -обеспечивает безопасное подключение и позволяет принимать настройки DNS только от сервера. ![](https://i.imgur.com/vgXZuNx.png) Затем переходим к клиенту Linux-OpenVPN и с помощью команды `nano /etc/network/interfaces` открываем настройки интерфейсов и настраиваем интерфейс и dhcp. ![](https://i.imgur.com/qg8yL4F.png) Затем с помощью команды `nano /etc/hosts` открываем файл и меняем название хоста на Linux-VPN-Client. ![](https://i.imgur.com/blINjU4.png) Потом с помощью `nano etc/hostname` так же открываем файл и делаем тоже самое. После этого машинку нужно ребутнуть. ![](https://i.imgur.com/afwqmGQ.png) Затем необходимо обновить репозиторий и установить openvpn на наш клиент. ![](https://i.imgur.com/w7J8kAm.png) Между тем на Kali Linux необходимо включить ssh, чтобы можно было передать наш созданный файл с впн. ![](https://i.imgur.com/9VvlG5y.png) Возвращаемся к нашему клиенту, и с помощью команды `scp user@192.168.186.130:/home/user/client.ovpn /etc/openvpn/client.conf` передаем наш созданный файл. **scp (secure copy)** - позвоялет безопасно файлы и каталоги. **user** - это имя пользователя на Kali Linux **192.168.186.130** - это Ip-адрес Kali Linux **/home/user/client.ovpn** - файл, который будем забирать **/etc/openvpn/client.conf** - куда он будет передан ![](https://i.imgur.com/WBbxT0k.png) Командой `nano /etc/openvpn/client.conf` можно открыть файл и убедиться, что он был успешно передан. ![](https://i.imgur.com/Ik4KCPp.png) Командой `openvpn /etc/openvpn/client.conf` запустим наш файл с vpn и подключимся к серверу. ![](https://i.imgur.com/ccb8wYy.png) Можно проверить, что так же появилось новое подключение и пропинговать наш клиент. Всё работает. **10.8.0.2** - ip-адрес клиента. ![](https://i.imgur.com/9p29YrG.png) Затем вновь вернемся к нашеу клиенту и в новой вкладке установим tcpdump, а затем запустим его командой `tcpdump -i tun0`. **tun0** - созданный интерфейс. При этом на Kali lInux начнем пинговать Ip фаерволла 192.168.1.1, в результате чего можно заметить, что видны эхо-запросы. ![](https://i.imgur.com/ADP3eYU.png) Далее на Kali Linux необходимо переместиться в директорию /etc/openvpn/ccd, в котором добавим маршрут внутренней сети, чтобы сервер о ней знал. ![](https://i.imgur.com/eylWqPR.png) С помощью команды `nano client` откроем файл клиента и добавим маршрут до внутренней сети и сохраним изменения. ![](https://i.imgur.com/YLQ3rFv.png) Затем нужно аерезагрузить openvpn, чтобы настройки применились. ![](https://i.imgur.com/z38yC3V.png) На клиенте тоже перезапускаем openvpn. ![](https://i.imgur.com/tZ8UmJQ.png) Далее смотрим список существующих маршрутов и добавляем маршрут внутренней сети инфраструктуры через туннель. ![](https://i.imgur.com/QB9LCk9.png) Затем на клиенте запускаем вновь tcpdump для tun0, на Kali Linux снова пингуем ip фаерволла. Как видно трафик идет, но пинга нет. Показываются лишь запросы с 10.8.0.1. Kali Linux пытается проверить подключение к межстетевому экрану, но установить ег оне может. Для этого нужно внестри коррективы в некоторые файлы на клиенте. ![](https://i.imgur.com/uBMIX7P.png) Нужно разрешить routing. Командой `nano /etc/sysctl.conf` открываем конфигурационный файл - sysctl прелназначен для управления параметрами ядра во время выполнения, убираем комментарий - включаем пересылку пакетов - и сохраняем. ![](https://i.imgur.com/Jpcazok.png) Командой `sysctl -p` применяем изменения. ![](https://i.imgur.com/UgznHrV.png) Затем нужно настроить NAT командой `iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE` **iptables** - утилита, которая основана на правилах, контролирующих входящие и исходящие пакеты. **-j NASQUERADE -** нужен, чтобы маскировать IP-адрес узла за внешним IP-адресом шлюза. **POSTROUTING -** изменяет пакеты на выходе из внешнего устройства брандмауэра. ![](https://i.imgur.com/OkVuLQ8.png) Вновь перезапускаем openvpn. ![](https://i.imgur.com/G7eusOu.png) Открываем новую вкладку и запускаем tcpdump, а на Kali Linux пингуем ip адрес фаерволла. Пинг теперь проходит. ![](https://i.imgur.com/HJsl2AI.png) Можно на нашем сервере открыть сайт pfsense и увидеть ip-адрес. ![](https://i.imgur.com/lSjXCAp.png) Этот ip был получен нашим клиентом по dhcp. ![](https://i.imgur.com/uDknAv5.png)