###### 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 :::