Routing

Http代理根據主機頭選擇外部介面

  • May 21, 2013

我在工作中有一個非常具體的案例,我有幾個外部 IP 地址(完整的 C 類),我需要選擇我正在使用的出站 IP 地址。請求是http,應用伺服器是內網不同的機器。為簡單起見,我想將其保留為 http 代理,這樣我就不必更改我的應用程式碼。

要求:

  • 代理查找像“External-Ip: xyza”這樣的標頭,並通過具有該外部 IP 地址的介面發送流量。我可以輕鬆地修改標頭,所以如果我需要發送介面名稱就可以了。
  • 如果標頭不存在,代理將隨機選擇一個,然後返回它用作 http 標頭的介面。

實現這一目標的最簡單方法是什麼?

對於它的價值,Squid 本身就內置了它。

我使用 ‘acl outbound0 req_header .2$’ 將名為 ‘outbound0’ 的 ACL 設置為 .2 外部 IP。我使用腳本生成了剩餘的 ACL,並將它們硬編碼在配置文件中。

然後,我將它與 tcp_outgoing_address 結合使用,後者根據 ACL 選擇外部 IP。結果如下所示:

acl outbound0 req_header TS-Outbound-IP \.20$
acl outbound1 req_header TS-Outbound-IP \.21$
acl outbound2 req_header TS-Outbound-IP \.22$
acl outbound3 req_header TS-Outbound-IP \.23$
acl outbound4 req_header TS-Outbound-IP \.24$
acl outbound5 req_header TS-Outbound-IP \.25$

tcp_outgoing_address 192.168.1.20 outbound0
tcp_outgoing_address 192.168.1.21 outbound1
tcp_outgoing_address 192.168.1.22 outbound2
tcp_outgoing_address 192.168.1.23 outbound3
tcp_outgoing_address 192.168.1.24 outbound4
tcp_outgoing_address 192.168.1.25 outbound5

目前,這非常適合我們的需要。我會保持這個問題的開放性,因為這種方法看起來很笨拙,而且我對替代方案很感興趣。

引用自:https://unix.stackexchange.com/questions/76247