先日、自宅のネットワークに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サーバーを利用、という形になります。