vpn 接続時に SSH2_MSG_KEXINIT でハングするときの対処
- pritunl v1.18.902.26
- Tunnelblick 3.5.7 (vpn client)
pritunl をつかってVPN環境が構築した。
モバイル回線だと特に不便なくVPN接続できていたのだが、有線にしたところssh が繋がらない状態になった。
% ssh app-001.cameong.local : debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_6.2 debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1 debug1: match: OpenSSH_6.6.1 pat OpenSSH* debug1: SSH2_MSG_KEXINIT sent
どうやらMTUの設定値関係してそう。
MTU = 1454
この PPPoE では Ethernet の MTU = 1500 の世界の中に、 RFC2516 的には 6 バイトの PPPoE へッダと 2 バイトの ppp へッダを加える。このため、 1500 - ( 6 + 2 ) = 1492 バイトまでのパケットしか通れないことになる。つまり MTU = 1492 にする。 しかし NTT 東日本の場合、更に内部のネットワークの事情で 「MTU = 1454 にしておけば、必ずどこでも通る」ということになっているらしい。 これらの数字は、 通常の Ethernet の通信に使われる 1500より小さくなるので、問題が起きる。と言える。
たしかに mtu 1500 になっている。
// ifconfig : utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 10.0.5.2 --> 10.0.5.2 netmask 0xffffff00
tunnelblick の設定にMTUの変更( link-mtu) を加える
verb 2 mute 3 push-peer-info ping 10 ping-restart 60 hand-window 70 server-poll-timeout 4 reneg-sec 2592000 sndbuf 100000 rcvbuf 100000 remote-cert-tls server + link-mtu 1454 comp-lzo no auth-user-pass key-direction 1
確認
% ifconfig : utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1384 inet 10.0.5.2 --> 10.0.5.2 netmask 0xffffff00
mtu 1454より小さくなってるけど。
この設定で、ssh 接続可能になりました。
気になる謎
- VPN接続なしの場合、en0 から接続してるのだが、en0 のmtu が1500 でも繋がるのなぜ。
- link-mtu 1545 なのに実際は1384 になってるのなぜ。
詳しい方、教えてください!
追記
- mtu 1454 だと時間がたったら、再度sshできなくなる。
- mtu 1400 でトライ