我处于受限网络中,尝试连接到我的 OpenVPN 服务器 (TCP/443) 时,在 OpenVPN 之后,TCP RST 欺骗中断了连接P_CONTROL_HARD_RESET_CLIENT_V2
。我记录了两侧的流量,并注意到两侧都收到了连接重置,但实际上两侧都没有生成连接重置,即 RST 是从中间的防火墙注入的。
有没有办法将 OpenVPN 伪装成看起来更像正常的 HTTPS 流量?
答案1
我找到了一个解决方案并想分享它。
正如在其他地方解释的那样,例如这里,防火墙可能会通过阻止端口或执行深度数据包检测 (DPI) 来阻止 VPN 连接和流量,例如由 OpenVPN 创建的连接和流量。
在第一种情况下,使用不同的端口(例如 https 端口 443)就足够了,但是对于后一种情况,需要更精细的方法。
如今,包括中国“长城”在内的越来越多的防火墙都采用了深度封包检测 (DPI)。显而易见的解决方案是将 VPN 流量伪装成防火墙未阻止的其他流量。HTTPS 所采用的 SSL/TLS 就是一个完美的选择,因为内容在握手后被加密,这使得防火墙无法识别传输的数据。
到隧道SSL/TLS 连接中的 OpenVPN 流量,SSL 隧道如下隧道可以按照描述使用这里它会进一步降低连接性能,但会使防火墙无法区分通过安全连接访问网站的用户和使用 VPN 的用户(请注意,防火墙可能会在超时或数据量限制后终止连接)。
解释了另一种不会导致性能下降的解决方案这里。此方法使用同一端口回复与同一服务器的两个连接,使用 OpenVPN 的一项功能,该功能允许非 OpenVPN 流量由 OpenVPN 服务器转发到同一服务器上的另一个应用程序。第一个连接将是默认的 HTTPS 连接,防火墙不会阻止它,因为防火墙将 TLS 握手识别为有效流量。在远程站点,OpenVPN 将此流量转发到启用 SSL 的 nginx 服务器,该服务器回复并设置 TLS 连接。建立该连接后,OpenVPN 连接将看起来像是与 nginx Web 服务器的 TLS 连接的一部分的加密数据,但会被 OpenVPN 服务器正确识别。
我还没有测试第二个连接,但是我预计它不如第一个解决方案那么强大,因为 nginx 连接可能在某个时候关闭,从而使 OpenVPN 流量脱颖而出。