Site1にいる間、OpenVPN経由でsite2に接続する必要があります。接続されると、OpenVPNsite2はDNSネームサーバーとドメイン検索オプションをプッシュします。これにより、site1のすべての名前解決が失敗します。
例:
サイト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
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
DNS解決はserver.site2.internal.domainでは機能しますが、server.site1.internal.domainでは失敗します
Site21への失敗したDNS要求がsite1DNSサーバーにフォールスルーする方法はありますか?または、site2.internal.domainのクエリのみをsite2ネームサーバーに渡すようにresolvconfを構成しますか?
私はsite1でUbuntu14.04マシンを使用しており、site2のOpenVPNサーバーはpfSense2.2ボックスです。私は両方のサイトを管理しているので、どちらの側に変更を加えても問題はありません。どちらのドメインも非公開であり、内部使用のみです。
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
resolv.confは、利用可能なすべてのDNSサーバーを一覧表示します。リストの最初のクエリが稼働している限り、すべてのクエリがそのリストに送信されます。最初のものがダウンしていない限り、他の人には何もありません。したがって、リストの最初のDNSサーバーが稼働していて、答えを知っている場合、彼は「わかっています!」と応答します。それ以外の場合は、「わからないのではないかと思います...」と答えます。そしてそれがすべてです。もちろん、192.168.1.5(site2のDNSサーバー)にsite1のすべてのエントリを認識させる必要があります。その逆も同様です。ご挨拶
私はUbuntuでこれを試していませんが、openresolvとdnsmasqを使用してArchLinuxで同様のセットアップを実行することができました。
すべての変更はVPNクライアントマシンで行われます。 VPNサーバーにはDNSネームサーバーとドメイン検索オプションが既に含まれているため、VPNサーバーを変更する必要はありません。
resolvconf -l
を使用してすべてのresolv.confファイルを表示します。 VPNインターフェースのresolvconf名を把握します(つまり、「resolv.conf fromX」のX)。私の場合、それはtun0
でした。これは、残りの構成で使用します。/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
/etc/dnsmasq.conf
を編集して、次のオプションを追加します。
conf-file=/etc/dnsmasq-conf.conf
resolv-file=/etc/dnsmasq-resolv.conf
resolvconf -u
を実行して、dnsmasq構成ファイルを生成します。
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を削除します。