# Практика 5-6 OpenVPN L2-3 - туннелирование Сетап точно такой же, как и в предыдущих практиках с SSH-туннелированием, поэтому все моменты вплоть до настройки DHCP и прокидывания VLAN опущены. ## Настройка OpenVPN Скрипты тащат, скрипты - круто, поэтому качаем скрипт от angristan для лёгкой установки OpenVPN. ![](https://hackmd.io/_uploads/BJIG9scVh.png) Создали клиента, сразу на месте подправим его конфиг, комментируя следующие строчки: ``` #ignore-unknown-option block-outside-dns #setenv opt block-outside-dns ``` `ignore-unknown-option block-outside-dns` комментируем, чтобы клиент блокировал все DNS-запросы вне туннеля `setenv opt block-outside-dns` - чтобы не блокировать все DNS-запросы вне туннеля для виндовых тачек (иначе это вызывает проблемы с соединением) ![](https://hackmd.io/_uploads/r1-eQ2cN2.png) Также редачим конфиг сервера по пути `/etc/openvpn/server.conf`. Открываем наш любимый vim (никакой не nano!) и комментируем следующие строки: ``` #push "dhcp-option DNS 94.140.14.15" #push "dhcp-option DNS 94.140.14.15" #push "redirect-gateway def1 bypass-dhcp" ``` Делается это для того, чтобы компы получали настройки по-умолчанию от фаерволла, а не от нашего VPN-сервака. ## Туннелирование на уровне L3 В конфигах как клиента, так и сервера, `device` оставляем `tun` для того, чтобы прокинуть туннель на уровне **L3**. Предположим, что один из компов (какой-нибудь внутренний сервак на линуксе) ломанули и получили к нему полный доступ. В этом случае мы можем получить доступ до внутренней сети. ![](https://hackmd.io/_uploads/BkLBUh9Eh.png) Ставим на клиенте (ломаном линухе) OpenVPN и забираем конфиг с сервера через SCP: ``` scp user@192.168.115.152:/home/user/client.ovpn ~/ ``` ![](https://hackmd.io/_uploads/S1JzjhqEn.png) И подключаемся к серваку через `openvpn client.ovpn` ![](https://hackmd.io/_uploads/H169o3qVh.png) Вуаля, туннель готов. Проблема осталась только в том, что он не видит соседние тачки и не может их нормально пинговать. Первое решается тем, что мы прописываем существующие за туннелем сетки вручную в `/etc/openvpn/ccd/client`: ``` iroute 192.168.1.0 255.255.255.0 iroute 172.16.10.0 255.255.255.0 iroute 172.16.20.0 255.255.255.0 ``` А также прописываем маршруты до этих самых сеток вручную: ``` ip route add 192.168.1.0/24 dev tun0 ip route add 172.16.10.0/24 dev tun0 ip route add 172.16.20.0/24 dev tun0 ``` А второе решается прописыванием NAT на крякнутом линухе, как это делалось в предыдущей практике с SSH: `iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE` Не забываем также раскомментить `net.ipv4.ip_forward = 1` в `/etc/sysctl.conf` на ломаном линуксе, чтобы трафик мог перекидываться между интерфейсами. Сохраняем через `sysctl -p`. И вуаля! ![](https://hackmd.io/_uploads/Sk5IJ65V3.png) На стену тоже заходит ![](https://hackmd.io/_uploads/rkLge6c4n.png) Теперь организуем L2! ## Туннелирование на уровне L2 На деле тут всё даже гораздо проще, за исключением того, что его невозможно реализовать, если устройство не выступает посредником между стеной и остальной сетью. Поэтому возвращаемся к топологии с Raspberry Pi. В конфигах сервера и клиента правим `device` с `tun` на `tap`, после чего соединяем интерфейсы OpenVPN и внутренней сети в один bridge: ``` ip link add br0 type bridge ip link set ens3 master br0 ip link set ens4 master br0 ip link set tap0 master br0 ``` И на кали получаем айпишник по DHCP: ![](https://hackmd.io/_uploads/ByueU65N3.png)