我在大学里通过 UDP 运行 Openvpn 时遇到了问题网络防火墙正在丢弃 UDP 连接。由于 http 和 https 运行正常,并且假设防火墙正在检查数据包头,我尝试使用 https 隧道运行 Openvpn隧道。我没有成功,因为 Openvpn 使用的是 UDP。因此,我让 openvpn 使用 TCP,它成功了。但是,后来我发现防火墙允许所有 TCP 连接(并且没有检查数据包头),我能够在没有 https 隧道的情况下运行 Openvpn。
我的问题是:为什么 Openvpn 使用 UDP 协议时无法通过 https 隧道工作?为什么它可以通过相同的 https 隧道与 TCP 一起工作?难道不是 TCP 数据包承载 https 流量,而不是 https 承载 TCP 或 UDP 数据包?换一种方式提出我的问题:默认情况下 https 是通过 TCP 运行的,那么当 https 被设计为承载 UDP 数据包而不是 TCP 数据包时,为什么它要大惊小怪(因为它只是创建了一个传输隧道)?
答案1
来自 stunnel 常见问题解答:
我可以通过 stunnel 转发 UDP 服务吗?
到目前为止,情况并非如此。Stunnel 可与 SSL 配合使用,而 SSL 仅在 TCP 上运行。有多种方法可以通过 TCP 转发 UDP 数据包,原则上这些方法应该可以在 stunnel 上运行。
SSL 是面向连接的协议,而 UDP 是无连接的协议。因此您无法通过 TCP 转发 UDP。
答案2
我要冒险猜测一下,因为您的配置细节并不在问题范围之内……
如果您只是将 OpenVPN 指向 stunnel 端口,并且 OpenVPN 使用 UDP,而 stunnel 使用 TCP,那么它们将永远无法连接。网络端点由 IP 地址、端口和协议如果您有 stunnel 正在监听 (127.0.0.1, 4430, tcp),而 OpenVPN 正尝试连接到 (127.0.0.1, 4430, udp),那么它将无法连接到 stunnel。
我没有看到 stunnel 有任何用于 UDP 操作的选项,所以一定是发生了这种情况。这与你所说的将 OpenVPN 切换到 TCP 时的工作方式相吻合。
UDP 和 TCP 是完全不同的协议,使用不同的 API。因此您不能直接互换它们,生产者和消费者需要专门为该协议编写。可以通过 SSL 代理 UDP,但这需要专门为此编写的隧道软件。我不知道有哪个软件支持这一点。