特定ドメインのDNSサーバを指定する
公開日:
カテゴリ: ネットワーク
特定ドメインのDNSサーバを指定する方法の覚書です。主にLAN内のDNSサーバを立てたけど、全DNSクエリを処理しない運用をする場合に使うことになる(だいぶニッチな使い方)と思います。
今回目指すもの
- あくまでも基本はデフォルトのDNSサーバを使用する
- 特定の(サブ)ドメインへの名前解決のみ、指定のDNSサーバへ問い合わせを行う
- DNSサーバが落ちても、外部接続に支障を来さないようにするため
参考: DNSサーバを使わずにhostsファイルを用いる方法
hosts
ファイルを変更して名前解決に使用する方法は、WindowsでもmacOSでもLinuxでも使用できます。ただし、設定できるのはドメイン名が完全一致のパターンのみです。ワイルドカード指定ができないので、サブドメインを追加するたびにすべてのデバイスのhosts
ファイルの編集が必要になります。
書式
# IP + スペースorタブ + ホスト名
127.0.0.1 localhost
設置場所
いずれの環境も特権(管理者権限やroot)が必要です。iOSやAndroidにもhostsは存在するようですが、ユーザが特権を取得できないため表示・編集できません。
- Windows:
C:\Windows\System32\drivers\etc\hosts
- Linux:
/etc/hosts
- macOS:
/private/etc/hosts
設定方法
いずれの環境も特権(管理者権限やroot)が必要です。
以下の例は、ドメインintranet.example.com
の名前解決を192.168.1.1
で行う例です。
Windows
以下のPowerShellコマンドで、特定ドメインのDNSサーバを指定可能です。
# 追加
Add-DnsClientNrptRule -Namespace ".intranet.example.com" -NameServers "192.168.1.1"
# 確認(特権不要)
Get-DnsClientNrptRule
# 削除(Get-DnsClientNrptRuleで出力されるNameが必要)
Remove-DnsClientNrptRule -Name "Name"
macOS
/etc/resolver/
ディレクトリ内にドメイン名のファイルを作成・配置すると、該当ドメインの名前解決は指定のDNSサーバへ向かいます。
例
/etc/resolver/intranet.example.com
nameserver 192.168.1.1
Linux
OS標準機能では不可能で、ローカルで何らかのDNSサーバを立てる他ないようです。
その他
- VPNソフトウェアによってはSplit DNSという機能があり、同様の設定ができるものもあります
カテゴリ: ネットワーク