Iptables

在 Squid 伺服器上需要幫助作為網關 + iptables

  • February 7, 2018

區域網路上有幾台 PC,所以我選擇了一台並將其設置為網關伺服器,通過在埠 3128(Ubuntu 作業系統)上執行 Squid,然後在其上執行以下 2 個命令:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

(其他PC的網關dhcp ip都設置為這個Squid PC IP)

但是,當其他 PC 瀏覽 HTTP 網站時,網站不顯示,而是 Squid 錯誤頁面顯示“無法檢索請求的 URL”,URL 為:“/”

魷魚日誌:

0 192.168.0.130 NONE/400 3522 GET / - HIER_NONE/- text/html

所以我猜 Squid 無法讀取請求中的主機名。

如果沒有上面的 iptables 命令,所有其他 PC 都可以正常讀取網站並且它們都可以正常工作。

所以這不是網關設置問題,而是在 iptables 或 Squid 本身不理解 iptables 路由的請求之間的某個地方。

以前有人遇到過類似情況嗎?任何關於哪裡出錯的建議將不勝感激!!!花了我一天的時間擺弄到目前為止,沒有任何線索!

非常感謝!

解決方案

攔截放在 Squid 代理埠配置中:

http_proxy 3129 intercept

解釋

我們必須區分透明代理和顯式代理。

顯式代理將要求瀏覽器向代理髮送正確的標頭(即http://proxy:port/http://realwebsite.com/test)。這解釋了為什麼當我將瀏覽器指向代理時,它起作用了;但是如果我使用上面的 iptables 命令,它沒有!

另一方面,*透明代理不是在瀏覽器/使用者級別配置的,而是在路由級別完成的(即上面的 iptables 命令)。*所以當代理收到請求時,其實是http://realwebsite.com/test>。如果代理沒有在這種模式下配置,它正在做的是檢索自己<http://proxy:port/test

而且因為我的代理處於顯式模式,而不是透明模式,所以它不能與 iptables 命令一起使用。

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