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


8

site1にいる間、OpenVPN経由でsite2に接続する必要があります。接続すると、OpenVPNサイト2はDNSネームサーバーとドメイン検索オプションをプッシュします。これにより、site1のすべての名前解決が失敗します。

例:

  1. DHCPはサイト1で物理的に接続され、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トンネルをサイト2に開き、OpenVPNはサイト2の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要求がsite1 DNSサーバーにフォールスルーする方法はありますか?または、site2.internal.domainのクエリのみをsite2ネームサーバーに渡すようにresolvconfを構成しますか?

私はsite1でUbuntu 14.04マシンを使用しており、site2のOpenVPNサーバーはpfSense 2.2ボックスです。私は両方のサイトを管理しているので、どちらか一方に変更を加えることは問題になりません。どちらのドメインも非公開で、内部でのみ使用されます。


ラップトップはUbuntu 14.04ですが、NetworkManagerは使用しません。
Tim Jones

1
DNSクエリを別のサーバーにリダイレクトするための柔軟な方法があるかどうかに興味があります。たとえば、FQDNをチェックすることで、.. :)
nass

回答:


1

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

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

no-resolvおよびno-pollディレクティブがなく/etc/dnsmasq.confloインターフェースがの上部にある場合、デフォルトは「そのまま機能する」はずです/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ネームサーバーとドメイン検索オプションが含まれているため、VPNサーバーを変更する必要はありません。

  1. VPNに接続しているときに、を使用resolvconf -lしてすべてのresolv.confファイルを表示します。VPNインターフェースのresolvconf名を見つけます(つまり、「resolv.conf from X」の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_オプションは、/etc/resolv.conf代わりにdnsmasq構成ファイルに入るネームサーバーを書き込むようにresolvconfに指示します。

この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を削除してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.