web-dev-qa-db-ja.com

リゾルバー:LAN、VPN、およびWAN名前解決

Resolv.confおよびresolvconfおよびresolvconf.confのマニュアルページを読みましたが、すべてを理解しているわけではなく、この問題をどのように解決できるか(少し)失ったと感じています。

シナリオ:

DHCPとネームサーバーとして機能するルーターを備えたLANがあります。ネームサーバーは、TLDなしまたは.lan TLDのいずれかでこのLAN上のすべてのデバイスを解決します。たとえば、nslookup、ping、および「nas」や「nas.lan」など、NAS server(ネットワークアクセス可能なストレージサーバー)に到達する他のツール名。 ISPのDNSにリクエストを転送します。

したがって、私のresolv.confは次のようになります。

# Generated by resolvconf
domain lan
nameserver 192.168.0.1

すべてのLANおよびWAN名。

現在、職場のCisco VPNに接続し、resolvconfがresolv.confを次のように更新しています。

# Generated by resolvconf
domain myworkplace.com
search myworkplace.com lan
nameserver 192.168.1.10
nameserver 192.168.1.11
nameserver 192.168.0.1

そして、今ではLAN上の「nas」または「nas.lan」には到達できませんが、VPN上の「nas」および「nas.myworkplace.com」には到達できます。 WAN名前は192.168.1.10に割り当てられたVPNによって解決され、NASこの方法で到達するのはLAN上ではなくVPN上です(異なるサーバ)。

余談:実際にそのような名前の衝突はありませんが、ソリューションが明らかにそれに対応する必要があるため、ここでの例の例でそれを提供します。

今私が達成したいのは次のようなものです:

「nas.lan」は私のLANに解決しますNAS「nas.myworkplace.com」はVPNに解決しますNAS「nas」はいずれかに基づいて解決しますon config(resolv.confのndots設定のヒントはここにありますが、確かではありません)。

私の質問:

  1. これはresolvconfでも実行可能ですか?
  2. そうでない場合、他の方法があります(私のボックスのリゾルバーとしてlibcの代わりにdnsmaqを使用する例)。

このような特定のニーズを念頭に置いて、manページを消化および解読するのが簡単ではないことを発見しているので、ここのポインタに感謝します。私は今しばらくオンラインで検索しましたが、奇妙なことに、他のフォーラムで同じ質問を(答えなしで)尋ねている人を見つけました!

これは私だけの問題ではなく、明らかに私の発見でもありません。そこに見たいデバイスがあるLAN上の誰でも、VPNを介して別のLANに接続すると、接続中にLANではなくVPN上の名前のみを解決できるという問題が正確に発生する可能性が高いため、VPNを閉じて解決する必要がありますLAN名をもう一度。

1
Validator

VPNの使用時にLAN DNSを使用できない理由は、リゾルバーがデフォルトで2回しか試行しないためだと思います。

Resolv.confマニュアルから:

tries:nは、リゾルバがネームサーバーにクエリを送信する回数を設定します。この回数を超えると、呼び出し側アプリケーションにエラーが返されます。デフォルトはRES_DFLRETRYです(現在は2を参照)。このオプションの値は、暗黙のうちに5に制限されます。

そのため、会社のVPNが提供する2つのDNSサーバーを最初に試行してから、エラーを返します。 LAN DNSも考慮されるように、attemptsを3に設定できます。

これの欠点は、最後のサーバーが最終的に応答するまで待機することにより、DNS要求が遅くなることです。そして、あなたはすべてのDNSリクエストをあなたの会社に送っています-それはパフォーマンスとプライバシーにも影響を与えます。

Dnsmasqを使用することをお勧めします。

次のように、指定されたドメインを持つdnsmasq confのドメインごとにアップストリームDNSサーバーを追加できます。

server=/lan/192.168.0.1

また、デフォルトではdnsmasqは/etc/resolv.confからアップストリームサーバーをポーリングします。

dnsmasq Manpage のNotesセクションから:

...デフォルトでは、dnsmasqは/etc/resolv.confを読み取って、使用するアップストリームネームサーバーのIPアドレスを検出します。これは、情報が通常そこに格納されているためです。 --no-pollが使用されない限り、dnsmasqは/etc/resolv.conf(または--resolv-fileが使用されている場合は同等)の変更時間をチェックし、変更された場合は再読み取りします。これにより、両方のプロトコルが情報を提供するため、DNSサーバーをPPPまたはDHCPによって動的に設定できます。

したがって、VPNクライアントがresolv.confを変更した場合、dnsmasqをresolv.confの上に置いておけば、両方を使用できます。

しかし、これはVPNがresolv.confを編集する方法ではないので、VPNのDNS機能を無効にし、会社のDNSサーバーを手動でdnsmasq設定に追加しようとします:

server=/myworkplace.com/192.168.1.10
server=/myworkplace.com/192.168.1.11
server=192.168.0.1

この場合、インターネットとlanのすべてのクエリは192.168.0.1になり、myworkplace.comのすべてのクエリは会社のDNSになります。

1
FSchndr
git clone https://github.com/timebandit1969/resolvchange.git

https://www.purebasic.com/download.php そしてPureBasic x64のLinuxデモ版をダウンロードします。制限がコンパイルを妨げるとは思わないので、チェックしましたでる。 (実行可能にする)resolvchange.pbをコンパイルします

0
Joe Pisco