我一直试图在类似路由器的计算机上设置透明代理,但没有成功。我发现的大多数示例都没有在同一台计算机上设置网关和代理,所以我可能看错了示例。以下是我的“路由器”计算机的设置方式:
- 它充当无线 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
有人知道我做错了什么吗?我是否遗漏了其他规则,或者现有规则是否搞乱了一切?
答案1
我明白了。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 地址)。我之前进行 telnet 测试时使用的是 127.0.0.1。一旦我尝试使用 telnet 测试 192.168.0.1,我很快就找出了问题所在。