雑記帳

整理しない情報集

更新情報

特定ドメインの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という機能があり、同様の設定ができるものもあります

カテゴリ: ネットワーク