Linux

設置透明代理時遇到問題

  • April 3, 2015

我一直在嘗試在電腦等路由器上設置透明代理,但沒有成功。我發現的大多數範例在同一台電腦上都沒有網關和代理,因此我可能正在查看錯誤的範例。這是我的“路由器”電腦的設置方式:

  • 它作為一個無線 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 進行測試,我很快就發現了問題所在。

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