macOSで特定ドメインのDNS問い合わせサーバーを固定する

Pocket

先日、自宅のネットワークにWiMAX2+ルーターを追加して、時間帯や端末毎にゲートウェイを振り分けて使い分ける体制を構築したのですが、ひとつ困ったことが置きました。LAN内からLAN内のサーバーへのアクセスです。YAMAHAルーター(以下RTX)はいわゆるヘアピンNATには対応してないのですが、特定のホスト名に対して固定のIPアドレスを返す簡易DNSサーバー機能があるので、LAN内からRTXにDNS問い合わせした時はプライベートIPアドレスが返るようにすることでLAN内からも同じホスト名でサーバーにアクセスできていました。

ところが先の記事の体制にしたことで、IPv6でのDNSサーバーがDHCPv6かRA経由で振ってくるようになってしまい、macOSの仕様上そちらが優先されてしまうぽいのです。つまり、Macから自宅サーバーのホスト名を調べるとIPv4についてもプライベートIPではなくグローバルIPがWiMAX2+経由で返ってきてしまい、結果としてRTX(光回線)経由だとLAN内サーバーが見えなくなってしまいます。

回避手段として簡単なのはDNSサーバーを固定しまうことですが、外に持ち出すノートPCだとそれはそれでトラブルになってしまいます(あるいは逐一ネットワークプロファイルを切り替えなければならなくなる)。

そこで見つけた方法は、/etc/resolver/フォルダにドメイン毎のDNS設定を追加する方法です。自ドメインに関する問い合わせだけは、強制的にRTXのIPアドレスをDNSサーバーに使うようにします。またそれだけだと外出先で問題になるので、短めのタイムアウトを指定しておき、外出先でローカルIPアドレスによるDNSサーバーから返事がもらえなければあきらめてDHCP由来のDNSサーバーを使う、という感じにするわけです。

方法は、/etc/resolver/フォルダに、振り分けたいドメイン名(例えばhoge.com)をファイル名としたテキストファイルを作り、以下のような内容を書いておきます。

nameserver 192.168.0.1
options timeout:1

1行目は文字通り指定したいDNSサーバー。2行目はタイムアウトまでの秒数。これだけです。再起動なども必要なく反映されるぽいです。

scutil –dns

とすると、現在のDNS設定が出てくるので、

resolver #9
domain   : hoge.com
nameserver[0] : 192.168.0.1
options  : timeout:1
flags    : Request A records, Request AAAA records
reach    : Reachable, Directly Reachable Address

などという表示が見つかればOKです。*.hoge.comに関するDNS問い合わせは192.168.0.1を使う、ただし1秒で応答がなければ諦めてシステムデフォルトのDNSサーバーを利用、という形になります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)