OpenVPN, resolvconf и разрешение домена DNS

8

В то время как на сайте 1, мне нужно подключиться к сайту 2 через OpenVPN. После подключения сайт OpenVPN2 выдвигает DNS-сервер имен и параметры поиска домена. Это приводит к сбою всех разрешений имен для site1.

Пример:

  1. Физически подключенный на сайте 1, DHCP выдвигает параметры DNS и управляет ими resolvconf.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site1.internal.domain
    
  2. Откройте туннель OpenVPN для site2, OpenVPN передает dhcp-опцию DNS и DOMAIN для site2 и /etc/openvpn/update-resolv-confотправляет их в resolvconf.
    /etc/resolv.conf

    # Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
    #     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
    nameserver 192.168.1.5
    nameserver 172.16.1.101
    nameserver 172.16.1.102
    search site2.internal.domain site1.internal.domain
    
  3. Разрешение DNS работает для server.site2.internal.domain, но не работает для server.site1.internal.domain

Есть ли способ, чтобы любой сбойный DNS-запрос к site21 должен был перейти на DNS-серверы site1? Или настройте resolvconf, чтобы запросы имен для site2.internal.domain передавались только на сервер имен site2?

Я использую машину Ubuntu 14.04 на сайте site1, а сервер OpenVPN на сайте site2 представляет собой pfSense 2.2. Я управляю обоими сайтами, поэтому внесение изменений в обе стороны не является проблемой. Оба домена являются закрытыми и предназначены только для внутреннего использования.

Тим Джонс
источник
Я должен добавить, что, хотя ноутбуком является Ubuntu 14.04, я не использую NetworkManager.
Тим Джонс
1
Мне интересно узнать, существует ли гибкий способ перенаправления DNS-запросов на разные серверы, например, путем проверки полного доменного имени .. :)
nass

Ответы:

1

Вы можете настроить локальный сервер кэширования, который будет наблюдать за вашим сервером /etc/resolv.conf, поскольку он изменяется resolvconfскриптами, и пытаться получить его ответы от всех перечисленных там серверов имен.

На многих системах будет достаточно установить пакет dnsmasq , в дополнение к resolvconf.

Значения по умолчанию должны «просто работа» при условии , что no-resolvи no-pollдирективы отсутствуют /etc/dnsmasq.confи loинтерфейс в верхней части /etc/resolvconf/interface-order. Если вышестоящий сервер имен возвращает несколько произвольных IP-адресов для неразрешимых адресов, strict-orderв dnsmasq.conf может помочь Ваш /etc/resolv.confдолжен только показать nameserver 127.0.0.1.

Если вы предпочитаете фиксированную настройку или подключаетесь к нескольким несвязанным сетям и хотите избежать утечки имен вашей частной сети для всех серверов имен, вам следует настроить dnsmasq для запроса определенных серверов на основе домена:

# /etc/dnsmasq.conf

# site1 servers
nameserver=/site1.internal.domain/172.16.1.101
nameserver=/site1.internal.domain/172.16.1.102

# site2 servers
nameserver=/site2.internal.domain/192.168.1.5

# default OpenNIC (optional, unless 'no-resolv' is set). 
server=51.15.98.97
server=172.104.136.243

Дополнительную информацию о параметрах dnsmasq смотрите здесь: http://oss.segetech.com/intra/srv/dnsmasq.conf

koniu
источник
0

resolv.conf перечисляет все доступные DNS-серверы. Пока первый в списке запущен, все запросы будут отправляться на него. Ничего для других, если только не первый. Итак, если первый DNS-сервер в списке включен и знает ответ, он отвечает «Я знаю это!», Иначе он скажет: «Боюсь, я не знаю ...». И это все. Вы должны сделать 192.168.1.5 (DNS-сервер сайта 2) осведомленным обо всех записях сайта 1 и наоборот. Приветствую

user4089
источник
0

Я не пробовал это на Ubuntu, но мне удалось получить аналогичную настройку, работающую на Arch Linux, используя openresolv и dnsmasq.

Все изменения будут на машине клиента VPN. Сервер VPN не должен нуждаться в каких-либо изменениях, поскольку он уже включает DNS-сервер имен и параметры поиска домена.

  1. При подключении к VPN используйте resolvconf -lдля просмотра всех файлов resolv.conf. Определите имя resolvconf вашего интерфейса VPN (то есть X в "resolv.conf from X"). В моем случае это было tun0, что я буду использовать в оставшейся конфигурации.
  2. Установить dnsmasq
  3. Изменить, /etc/resolvconf.confчтобы добавить эти параметры:

    private_interfaces=tun0
    name_servers="::1 127.0.0.1"
    dnsmasq_conf=/etc/dnsmasq-conf.conf
    dnsmasq_resolv=/etc/dnsmasq-resolv.conf
    
  4. Изменить, /etc/dnsmasq.confчтобы добавить эти параметры:

    conf-file=/etc/dnsmasq-conf.conf
    resolv-file=/etc/dnsmasq-resolv.conf
    
  5. Запустите resolvconf -uдля создания файлов конфигурации dnsmasq.

  6. Запустите dnsmasqслужбу и настройте ее для запуска при загрузке. На Arch это делается с помощью команды:

    systemctl start dnsmasq.service
    systemctl enable dnsmasq.service
    

name_serversОпция говорит Resolvconf в список только те серверы имен в /etc/resolv.conf(т.е. он указывает на свой локальный экземпляр Dnsmasq). В dnsmasq_опции сказать Resolvconf писать серверы имен , которые пошли бы в /etc/resolv.confк Dnsmasq конфигурационных файлов вместо этого.

private_interfaceОпция говорит Resolvconf , что неймсерверы предоставляемых этого интерфейс (ваш VPN) следует использовать только при разрешении имен узлов , которые находятся в одной из областей , указанных в searchстроке. Это создаст соответствующую конфигурацию dnsmasq, чтобы это произошло.

В этом конфиге запросы на хосты под site2.internal.domain должны идти к 192.168.1.5, а все остальные запросы должны идти к 172.16.1.101 или 172.16.1.102.

Если ваша система не использует IPv6, удалите :: 1 из name_serversопции.

CJM
источник