透明代理讓用戶瀏覽器無需任何設定,流量自動經由 Squid 快取代理,實現頻寬節省、存取控制與內容過濾。本文涵蓋架構原理、部署前置條件、Squid 2.x 核心設定與 iptables 導流實作。
| 條件 | 說明 | 驗證方式 |
|---|---|---|
| 客戶端網關指向 Squid | 所有出站封包必須經過 Squid 主機 | 客戶端 traceroute 確認第一跳為 Squid IP |
| 客戶端 DNS 正常解析 | 瀏覽器需自行解析域名,Squid 不代理 DNS | nslookup www.google.com 正常回應 |
| Squid 服務正常運行 | 支援 1.x/2.x,建議 2.x 穩定版 | squid -k parse 設定檔語法檢查通過 |
編輯 /etc/squid/squid.conf 新增:
http_port 3128 transparent # 2.6+ 版本建議加 transparent 關鍵字
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
關鍵說明:
httpd_accel_host virtual:啟用 HTTP 加速器模式,接受非代理請求httpd_accel_uses_host_header on:從 Host 標頭取得真實目標主機systemctl restart squid 或 /etc/init.d/squid restart# 假設 Squid 監聽 3128,內網介面 eth1
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# 可選:排除本機產生流量、特定 IP、HTTPS(443 無法透明代理)
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -s 192.168.1.100 -j ACCEPT
儲存規則:service iptables save 或 iptables-save > /etc/sysconfig/iptables。
tail -f /var/log/squid/access.log 應見用戶真實 IP 與請求 URLhttps://cache.example.com/squid-internal-static/icons/squid.png 可見 Squid 圖示確認代理生效