透明代理讓客戶端無需手動設定瀏覽器代理,即可透過網關強制導流 HTTP 流量至 Squid 快取伺服器。核心機制為:NAT 閘道器利用 iptables REDIRECT 或 DNAT 將目的埠 80 的封包攔截轉發至 Squid 監聽埠(預設 3128),Squid 以透明模式處理請求並回應。
eth0(內網 192.168.0.1)、eth1(ADSL 撥號獲取 ppp0)192.168.0.200 或與 NAT 共機eth0echo 1 > /proc/sys/net/ipv4/ip_forward
# 永久生效請修改 /etc/sysctl.conf: net.ipv4.ip_forward = 1
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
情境 A:Squid 與 NAT 同機
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
情境 B:Squid 獨立部署(192.168.0.200:3128)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.200:3128
關鍵差異: REDIRECT 將封包導向本機指定埠;DNAT 改寫目的 IP:PORT 轉發至遠端主機。生產環境建議情境 B 解耦網關與快取層。
編輯 /etc/squid/squid.conf,關鍵行:
http_port 3128 transparent
其他 ACL、快取目錄、記憶體參數按負載調整。重啟服務:service squid restart
tail -f /var/log/squid/access.log 應見 TCP_MISS 或 TCP_HIT 記錄tcpdump -i eth0 port 80 見封包導向 3128 埠OUTPUT 鏈同樣加入 DNAT 規則iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtuservice iptables save
# 或手動存入 /etc/sysconfig/iptables
配合 chkconfig squid on 實現開機自動生效。