web-dev-qa-db-ja.com

OpenVPN、resolvconf、およびDNSドメイン解決

Site1にいる間、OpenVPN経由でsite2に接続する必要があります。接続されると、OpenVPNsite2は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はsite2のdhcp-option DNSとDOMAINをプッシュし、/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では失敗します

Site21への失敗したDNS要求がsite1DNSサーバーにフォールスルーする方法はありますか?または、site2.internal.domainのクエリのみをsite2ネームサーバーに渡すようにresolvconfを構成しますか?

私はsite1でUbuntu14.04マシンを使用しており、site2のOpenVPNサーバーはpfSense2.2ボックスです。私は両方のサイトを管理しているので、どちらの側に変更を加えても問題はありません。どちらのドメインも非公開であり、内部使用のみです。

8
Tim Jones

resolvconfスクリプトによって変更された/etc/resolv.confを監視するローカルキャッシュサーバーを設定し、allネームサーバーから回答を取得してみてください。そこにリストされています。

多くのシステムでは、resolvconfに加えて、dnsmasqパッケージをインストールするだけで十分です。

no-resolvおよびno-pollディレクティブが/etc/dnsmasq.confになく、loインターフェースが/etc/resolvconf/interface-orderの上部にある場合、デフォルトは「正常に機能する」はずです。アップストリームネームサーバーが解決できないアドレスに対して任意のIPを返す場合は、dnsmasq.confのstrict-orderが役立ちます。 /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

1
koniu

resolv.confは、利用可能なすべてのDNSサーバーを一覧表示します。リストの最初のクエリが稼働している限り、すべてのクエリがそのリストに送信されます。最初のものがダウンしていない限り、他の人には何もありません。したがって、リストの最初のDNSサーバーが稼働していて、答えを知っている場合、彼は「わかっています!」と応答します。それ以外の場合は、「わからないのではないかと思います...」と答えます。そしてそれがすべてです。もちろん、192.168.1.5(site2のDNSサーバー)にsite1のすべてのエントリを認識させる必要があります。その逆も同様です。ご挨拶

0
user4089

私はUbuntuでこれを試していませんが、openresolvとdnsmasqを使用してArchLinuxで同様のセットアップを実行することができました。

すべての変更はVPNクライアントマシンで行われます。 VPNサーバーにはDNSネームサーバーとドメイン検索オプションが既に含まれているため、VPNサーバーを変更する必要はありません。

  1. VPNに接続しているときに、resolvconf -lを使用してすべてのresolv.confファイルを表示します。 VPNインターフェースのresolvconf名を把握します(つまり、「resolv.conf fromX」の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オプションは、そのインターフェイス(VPN)によって提供されるネームサーバーは、search行で指定されたドメインの1つにあるホスト名を解決する場合にのみ使用する必要があることをresolvconfに通知します。それを実現するために適切なdnsmasq設定を生成します。

この構成では、site2.internal.domainの下にあるホストの要求は192.168.1.5に送信され、他のすべての要求は172.16.1.101または172.16.1.102に送信されます。

システムがIPv6を使用していない場合は、name_serversオプションから:: 1を削除します。

0
cjm