Https

用於傳輸 TCP 和 UDP 數據包的 Https 隧道

  • January 14, 2012

我在大學網路中通過 UDP 執行 Openvpn 時遇到問題。防火牆正在丟棄 UDP 連接。由於 http 和 https 工作正常並假設防火牆正在檢查數據包標頭,我嘗試使用stunnel在 https 隧道上執行 Openvpn 。我沒有成功,因為 Openvpn 使用的是 UDP。所以,我讓 openvpn 使用 TCP 並且它起作用了。但是,後來我發現防火牆允許所有 TCP 連接(並且沒有檢查數據包標頭),並且我能夠在沒有 https 隧道的情況下執行 Openvpn。

我的問題是:為什麼 Openvpn 在使用 UDP 協議時不能通過 https 隧道工作?為什麼它在同一個 https 隧道上與 TCP 一起工作?難道不是TCP包攜帶https流量,而不是https攜帶TCP或UDP包?以不同的方式提出我的問題:預設情況下,https 是通過 TCP 執行的,那麼當 https 用於傳輸 UDP 數據包而不是 TCP 時,為什麼要大驚小怪(因為它只是創建了一個傳輸隧道)?

從 stunnel 常見問題解答:

我可以通過 stunnel 轉發 UDP 服務嗎?

到目前為止,沒有。Stunnel 與 SSL 一起工作,它只在 TCP 上執行。有一些方法可以通過 TCP 轉發 UDP 數據包,原則上這些方法應該能夠通過 stunnel 工作。

SSL 是面向連接的協議,而 UDP 是無連接協議。因此,您不能通過 TCP 轉發 udp。

我將在這裡冒險猜測,因為您的配置細節不在問題中……

如果您只是將 OpenVPN 指向 stunnel 埠,而 OpenVPN 使用的是 UDP,但 stunnel 使用的是 TCP,那麼它們將永遠無法連接。網路端點由 IP 地址、埠和協議標識。如果您在 (127.0.0.1, 4430, tcp) 上進行了 stunnel 偵聽,並且 OpenVPN 嘗試連接到 (127.0.0.1, 4430, udp),它將無法連接到 stunnel。

我沒有看到 stunnel 有任何 UDP 操作選項,所以這一定是發生了什麼。這與您所說的將 OpenVPN 切換到 TCP 時的工作原理相吻合。

UDP 和 TCP 是完全不同的協議,使用不同的 API。所以你不能只是互換它們,生產者和消費者需要專門為協議編寫。可以通過 SSL 代理 UDP,但需要專門為此編寫的隧道軟體。我不知道有誰支持這一點。

引用自:https://serverfault.com/questions/349876