概要
先日VPNサーバを再起動したところ、基本的に内部ネットワークに接続できるものの特定のサーバに対し
- 疎通(ncコマンド)自体はできる
- 3 way handshakeもできる
- Webページは見れない
- 会社からのアクセスだとWebページも見れる
という状況に陥ったのでその対処を書きます。
環境
- Pritunl Server v1.6.752.82
- Wireshark v2.6.3
マシン | IP |
---|---|
自宅PC | xxx.xxx.xxx.20 |
接続したいサーバ | xxx.xxx.xxx.116 |
VPNサーバ
症状
Wiresharkで調査することにしました。
3way handshakeはできてる
TCP Previous Segment not captured
がちょこちょこ出ていた
しかし途中でパケットをロスト(TCP Previous Segment not captured
)していました
パケットのDFフラグはtrue
経路途中でのパケットの分割は禁止されていました。
解決方法
VPNサーバのセキュリティグループにICMP
の許可を入れたところ疎通できるようになりました。
ref: VPN環境で閲覧できないWEBサイトの原因は、MTU... : old_3流プログラマのメモ書き
おそらく途中のルータのMTUが低く、かつDF=trueでルータ側では分割できないため送信元にICMPで再送リクエストを投げるものの、AWSのSecurityGroupの設定でICMPがブロックされていたので再送されなくなったと考えられます。
疑問点
なぜ以前はICMPのSecurityGroupが不要だったのか
未解決です。再起動しただけでなぜ急にアクセスできなくなったのか。
見れない時はDup ACKを1回しか送ってない
解決してから再びパケットを調べたところ、
解決後のパケット
パケットがロストしたとしても、Dup ACKを4回送っておりサーバから再送されています。
解決前のパケット
パケットをロストしてからも4回送らないせいでサーバから再送されていません。
ICMPブロックして見れる環境でもMSSは同じ
前述の解決方法の考え方だと、途中経路のMSSが小さいせいでパケットが渡せなくなっている〜ということになりますが、アクセス可能だった会社環境でもアクセスできない自宅環境でもMSS=1352
で同一でした。
まとめ
今回は「とりあえず動いたけど原因は究明できていない」という気持ち悪い状況でした。
ただ備忘録として残しておきます。