Https隧道用于携带TCP和UDP数据包

我在大学networking上通过UDP运行Openvpn存在一个问题。 防火墙正在丢弃UDP连接。 由于http和https工作正常,并假设防火墙正在检查数据包头,我试图通过使用stunnel的https隧道运行Openvpn。 我没有成功,因为Openvpn使用UDP。 所以,我得到openvpn使用TCP和它的工作。 但是,后来我发现防火墙允许所有的TCP连接(并且不包含数据包头),而且我可以在不使用https隧道的情况下运行Openvpn。

我的问题是:为什么Openvpn在使用UDP协议时不能通过https隧道工作? 为什么在同一个https隧道上使用TCP? 是不是携带httpsstream量的TCP数据包,而不是携带TCP或UDP数据包的https数据包? 以不同的方式提出我的问题:默认情况下HTTPS是通过TCP运行的,为什么HTTPS在传输UDP数据包而不使用TCP的时候会大惊小怪(因为它只是创build一个传输隧道)?

从stunnel常见问题解答:

我可以通过stunnel转发UDP服务吗?

如迄今为止所描述的,没有。 Stunnel使用仅在TCP上运行的SSL。 有办法通过TCP转发UDP数据包,原则上这些数据包应该能够在stunnel上工作。

SSL是面向连接的协议,而UDP是无连接的。 因此,你不能通过TCP转发udp。

我会在这里出去,猜测,因为你的configuration细节不在问题中…

如果您只是在通道端口指向OpenVPN,并且OpenVPN正在使用UDP,但是stunnel正在使用TCP,它们将永远不会连接。 networking端点由IP地址,端口和协议标识。 如果你有听信(127.0.0.1,4430,tcp),并且OpenVPN尝试连接(127.0.0.1,4430,udp),它将无法连接到stunnel。

我没有看到stunnel有任何UDP操作选项,所以这一定是发生了什么事情。 当你将OpenVPN切换到TCP时,这个问题和你所说的有关。

UDP和TCP是完全不同的协议,使用不同的API。 所以你不能只交换它们,生产者和消费者需要专门为协议书写。 可以通过SSL代理UDP,但是需要专门为此编写的隧道软件。 我不知道有一个支持。