Mac で IP を手動設定するときは必ず DNS を指定する

Mac ではインターフェイスDNS の指定をしないと、インターフェイスに設定したデフォルトルートが有効になりません。

IPの疎通確認をする際に同セグメントには通信できるが、別セグメントには通信できないという事象が発生します。

検証

以下の環境で解説します。

~ % sw_vers
ProductName:    Mac OS X
ProductVersion: 10.15.4
BuildVersion:   19E287
~ %

次のように IP, Default GW, DNS を手動設定します。

f:id:nozawana44:20200507224013p:plain
Mac ネットワークの設定 DNSあり

Mac のデフォルトルートを確認します。

stackoverflow.com

~ % route -n get default
   route to: default
destination: default
       mask: default
    gateway: 192.168.1.254
  interface: en0
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0
~ %

設定したデフォルトルートがMac に反映されていることがわかります。

続いてDNSの設定を削除して、デフォルトルートを確認してみます。

f:id:nozawana44:20200507224121p:plain
Mac ネットワークの設定 DNSなし

~ % route -n get default
route: writing to routing socket: not in table
~ %

設定は行っているのにも関わらず、デフォルトルートが Mac に反映されていません。この状態から ping を実行してみます。

~ % ping -c 1 1.1.1.1
PING 1.1.1.1 (1.1.1.1): 56 data bytes
ping: sendto: No route to host

^C
--- 1.1.1.1 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
~ %

ping: sendto: No route to host :宛先へのルートがないことを示すメッセージが表示されました。

まとめ

Mac で IP を手動設定する際の注意点についてまとめました。Mac をネットワークの検証に使用するときは、DNS の指定を忘れないようにしましょう。

補足

DHCP で IP を設定する場合でも、DNS を配り忘れていると同様の問題が起きます。