Linux
設置透明代理時遇到問題
我一直在嘗試在電腦等路由器上設置透明代理,但沒有成功。我發現的大多數範例在同一台電腦上都沒有網關和代理,因此我可能正在查看錯誤的範例。這是我的“路由器”電腦的設置方式:
- 它作為一個無線 AP,有兩個 LAN 埠(目前只使用一個 LAN 埠)
- 它上面設置了 DHCP 和 DNS 伺服器
- Dansguardian 和 squid 已完全設置(我已經使用 telnet 和 squidclient 進行了測試)
- 通過 iptables 的 NAT 已全部設置並且工作正常。
我目前的 iptables 設置腳本(是的,它非常簡單並且允許太多。在透明代理工作後我會更好地鎖定它):
LAN="wlp4s0" WAN="enp3s0" PROXY_PORT="8080" iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X #handle unmatched traffic iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -m state --state INVALID -j DROP ### Allow Loopback iptables -A INPUT -i lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT iptables -A OUTPUT -o lo -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT #rules for NAT iptables -A FORWARD -o $WAN -i $LAN -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A POSTROUTING -o $WAN -j MASQUERADE
以下是我嘗試過的不同規則:
#I quickly get a 'website unavailable' message with this one iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
和
#Requests timeout with this one iptables -t nat -A PREROUTING -i $LAN -s 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
和
#Requests timeout with this one also iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j DNAT --to 192.168.0.0:$PROXY_PORT
有人知道我做錯了什麼嗎?我是否遺漏了其他規則或現有規則將其搞砸了?
我想到了。
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
第一條規則沒有超時,而是立即返回錯誤,這一事實是關鍵。Dansguardian 設置為偵聽 127.0.0.1,而不是 192.168.0.1(伺服器的 IP 地址)。我使用 127.0.0.1 之前的 telnet 測試。一旦我嘗試使用 telnet 到 192.168.0.1 進行測試,我很快就發現了問題所在。