Oct. 11th, 2024

vitus_wagner: My photo 2005 (Default)

У наших конторских сисадминов есть привычка некоторым сайтам в локальной сети офиса давать имена в домене второго уровня, том же, который используется и для внешних сайтов. И использовать механизм view в bind для того чтобы эти имена резолвились в адреса только внури офиса+vpn

Пои этом, естественно, точка входа vpn - в том же домене второго уровня.

Возникает проблема, заключающаяся в том, что когда у меня поднят конторский vpn, адреса в конторском домене должны резолвиться, через dns-серверы, доступные только через vpn, а когда не поднят - через дефолтные сервера.

Это не было бы проблемой, если бы в тот момент когда у меня поднят конторский vpn, мне не нужны были бы никакие сайты кроме конторских и сайтов публичного интернета, которые конторским DNS прекрасно резолвятся.

Но у меня есть локальная сеть дома, у меня есть куча виртуалок на любой из машин, на которых я работаю, у меня есть семейная VPN.

Поэтому нужно сделать так чтобы через конторские DNS-сервера резолвились только конторские домены, а все остальные - через дефолтные.

Очевидное решение - в скрипте который up в openvpn написать несколько параметров конфигурации dnsmasq и его передернуть. А в скрипте down - эти параметры затереть. Чтобы при следующей попытке запуска openvpn, она бы разрезолвила адреса конторских точек входа через публичные dns. Менее очевидное решение - добавлять убавлять сервера на лету через DBUS я пока не осилил. Функции для добавления серверов я в DBUS API dnsmasq вижу, а для удаления нет. Поэтому я лучше через файлы.

Правда, выясняется что systemd запускает openvpn с большими ограничениями по части доступа в файловую систему (и правильно делает). Поэтому писать приходится в /run/openvpn. И чтобы dnsmasq это прочитал, добавить ему в конфиг (в dnsmasq.d он это кушать отказался) строчку

 servers-file=/run/openvpn/pgpro.dns

соответственно скрипт up выглядит так:

 # !/bin/sh
 DOMAIN=postgrespro.ru
 env |sed -n "s!foreign_option_[0-9]=dhcp-option DNS !/$DOMAIN/!p" > /run/openvpn/pgpro.dns
 systemctl restart dnsmasq
 exit 0

А скрипт down как

 # !/bin/sh
 echo > /run/openvpn/pgpro.dns
 systemctl restart dnsmasq
 exit 0

Возможно надо еще будет в /etc/tmpfiles.d добавить создание пустого файлика при старте системы. Чтобы dnsmasq не пугался если вдруг его не обнаружится.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

August 2025

S M T W T F S
     1 2
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 3rd, 2025 07:47 pm
Powered by Dreamwidth Studios