興味本位でFlutter
の公式ページをのぞいてみようと思ったら、ERR_CONNECTION_REFUSED
が出てしまって、一般的な対策をしても解決しなかったときの対策についてのメモです。あまり同じ罠にはまる人はいないと思われますが、一応残しておきます。
最初に結論
Flutter
の公式ページのIPアドレスが127.0.0.1
だったことが要因の1つになっていました。過去にローカルのMacBook Proで起動していたPow
というサーバーが同じく127.0.0.1
を使っており、ずっと起動した状態になっていたため、アドレスがバッティングしてしまってERR_CONNECTION_REFUSED
が発生していました。
対策として、 全く使っていなかったPow
をアンインストールすることで正常にFlutter
公式ページ(127.0.0.1
)を開くことができるようになりました。
以下、対策に至るまでの経緯を順に書いておきます。
問題発生時の症状
MacBook ProからChromeを使ってFlutter
公式ページを開こうとしましたが、ERR_CONNECTION_REFUSED
が出てしまって正しく表示できませんでした。同じネットワークに接続しているAndroidタブレットでは問題なく表示されていました。
対策その1 一般的なERR_CONNECTION_REFUSED対策を試す
以下のサイトを参考にして、ERR_CONNECTION_REFUSED
エラーが出たときの一般的な対策を試しました。
1. ルーターの再起動
タブレットが問題なく表示できていることから考えても無駄だとわかっていましたが、おまじない程度と思ってやってみました。やはり改善は見られませんでした。
2. ChromeのキャッシュとCookiesの削除
1時間、24時間、7日間と期間を変えながら削除していきましたが、効果はなく、ERR_CONNECTION_REFUSED
が出ていました。
3. DNSキャッシュの削除
もはや何をやっているのかも理解できているかどうか怪しい内容になってきましたが、これも効果なしでした。また、MacBook Proでのプロキシ設定もファイヤーウォールも特に何も制限しておらず、誰が犯人なのか、迷宮入りしそうでした。
4. DNSアドレスの変更
すでにフレッツ光で設定したIPv6のDNSアドレスがありましたが、前述のサイトを参考にして8.8.8.8
を追加してみました。この対策も残念ながら効果がありませんでした。
5. Chrome拡張機能の無効化
単純にオフにするだけでしたが、やはり改善せず、ERR_CONNECTION_REFUSED
のままでした。
対策その2 DNSサーバーへの応答やPingコマンドを試す
DNSアドレスの変更を少しヒントとして、現状のフレッツ光のDNSサーバーにアクセスしてFlutter
公式ページ(flutter.dev
)を見つけられるのかどうか試してみました。
$ dig @2404:1a8:7f01:b::3 flutter.dev aaaa
; <<>> DiG 9.10.6 <<>> @2404:1a8:7f01:b::3 flutter.dev aaaa
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20276
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;flutter.dev. IN AAAA
;; AUTHORITY SECTION:
flutter.dev. 300 IN SOA ns1.googledomains.com. dns-admin.google.com. 2684359127 21600 3600 1209600 300
;; Query time: 54 msec
;; SERVER: 2404:1a8:7f01:b::3#53(2404:1a8:7f01:b::3)
;; WHEN: Thu Oct 29 11:31:36 JST 2020
;; MSG SIZE rcvd: 114
AUTHORITY SECTION
という項目を見る限り、なんか正しくGoogleのDNSにアクセスしているようなので、インターネットアクセス自体はできているようでした。
この結果をうけて、もう少しシンプルに考え、Ping
コマンドの実行から試してみることにしました。
$ ping flutter.dev
PING flutter.dev (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.050 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.127 ms
(中略)
64 bytes from 127.0.0.1: icmp_seq=10 ttl=64 time=0.093 ms
^C
--- flutter.dev ping statistics ---
11 packets transmitted, 11 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.050/0.118/0.165/0.029 ms
結果は全く問題なかったのですが、ここでようやく127.0.0.1
という特異なIPアドレスに気が付きました。
$ ping google.co.jp
PING google.co.jp (172.217.161.227): 56 data bytes
$ ping google.com
PING google.com (216.58.196.238): 56 data bytes
参考までにgoogle.co.jp
とgoogle.com
も同じくPing
を実行してIPアドレスを確認したところ、いかにも外部のIPアドレスというような値が返ってきました。
対策その3 127.0.0.1をChromeに打ち込んでみる
flutter.dev
ではなく、127.0.0.1
を直接Chromeのアドレスバーに打ち込んでみたところ、Pow
というサーバーの画面が表示されてしまいました。
ここにきて、ようやく犯人が見つかりました。以前ローカルであれこれと試していたときにインストールしたBasecamp製の**Pow
というローカルサーバーが127.0.0.1
を使用しており、IPアドレスがバッティングしていたことがFlutter
公式ページでERR_CONNECTION_REFUSED
が出てしまう問題の原因**でした。
対策その4 Powのアンインストール
ローカルサーバーなので単純にプロセスをkillすれば終わりと思っていたのですが、Pow
は何度killしても、アクティビティモニターで強制終了しても、蘇ってきてしまう厄介なやつでした。
仕方がないので127.0.0.1
をChromeに打ち込んで表示されたPowのページに書いてあった以下のコマンドを実行し、アンインストールしました。
$ curl get.pow.cx/uninstall.sh | sh
やっとERR_CONNECTION_REFUSED
が解決して、Flutter
公式ページを正しく表示できるようになりました。
余談
Pow
はすでに開発やサポートが終了して数年も経っているので、プロセスをkillしても蘇ってくるという想定外の動作が起きてしまったのかもしれないですね。なかなかたちが悪かったです。
あと、127.0.0.1
なんていうアドレスを使う辺りもGoogleのケレン味たっぷりという印象を受けました。やれやれ。