OpenVPN,resolvconf和DNS域解析


8

在site1时,我需要通过OpenVPN连接到site2。连接后,OpenVPN站点2将推送DNS名称服务器和域搜索选项。这将导致site1的所有名称解析失败。

例:

  1. DHCP物理连接到site1,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. 打开到站点2的OpenVPN隧道,OpenVPN将dhcp-option DNS和DOMAIN /etc/openvpn/update-resolv-conf推送到站点2,并将它们推送到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

有没有一种方法可以将对Site21的任何失败的DNS请求都传递到site1 DNS服务器?还是将resolvconf配置为仅将对site2.internal.domain的查询传递给site2名称服务器?

我在site1使用Ubuntu 14.04计算机,而site2的OpenVPN服务器是pfSense 2.2盒。我管理这两个网站,因此对任何一方进行更改都不成问题。这两个域都是非公共用途,仅供内部使用。


我应该补充一点,尽管笔记本电脑是Ubuntu 14.04,但我不使用NetworkManager。
蒂姆·琼斯2015年

1
我有兴趣查看是否存在一种灵活的方法来将DNS查询重定向到其他服务器,例如通过检查FQDN。:)
nass 2015年

Answers:


1

您可以设置一个本地缓存服务器,该服务器将监视您的/etc/resolv.conf,因为resolvconf脚本已对其进行了更改,并尝试从那里列出的所有名称服务器获取答案。

在许多系统上,除了resolvconf外,安装dnsmasq软件包就足够了。

如果没有no-resolvno-poll指令,/etc/dnsmasq.conf并且lo接口位于的顶部,则默认值应该“正常工作” /etc/resolvconf/interface-order。如果上游名称服务器为strict-order无法解析的地址返回了一些任意IP,则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


0

resolv.conf列出所有可用的DNS服务器。只要列表中的第一个启动并运行,所有查询都将发送到该列表。除非第一个失败,其他都没有。因此,如果列表中的第一个DNS服务器启动并知道答案,他将回答“我知道!”,否则他会说“恐怕我不知道...”。就这样。您必须使192.168.1.5(site2的DNS服务器)知道site1的所有条目,并且反之亦然。问候


0

我没有在Ubuntu上尝试过,但是我可以使用openresolv和dnsmasq在Arch Linux上进行类似的设置。

所有更改将在VPN客户端计算机上。VPN服务器不需要任何更改,因为它已经包含DNS名称服务器和域搜索选项。

  1. 连接到VPN时,用于resolvconf -l查看所有resolv.conf文件。找出您的VPN接口的resolvconf名称(即“来自X的resolv.conf”中的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.confdnsmasq配置文件的名称服务器写入。

private_interface选项告诉resolvconf,仅当解析search行中指定的域之一中的主机名时,才应使用该接口(您的VPN)提供的名称服务器。它将生成适当的dnsmasq配置来实现这一目标。

使用此配置,对site2.internal.domain下的主机的请求应转到192.168.1.5,所有其他请求应转到172.16.1.101或172.16.1.102。

如果您的系统不使用IPv6,请从name_servers选项中删除:: 1 。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.