MacでローカルネットワークへのアクセスをiTerm2やTerminalで誤って不許可にした場合の直し方

スポンサーリンク

Macを使っていると、アプリを初回起動した際に「"iTerm2"がローカルネットワーク上のデバイスを検索して接続しようとしています。許可しますか?」というダイアログが表示されます。ここで「許可しない」を選んでしまうと、iTerm2からの内部LAN(社内ネットワーク・ローカルホスト以外)へのアクセスがブロックされます。

こんな症状が出たら疑う

  • ping 192.168.x.x が通らない(Request timeout
  • curl http://192.168.x.x:8080/ が接続できない
  • 社内の内部APIやサーバーにアクセスできない
  • localhost127.0.0.1 は問題ないが、LAN上の他のホストに繋がらない

外部インターネット(google.com など)には繋がるのに内部LANだけ繋がらない場合、このアクセス権限が原因の可能性が高いです。

原因

macOS Ventura(13)以降、OSはアプリごとにローカルネットワークへのアクセスを管理しています。「許可しない」を選ぶと、そのアプリからのLANアクセスがOSレベルでブロックされます。

ダイアログは一度選ぶと再表示されないため、「なぜかLANに繋がらない」と悩み続けることになります。

直し方

手順

  1. Apple メニュー → 「システム設定」を開く
  2. 左サイドバーから 「プライバシーとセキュリティ」 を選ぶ
  3. 右側を下にスクロールして 「ローカルネットワーク」 をクリック
  4. アプリ一覧の中から 「iTerm2」(または該当アプリ)を探し、トグルをオンにする
  5. iTerm2 を再起動する
  6. 再度 pingcurl を試す

確認コマンド

設定を変えたあと、ターミナルから接続確認します。

# 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 pingsshcurl が内部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・認証・クッキーの使い方まとめ」を参照してください。