Macを使っていると、アプリを初回起動した際に「"iTerm2"がローカルネットワーク上のデバイスを検索して接続しようとしています。許可しますか?」というダイアログが表示されます。ここで「許可しない」を選んでしまうと、iTerm2からの内部LAN(社内ネットワーク・ローカルホスト以外)へのアクセスがブロックされます。
こんな症状が出たら疑う
ping 192.168.x.xが通らない(Request timeout)curl http://192.168.x.x:8080/が接続できない- 社内の内部APIやサーバーにアクセスできない
localhostや127.0.0.1は問題ないが、LAN上の他のホストに繋がらない
外部インターネット(google.com など)には繋がるのに内部LANだけ繋がらない場合、このアクセス権限が原因の可能性が高いです。
原因
macOS Ventura(13)以降、OSはアプリごとにローカルネットワークへのアクセスを管理しています。「許可しない」を選ぶと、そのアプリからのLANアクセスがOSレベルでブロックされます。
ダイアログは一度選ぶと再表示されないため、「なぜかLANに繋がらない」と悩み続けることになります。
直し方
手順
- Apple メニュー → 「システム設定」を開く
- 左サイドバーから 「プライバシーとセキュリティ」 を選ぶ
- 右側を下にスクロールして 「ローカルネットワーク」 をクリック
- アプリ一覧の中から 「iTerm2」(または該当アプリ)を探し、トグルをオンにする
- iTerm2 を再起動する
- 再度
pingやcurlを試す
確認コマンド
設定を変えたあと、ターミナルから接続確認します。
# LAN上のホストにpingを飛ばす ping -c 3 192.168.1.1 # 内部サーバーにリクエストを送る curl -v http://192.168.1.100:8080/health
Request timeout から PING 192.168.1.1: 56 data bytes のように変わればアクセス権限は解除されています。
Terminal.app・その他アプリも同様
| アプリ | よくある症状 |
|---|---|
| iTerm2 | ping・ssh・curl が内部LANに届かない |
| Terminal.app | 同上 |
| Postman | 内部APIへのリクエストが失敗する |
| VSCode(Remote SSH) | 内部サーバーへの接続が失敗する |
| Docker Desktop | コンテナから内部LAN接続が不安定になる |
ダイアログが再表示されない場合
「ローカルネットワーク」の設定画面にアプリが表示されない場合は以下を試してください。
# プライバシーデータベースをリセット(対象アプリのエントリを削除) tccutil reset LocalNetwork com.googlecode.iterm2
コマンド実行後にiTerm2を再起動すると、次回LAN接続時にダイアログが再表示されます。アプリのBundle IDは以下で確認できます。
osascript -e 'id of app "iTerm2"' # com.googlecode.iterm2 osascript -e 'id of app "Terminal"' # com.apple.Terminal
まとめ
| 手順 | 場所・コマンド |
|---|---|
| 設定を元に戻す | システム設定 → プライバシーとセキュリティ → ローカルネットワーク |
| トグルをオンにして再起動 | 対象アプリを探してオンにする |
| 記録をリセット | tccutil reset LocalNetwork <BundleID> |
「localhost は繋がるのに内部LANだけ繋がらない」と感じたらまずこの設定を疑いましょう。
curlを使った接続確認の方法は「curl入門:GET・POST・PUT・認証・クッキーの使い方まとめ」を参照してください。