无法通过 VPN 连接到服务器上的 HTTPS

Can not connect to HTTPS on a server via VPN

我在家里有一台服务器,另一台在 VPS 主机上。我试图在它们之间创建 L2TP/IPsec 隧道。隧道正常工作,一台服务器可以从另一台服务器访问 HTTP 服务(VPS 服务器是客户端,家里的服务器是我正在连接的 VPN 服务器和我正在尝试的 运行s HTTP 和 HTTPS 服务从 VPS 服务器访问)。但是当我尝试通过 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 时,连接不工作。

问题出在 L2TP 连接的 MTU 设置上。我不得不将 MTU 降低到 1300,因为 HTTPS + IPSec 增加了太多开销,以至于数据包超过 1500,这是以太网和 SSL 数据包的上限,在第 3 层设置了 DF(不分片)标志,禁用数据包分片。

通常情况下,服务器会发送特殊的 ICMP 消息来通知 VPN 服务器这个问题,但我的 ICMP 被防火墙阻止了,所以没有错误,只是连接无法建立,因为包太大了刚被丢弃。