Назад | Перейти на главную страницу

правила iptables для прозрачного прокси-сервера squid2.7 и единого сетевого интерфейса

Я хочу использовать 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). У вас должен быть второй интерфейс со связанным адресом, чтобы маршрутизатор мог направить его туда.