Ubuntu

容器的全域 http 代理

  • December 3, 2018

在我的 docker 容器中,有一些應用程序會發出 http(s) 請求。如何配置容器以便所有這些請求都通過外部 http 代理?

Docker 文件建議設置HTTP_PROXYenv var,但是,據我了解,這是一個建議設置,容器中的應用程序不會強制使用它。

我無法更改主機系統上的任何內容,因此我正在尋找一些聰明的 docker 或容器作業系統配置。容器作業系統是 ubuntu:18.04。

如果要強制使用代理,則需要在網路級別攔截流量。這總是有一個缺點,即 HTTPS 流量不容易被攔截,因為您需要通過受信任的 CA 進行中間人操作。

如果 HTTPS 不是問題(因為您決定忽略它,或者因為您決定將自己的 CA 部署到每個容器的證書信任儲存區),那麼會想到幾個攔截流量的點:

  1. docker 主機系統(又名容器的預設網關)
  2. docker主機系統的預設網關

在任何一種情況下,您都需要使用iptables(或類似的防火牆工具集)來重定向來自容器的流量port 80443在 HTTPS 的情況下)以通過代理重定向。

使用iptables它可能看起來像

sudo iptables -t nat -A PREROUTING -i eth1 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3129

3129例如,SQUID 可能正在偵聽 http 連接的埠在哪裡。

更多資訊可以在 SQUID 配置範例中找到:https ://wiki.squid-cache.org/ConfigExamples/Intercept/LinuxRedirect

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