Я хочу использовать Squid 2.7 в качестве прозрачного кэширующего прокси для HTTP-трафика на Raspberry Pi под управлением Debian Linux. Raspberry Pi будет подключен к моему Wi-Fi-роутеру (MBR1400) через единый сетевой интерфейс.
Я уже настроил Squid, и он отлично работает с другими компьютерами, если я указываю конфигурацию прокси вручную, например:
curl --proxy 192.168.0.250:3128 http://google.com
Это также работает правильно, если я укажу Chrome, Firefox или OS X использовать правильный IP-адрес прокси, 192.168.0.250.
Проблема возникает, когда я пытаюсь сделать его «прозрачным».
Я попытался сделать его прозрачным, настроив добавление статического маршрута к маршрутизатору, чтобы весь трафик проходил через окно Squid. А затем используйте iptables
в поле Squid для перенаправления трафика с порта 80 на порт 3128.
Подробные шаги
1) Добавить статический маршрут к моему роутеру
IPv4 (v6 has been disabled)
IP Address: 192.168.0.1
Netmask: 255.255.255.128
Gateway: 192.168.0.250
METRIC: 1
Это показывает таблицу маршрутизации
IP GW Metric
192.168.0.0 192.168.0.250 1 # mine
192.168.0.0 0 # system default
# plus some other routes that I don't think are important
2) добавить правила iptables в поле squid
# clear existing iptables rules
iptables -F
iptables -X
iptables --table nat -F
iptables --table nat -X
iptables --table mangle -F
iptables --table mangle -X
# the rest of these rules were adapted from a blog post and I don't fully understand how they work
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -d 192.168.0.0/24 -p tcp --dport 80 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/24 -p tcp --dport 80 -j DNAT --to 192.168.0.250:3128
iptables -t nat -I POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.250 -p tcp -j SNAT --to 192.168.0.1
iptables -I FORWARD -i eth0 -o eth0 -s 192.168.0.0/24 -d 192.168.0.250 -p tcp --dport 3128 -j ACCEPT
Я на правильном пути? Статический маршрут выглядит правильным? Что не так с моим iptables
правила?
Маршрутизатор знает, как добраться до прокси? Поскольку прокси-сервер не находится в сети маршрутизаторов 192.168.0.0/25 (маска сети: 255.255.255.128 => 192.168.0.1 - 192.168.0.127). У вас должен быть второй интерфейс со связанным адресом, чтобы маршрутизатор мог направить его туда.