Nginx

無需列舉所有後端的通用基於 SNI 的透明 TLS 代理?

  • June 14, 2019

我的情況是,我必須在一組數千個後端 https 網路伺服器前提供一個透明的反向代理,並且列表經常(相對)變化。

我知道我可以haproxy根據客戶端與客戶端 Hello 一起發送的 SNI 字元串來選擇要連接的後端(參見例如,反向代理可以使用 SNI 和 SSL 傳遞嗎?),但似乎我需要列舉所有後端並在配置中單獨引用它們;即“如果 SNI 是某某,請與後端交談”。

相反,我只想從客戶端 Hello 中獲取 SNI 字元串,在 DNS 中查找它,連接到 IP DNS 提供(在 tcp 埠 443 上),將客戶端 hello 中繼到伺服器,然後在客戶端之間繼續中繼和伺服器。

我不想檢查流量,也不想在客戶端上安裝新證書。

haproxy可以做到這一點嗎?如果沒有,還有什麼其他程序可以?

我最終使用nginx流 SSL 預讀模組

配置非常簡單:

stream {
   server {
       resolver 127.0.0.1;
       listen 443;
       ssl_preread on;
       proxy_pass $ssl_preread_server_name:443;
   }
}

http { }甚至不需要任何塊,但nginx如果我省略它,我會出現段錯誤,所以我http { }在配置中有一個空塊。僅載入流模組。resolver需要 nginx 才能在 DNS 中查找後端名稱;我在 127.0.0.1 上有一個記憶體遞歸解析器。

我這樣做是為了讓所有需要連接到任何後端的客戶端都連接到我的 nginx(使用水平分割 DNS 和 DNAT 的組合),並且 nginx 代表他們連接到實際的後端。它對客戶完全透明。

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