出先のホテルや優先LANしか整備されていない環境で便利なMacOSのインターネット共有。
こんな具合に手元の端末用にwifiアクセスポイントを作れます。
(wired network) --ethernet-- (mac) --wifi-- (mobile)
便利なインターネット共有ですが、ある日トラブルに見舞われます。
mobile端末にIPアドレスが配布されない!
手元のandroid端末から接続しようとすると、「IPアドレスを設定中...」から進まなくなってしまい、接続できなくなってしまいました。
はて、と思い最近なにかやったかなと記憶を巡ると標準のfirewallをオンにしたのを思い出しました。
firewallをオフにして、再度android端末から接続すると1秒もかからずにwifi接続が確立されました。
原因はだれ?
firewallをオフにして運用したくなかったので、firewallのルール変更で対応する方針に。
mac標準firewallはポート番号basedのルールではなく、アプリケーションbasedルールなので、アドレス配布を担当しているDCHPプロセスを特定します。
% lsof -i:67
# => ヒットせず
% sudo lsof -i:67
OMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
launchd 1 root 01u IPv4 0x000000000000 0t0 UDP *:bootps
# ※FDなどは適当な値に置換
Appleの資料1によるとDCHP serverを担当しているのは/usr/libexec/bootpd
の用ですが、bootpd
は実際にはlaunchdから起動されているので、ポート管理的にはlaunchd
プロセスがUDP:67
を管理しているように見えるよう。
解決へ
あとはfirewallの設定を変更するだけ。
システム環境設定 > セキュリティー&プライバシー > Firewall > オプション
から/sbin/launchd
を追加してやる。その際、/sbin
ディレクトリに行くためcmd + shift + Gキー
で直接/sbin
ディレクトリを表示してやる必要があるので注意。
めでたくfirewall使用環境下でインターネット共有できるようになりました。