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

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

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

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

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

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

решение1

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

решение2

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

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

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

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

Связанный контент