---
# System prepended metadata

title: Практика 5-6 OpenVPN L2-3 - туннелирование
tags: [Пентест]

---

# Практика 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)
