Я пытаюсь настроить dnsmasq, чтобы я мог создавать пользовательские имена хостов через сервер OpenVPN. Так что когда машина подключается, имена хостов будут указывать на ресурсы, расположенные на хосте или в сети OpenVPN.
Например, файл /etc/hosts на сервере выглядит следующим образом:
db.private.resource 10.8.0.1
app.private.resource 10.8.0.1
Заставить клиента использовать туннель для поиска DNS довольно просто. В файле server.conf у меня есть:
push "dhcp-option DNS 10.8.0.1"
А в конфигурации клиента у меня:
dhcp-option DNS 10.8.0.1
И я могу проверить, что клиент использует OpenVPN в качестве своего DNS при подключении, выполнив:
# dnsmasq --no-daemon -q
В командной строке выполните команду ping с клиента, чтобы убедиться, что клиент действительно отправляет запросы поиска DNS на сервер OpenVPN через туннель и что сервер OpenVPN действительно обрабатывает эти запросы.
Проблема в том, что когда я пытаюсь выполнить ping db.private.resource
на указанный мной хост, я получаю:
dnsmasq: query[A] db.private.resource from 10.8.0.2
dnsmasq: config db.private.resource is NXDOMAIN
Из вывода dnsmasq. Так вот, по какой причине он, похоже, не возвращает значения, которые я определил в /etc/hosts. И что меня удивляет, так это то, что даже когда я запускаю dnsmasq с добавленным параметром адреса, я все равно получаю указанный выше результат.
# dnsmasq --no-daemon -q --address=/db.private.resource/10.8.0.1/
dnsmasq: query[A] db.private.resource from 10.8.0.2
dnsmasq: config db.private.resource is NXDOMAIN
Есть ли что-то неправильное в этом результате?
решение1
Сначала установите dnsmasq:
sudo apt-get update; sudo apt-get install dnsmasq
.
Сервер
На сервере добавьте эту строку в /etc/dnsmasq.conf
:
...
expand-hosts #Uses /etc/hosts on this machine for resolution
bind-interfaces #will bind on all available interfaces, including the openvpn one
listen-address=10.8.0.1 # i noticed recently that i also need to add this line, because by default it will only listen on 10.9.0.1 which isnt pushed to my clients
...
Затем отредактируйте /etc/hosts
файл с именами хостов. Наконец, запустите sudo /etc/init.d/dnsmasq restart
.
Если по какой-то причине вы не хотите редактировать /etc/hosts
, вы можете создать новый файл по адресу /etc/dnsmasq.conf.d/addresses.conf
и заполнить его своими адресами:
address=/umomma.com/69.69.69.69
address=/oo.umomma.com/69.69.69.60
address=/ooooo.umomma.com/69.69.69.62
address=/ooooooooo.umomma.com/69.69.69.65
При использовании второго метода вам также придется бежать sudo /etc/init.d/dnsmasq restart
за ним.
Клиент
Серверы OpenVPN обычно самостоятельно назначают себе IP-адреса 10.8.0.1
или 10.9.0.1
. Поэтому на клиенте нам нужно сначала запросить эти серверы имен.
На данный момент, по крайней мере, я отредактировал /etc/resolv.conf
на клиенте, я добавил nameserver 10.8.0.1
в начало первой строки файла. Так что на клиенте мой полный resolve.conf выглядит так:
nameserver 10.8.0.1
nameserver 8.8.8.8
nameserver 8.8.8.8
nameserver 127.0.1.1
Чтобы эти изменения сохранились при перезагрузке, внесите те же изменения в /etc/resolvconf/resolv.conf.d/head
.
Также
Не забудьте запустить sudo /etc/init.d/dnsmasq restart
при добавлении хостов на сервер