TweetDeckが繋がらなくなったのが最初で,以降夜フクロウもダメになり,最近は公式クライアントでなんとかしていたのですが,ついにそれすらも全く繋がらない状態になってしまったため,さすがに本腰を入れようかと思い色々やったら思ったよりもハマってしまったという話です.
環境
症状
- Twitterクライアントを起動しても全く読み込まない
- ブラウザ等は正常にTwitterに接続できる
- コンソール等からpingしたりtracerouteしてもちゃんとtwitter.comに到達できる
- プロキシ環境下でもなんでもない自宅のWi-Fi環境下で起きる
- そのWi-Fiに繋がっている他の端末でも正常にTwitterが使える
原因究明
まずWireshark*1でパケット解析をしてみることに.とりあえずブラウザ等を閉じて,http || ssl
でフィルタリングしてみると,Twitterクライアントを起動しても一切パケットが飛んでいない(!)ことが分かりました.
名前解決が上手くいっていないのではということで,dns
でフィルタリングしてみましたが,正常に解決している模様.
しかし,フィルタを取っ払って見てみると,どうも大学のdnsサーバらしきアドレスに対してひたすら"TCP Retransmission"*2している模様.おそらくDNS周りのゴミが残っていて正常に通信できていないのではという仮説を立て色々やってみました.
試行錯誤
試行1: 再起動
何か困ったら再起動.しかし効果無し.
試行2: DHCPリース更新
効果無し.
試行3: ローカルのDNSキャッシュをクリア
通常ネットワークの切断時に行われるはずですが,一応
$ sudo killall -HUP mDNSResponder
効果無し.
試行4: ネットワーク設定からDNSに8.8.8.8を追記
効果無し.
解決: ネットワーク設定から「自動プロキシ検出」をオフに
正直半ば諦めていたのですが,たまたま気付いて切ってみたら上手くいったので心底驚きました…
検出だけなら問題ないだろうと思っていたのですが,もう一度オンにするとまた接続できなくなっていたので,おそらくこれが原因と思われます.
ブラウザ等他のものが正常動作していたせいで何が原因なのかの切り分けが難しく,かなりハマりました.とはいえ,プロキシ検出を切ってしまうとまた大学に行くたびにこれをオンにしないといけなくなって面倒なので何かしら対策はしたいところ…
まとめ
「Twitterクライアントがつながらないときはプロキシ検出を切れ. 」
今までのOS Xでは特に問題がなかったのでmacOS Sierraから…?それとも僕の環境に特異的な何かなのでしょうか…とはいえ治って良かったです.
*2:パケットの再送.通常ネットワークの状態が悪いときとかに起こるものらしい.