Итак, у нас есть ExpressVPN или ещё что, и мы хотим загнать трафик всей нашей сетки в трубу этого VPN, да так, чтобы не произошло никаких неожиданных утечек трафика "мимо", в т.в. DNS Leak. Используем pfSense.
Схема работоспособна только когда для соединения с провайдером используется PPP* (PPPoE, PPP, L2TP, PPTP) или статический адрес - на данный момент невозможно отключить приём DNS серверов провайдера по DHCP (если только ковырять исходники)
Скачиваем последнюю (2.5.2 на момент статьи) версию с https://www.pfsense.org/download/ и ставим на свой шлюз-сервечок
После дефолтного визарда и настройки OpenVPN на странице VPN / OpenVPN / Clients, далаем следующие полезные вещи:
1. В последней версии pfSense появилась возможность использовать DNS форвардер получаемый при подключении по OpenVPN,
т.к. ExpressVPN при каждом подключении выдаёт новый IP и новый IP своего DNS сервера, это то что нужно!
1.1 Активируется на странице настройки OpenVPN клиента (Pull DNS):
1.2 Добавляем (Add) и активируем (Enable, после нажатия на названии интерфейса) наш OpenVPN интерфейс на странице Interfaces / Interface Assignments:
1.3 Включаем использование DNS Forwarders на странице Services / DNS Resolver (DNS Query Forwarding):
И выбираем наш OpenVPN интерфейс в списке Outgoing Interfaces.
1.4 Отключаем DNS Server Override и переключаем DNS Resolution Behavior в Use Local DNS на странице System / General Setup:
чтобы сам pfSense не DNSил куда не надо
1.5 Заворачиваем DNS запросы из нашей LAN сети на DNS Resolver pfSense'а,
описано тут: https://docs.netgate.com/pfsense/en/latest/recipes/dns-redirect.html - попросту создаётся правило которое перенаправляет всё что идёт на 53 UDP/TCP порт на DNS Resover. Если надо можно повторить для IPv6.
1.6 Прямо под этим правилом создаём другое, перенаправляющее LAN сетку в OpenVPN туннель, для этого создаём простое правило any/any всё протоколы, но указываем в Advanced / Gateway полученный OpenVPN шлюз.
1.7 Удаляем "Default Allow to any LAN rule", чтобы LAN сетка не вылазила наружу при падении VPN соединения.
1.8 Исключаем DNS Leak через DNS-over-HTTPS или ещё каким способом, для этого ставим пакет pfBlockerNG-devel и на странице Firewall / pfBlockerNG / DNSBL / SafeSearch включаем блокировку DoH серверов и выбираем весь список (ctrl+a):
1.8.1 Также добавляем IP фиды для блокировки DNS серваков на станице Firewall / pfBlockerNG / Feeds и выбираем там все Public DNS фиды. Перезапускаем pfBlockerNG -> Update + Force.
1.9 Проверям DNS Leak на странице https://www.expressvpn.com/dns-leak-test
p.s. можно угареть по pfBlockerNG и понадабавлять кучу фидов блокирующих рекламу и трекинг (и вообще много чего)
Схема работоспособна только когда для соединения с провайдером используется PPP* (PPPoE, PPP, L2TP, PPTP) или статический адрес - на данный момент невозможно отключить приём DNS серверов провайдера по DHCP (если только ковырять исходники)
Скачиваем последнюю (2.5.2 на момент статьи) версию с https://www.pfsense.org/download/ и ставим на свой шлюз-сервечок
После дефолтного визарда и настройки OpenVPN на странице VPN / OpenVPN / Clients, далаем следующие полезные вещи:
1. В последней версии pfSense появилась возможность использовать DNS форвардер получаемый при подключении по OpenVPN,
т.к. ExpressVPN при каждом подключении выдаёт новый IP и новый IP своего DNS сервера, это то что нужно!
1.1 Активируется на странице настройки OpenVPN клиента (Pull DNS):
1.2 Добавляем (Add) и активируем (Enable, после нажатия на названии интерфейса) наш OpenVPN интерфейс на странице Interfaces / Interface Assignments:
1.3 Включаем использование DNS Forwarders на странице Services / DNS Resolver (DNS Query Forwarding):
И выбираем наш OpenVPN интерфейс в списке Outgoing Interfaces.
1.4 Отключаем DNS Server Override и переключаем DNS Resolution Behavior в Use Local DNS на странице System / General Setup:
чтобы сам pfSense не DNSил куда не надо
1.5 Заворачиваем DNS запросы из нашей LAN сети на DNS Resolver pfSense'а,
описано тут: https://docs.netgate.com/pfsense/en/latest/recipes/dns-redirect.html - попросту создаётся правило которое перенаправляет всё что идёт на 53 UDP/TCP порт на DNS Resover. Если надо можно повторить для IPv6.
1.6 Прямо под этим правилом создаём другое, перенаправляющее LAN сетку в OpenVPN туннель, для этого создаём простое правило any/any всё протоколы, но указываем в Advanced / Gateway полученный OpenVPN шлюз.
1.7 Удаляем "Default Allow to any LAN rule", чтобы LAN сетка не вылазила наружу при падении VPN соединения.
1.8 Исключаем DNS Leak через DNS-over-HTTPS или ещё каким способом, для этого ставим пакет pfBlockerNG-devel и на странице Firewall / pfBlockerNG / DNSBL / SafeSearch включаем блокировку DoH серверов и выбираем весь список (ctrl+a):
1.8.1 Также добавляем IP фиды для блокировки DNS серваков на станице Firewall / pfBlockerNG / Feeds и выбираем там все Public DNS фиды. Перезапускаем pfBlockerNG -> Update + Force.
1.9 Проверям DNS Leak на странице https://www.expressvpn.com/dns-leak-test
p.s. можно угареть по pfBlockerNG и понадабавлять кучу фидов блокирующих рекламу и трекинг (и вообще много чего)