重新回到ubuntu,使用ssh加上-vvv参数,检查登陆信息,发现是到这里卡住:
就是这一行debug1: expecting SSH2_MSG_KEX_ECDH_REPLY.
google搜了下,发现有两个可能的原因:
一个是因为IPv6导致,这个可以排除;
另外一个就是mtu问题,也即虚拟网卡mtu大于vpn服务器那边的网络mtu。
尝试修改openvpn的虚拟网卡mtu,发现真的可以成功登陆上:
利用ifconfig找到虚拟网卡的设备号:tun0
然后修改mtu为1200:
然后重新用ssh登陆服务器,能够成功登陆上。
问题解释
这里简单说下原因(可能不是很准确):
因为使用openvpn,本地主机与服务器的连接是通过tun0这个虚拟网卡设备;
vpn服务器到目标服务器之间的网络设备(简称为目标网络)规定的MTU比tun0的MTU小;
ssh 密钥交换阶段一次发送的数据一般大于 1500 字节,因此至少填满了一个 MTU;
通过tun0发出密钥交换信息,因为大于目标网络的MTU,而被丢弃;
将tun0设备的MTU设置为1200后,不会超过目标网络设定的MTU,因此可以正常交换密钥。
网友评论