在 Linux 架設 Squid 代理與 iptables 防火牆時,管理員常遇到延遲異常、緩存不生效、端口轉發失效等棘手問題。本文精選典型 Q&A,直擊痛點,提供可落地的排查思路與修復方案。
現象:10M 局域網部署 Squid 代理,客戶端
telnet proxy 3128或瀏覽器首次請求均需 79 秒才建立連接,之後瞬間加載完成。已將客戶端 IP 加入服務器/etc/hosts,telnet 正常但代理仍慢。
log_fqdn on 或 ACL 中使用域名),若 DNS 解析失敗會阻塞 75+ 秒(預設超時)。squid.conf 設置 log_fqdn off、ACL 僅用 IP 段、或確保 DNS 服務器可正常反解客戶端 IP。# 快速驗證dig -x 192.168.1.100 @ 若超時即為元兇。現象:
squid.conf配置cache_peer 170.169.5.71 parent 737 0 no-query,但客戶端訪問無緩存加速,每次都回源。
no-query 參數含義:禁止向上級代理發送 ICP 查詢。若上級代理支援 ICP/HTCP,去掉 no-query 可讓 Squid 查詢上級是否有緩存,命中則直接取回,減少回源延遲。cache_peer 170.169.5.71 parent 737 0 proxy-only no-query → 去掉 no-query 或改為 query-timeout=5 控制超時。cache_peer 170.169.5.71 parent 737 0 proxy-onlytail -f /var/log/squid/access.log | grep TCP_MEM_HIT 或 TCP_HIT 出現即生效。現象:配置
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.10:8080,外網訪問公網 IP:80 無法轉發至內網 Web 服務。
sysctl -w net.ipv4.ip_forward=1 並寫入 /etc/sysctl.conf。iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.10 -p tcp --dport 8080 -j ACCEPTiptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.10 -p tcp --dport 8080 -j SNAT --to-source cache_dir ufs /var/spool/squid 10240 16 256 (10GB)maximum_object_size 1024 MBmaximum_object_size_in_memory 512 KBurl_rewrite_program 正規化。refresh_pattern -i \.jpg$ 1440 90% 10080 override-expire ignore-no-cacherefresh_pattern . 0 20% 4320現象:手動添加 iptables 規則後,重啟服務器或
systemctl restart iptables規則消失。
# RHEL/CentOS 7+
service iptables save # 存入 /etc/sysconfig/iptables
# 或
iptables-save > /etc/sysconfig/iptables
# Debian/Ubuntu
apt-get install iptables-persistent
# 安裝過程會詢問保存當前規則,之後自動載入
netfilter-persistent save

tcpdump -i any -nn -s0 port 3128 觀察三次握手、數據交互、RST/FIN 異常。squid -v、iptables --version 確認特性支援,閱讀官方手冊而非盲目複製網上配置。掌握上述典型故障模式與排查邏輯,將助您從「救火隊員」進化為「架構級」網絡服務守護者。