我在家里有一台服务器,另一台在VPS主机上。我试图在它们之间创建L2TP / IPsec隧道。隧道工作,一台服务器可以从另一台服务器访问HTTP服务(VPS服务器是客户端,家里的服务器是我连接的VPN服务器,运行我试图从VPS服务器访问的HTTP和HTTPS服务)。但是当我尝试通过HTTPS连接时,连接不起作用。
当我通过L2TP / IPsec从连接到另一个的远程服务器运行此命令时会发生这种情况: openssl s_client -connect SERVER:443 :
CONNECTED(00000003)
如果我尝试 wget --verbose https://SERVER/ :
Resolving SERVER (SERVER)... SERVERIP
Connecting to SERVER (SERVER)|SERVERIP|:443... connected.
因此连接已启动,但未交换任何数据。我已经使用nmap进行了测试,并且端口被检测为打开。
我尝试通过笔记本电脑连接到此VPN,从那里,我可以访问HTTP和HTTPS服务,但是从这台服务器,我只能使用HTTP。我已经尝试关闭数据包路径上的所有防火墙,但问题仍然存在。
我知道这是一个非常具体的案例,所以如果对问题没有实际答案,我至少要找到如何调试这个的指导原则,因为wget,curl和openssl s_clinent不提供我留在连接建立状态的任何细节。
更新:我在家庭服务器上打开了NAT上的443端口,并尝试直接从没有VPN的VPS服务器连接到HTTPS服务,并且它工作正常。因此,只有当我通过VPN访问HTTPS时,连接才起作用。
答案 0 :(得分:0)
问题是L2TP连接的MTU设置。我不得不将MTU降低到1300,因为HTTPS + IPSec增加了很多开销,以至于数据包超过1500,这是以太网和SSL包设置的第3层DF(Do not fragment)标志的上限,它禁用了包碎片。
通常情况下,服务器会发送特殊的ICMP消息来通知VPN服务器这个问题,但是防火墙阻止了ICMP,所以没有错误,只是连接无法建立,因为包太大而且只是丢弃。