宅内NWにVPNで接続後Grafanaを読み込めない現象が多発した件
はじめに
SynologyのNASさんがVPNサーバになるので外出先から宅内NWにVPNで接続してGrafanaから電気の使用状況を確認できるとすごくハッピーだったんだけど、どうも最近調子が悪い様子。ブラウザが読み込み終わらない問題が多発するようになりました。
どうにか問題がわかって解決できました。うれしい。
参考文献
おそらくNW関連だとあたりをつけ、どうにかパケットキャプチャできないかと模索していたところ、NETGEARのGS305Eに出会いました。
ポートミラーリングできるスイッチの写真忘れた笑NETGEARのGS305Eです pic.twitter.com/HvhkObW8Ps
— てちた/TeTiTa (@TeTaRo_tw) 2021年7月2日
こいつを使えばポートミラーリングができるため、イーサネットに流れるパケットを眺めて何か問題がわかるかもしれないと思いました。
ポートミラーリングさせて、Wiresharkでパケットを眺めていたところ、とあるフレームを発見。
[TCP Retransmission] 22 → 53136 [ACK] Seq=33724 Ack=3058 Win=64384 Len=1268 TSval=1780348413 TSecr=3536455
[TCP Dup ACK 94298#1] 53136 → 22 [ACK] Seq=3058 Ack=33724 Win=121984 Len=0 TSval=3536469 TSecr=1780348195 SLE=37528 SRE=38180 SLE=34992 SRE=38180
ICMP 590 Destination unreachable (Fragmentation needed)
どうやらVPN接続によってヘッダが付きまくったせいでMTU(Maximum Transmission Unit)値よりも大きいパケットが流れてしまっていたようです。これに気が付くまでかなりかかっちゃいました。エラーメッセージはその理由を整理することが大切だと再確認させられる事象でした。なんだかいつもエラーメッセージを読み飛ばしてしまう癖が。。。
まあでも、HTTPとTCPのプロトコルについて勉強になったのでよかったですが。以下サイトが役に立ちました。
原因が分かったので、以下のアプローチでパラメータのチューニングをしてみました。
①OpenVPNのtun-mtu値
⇒VPNセンターのconfが特殊な場所にあったため
⇒Permission deniedが出ちゃうときのお供
⇒チューニング方法
②サーバのeth0のmtu値
実は①だけでは解決しなかったため、大元のサーバがあるところのeth0のmtu値を強制的に変えてしまいました。パワープレイすぎるかな…?
やり方は以下の通り。
- パソコン(A)でWiresharkを起動してパケットを見る
- パソコン(B)でVPN接続して対象のサーバへSSH接続
- パソコン(B)でちょうどフラグメントが起きそうな結果を表示させる⇒パソコン(A)でTCP Retransmissionが多発⇒パソコン(B)で途中からコンソールが動かなくなる
- パソコン(A)で対象のサーバへSSH接続(!!ローカルから直接!!)
- パソコン(A)で以下コマンドを実行してeth0のmtu値を変更
sudo ifconfig eth0 mtu XXXX - XXXXを少しずつ変えて、パソコン(B)のコンソールが表示される値を探る
- いい感じにコンソールが表示できればOK
完走した感想
無線ルータをちょっと良いものに変えてからこの現象が起こるようになって前は起こらなかったのにとおもっていたのですが、大きなファイルがブラウザのキャッシュに残っていれば(家のNWにいるときにダウンロードした状態)、表示ができたんだなあと原因から推測することができました。なるほどそういうことだったか。
いやーーーーここ数か月の悩みが消えてうれしいぞ!