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

Как squid понимает IP-адрес назначения в прозрачном режиме

В прозрачном режиме для перенаправления трафика на squid используются следующие правила iptable.

iptables -I PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 3128

Насколько мне известно, REDIRECT изменяет IP-адрес назначения на IP-адрес локального интерфейса.

Итак, когда трафик достигает squid, как squid узнает, куда его пересылать, если IP-адрес назначения теперь изменился?

Вы правы, что с REDIRECT, Squid не может видеть исходный предполагаемый IP-адрес назначения; вместо этого он разрешит хост, предоставленный клиентом в Host: Заголовок HTTP, который является обязательным в HTTP 1.1.

Это очень похоже на шлюз.

Когда клиентский хост не знает, где находится целевой хост, он отправляет пакет на шлюз по умолчанию. И шлюз определяет, куда этот пакет должен быть отправлен.

Прозрачный прокси делает то же самое. Все пакеты на xxx.xxx.xxx.xxx:80 перенаправляются на порт 3128 вместо порта, указанного в заголовке пакета. Squid анализирует пакет и его заголовки - src, dst и соответствующие порты, а затем отправьте пакет, как это делает шлюз, или немедленно отправьте ответ, если он был кэширован ранее.

Основная идея заключается в том, что порт назначения хранится в каждом пакете, в то время как пакет может быть направлен на разные хосты / порты в пути.