1. Вводные данные:
- VPN сервер на иностранном хосте с неким IP - 123.456.789.012
- на нем подняты 2 VPN сервера OpenVPN c сетью 10.100.0.0/24 и StrongSwan (IKE2) с сетью 10.10.10.0/24
- собственный DNS сервер Pi-hole 10.100.0.1
2. Ситуация. Сейчас DNS сервер работает для OpenVPN машин, т.к. OpenVPN позволяет внутри своей сети ресолвить собственные DNS сервера, для этого внутри настроки сервера есть специальная опция, позволяющая вместо 8.8.8.8 и 8.8.4.4 указать 10.100.0.1 Это нужно для того, чтобы на уровне DNS запросов убивать рекламу и спам всяческий на клиентских машинах. Постепенно мигрируем на StrongSwan, он сейчас в опытной эксплуатации. Он работает хорошо, кроме того, что не позволяет пользоваться сервером DNS 10.100.0.1. Самым простым временным тестовым решением оказалось открыть 53 порт на 123.456.789.012 и указание StrongSwan клиентам использовать DNS сервер по адресу 123.456.789.012. С такой настройкой все DNS запросы идут через собственный сервер, реклама отрезается и выглядит все хорошо.
3. Проблема. Это решение неправильное и не секъюрное, т.к. открытие 53 порта есть зло. Но, StrongSwan в отличии от OpenVPN не хочет работать с собственными DNS без открытого порта 53 на сервере.
4. Задача. Родилась тут идея сделать DoH сервер. Т.е. сделать DNS запрос не по IP а по доменному имени через 443 порт через TLS. Для того, чтобы не было вообще разницы есть ли VPN или нет, просто прописал нужный адрес в настройках DNS и работай. Для этого был поднят Apache2, получен сертификат, и была предпринята попытка сделать редирект вот таким путем:
<VirtualHost *:443>
ServerName doh.mydomain.net
#DocumentRoot /var/www/html/@dummy
ProxyRequests On
ProxyPreserveHost On
ProxyPass / http://123.456.789.012
ProxyPassReverse / http://123.456.789.012
#ProxyPass /dns-query http://[123.456.789.012]/dns-query
#ProxyPassReverse /dns-query http://[123.456.789.012]/dns-query
#ProxyPass / http://10.100.0.1:53
#ProxyPassReverse / http://10.100.0.1:53
SSLCertificateFile /etc/letsencrypt/live/doh.mydomain.net/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/doh.mydomain.net/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
Вот этот вариант не работает никак, т.е. после перезагрузки Apache2 попытка скормить в качестве DoH адреса 'doh.mydomain.net' клиентским машинам заканчивается только 'Couldn't connect'. Закомменченные варианты редиректа пробовались в разных сочетаниях, но пока никакие варианты не сработали. Вот собственно и вопрос: как грамотно сделать редирект DNS запросов с внутреннего DNS сервера через вэб-сервер Apache2 с DoH? Т.е. хочется собственный dns.google.com с блэкджеком и шлюхами. Есть нескольо мануалов на этот счет,
но пока я не осилил.
В общем буду изучать эту тему, может переведу вопрос для StackOwerflow, но вдруг кто-то занимался похожей задачей и знает какой то путь как это сделать по задуманному сценарию?