Прокси-сервер вводит заголовок X-Forwarded-For http в запросе клиента. Если XFF выполняет свою работу по пересылке ответа каждого сервера клиенту, тогда существует необходимость в назначении внутреннего IP-адреса и создании таблицы NAT. Нужно ли назначать внутренний IP для работы?
1 ответ
HTTP-прокси работает на прикладном уровне. NAT работает на уровне IP. Это две совершенно разные вещи, которые не знают друг о друге и не работают на одном уровне. Поэтому ваш вопрос не имеет смысла.
Когда HTTP-прокси получает запрос на веб-страницу (и при условии, что веб-страница еще не находится в кэше прокси-сервера), он открывает свое собственное TCP-соединение с целевым HTTP-сервером, выдает собственный HTTP-запрос, анализирует HTTP-ответ и затем пересылает ответ клиенту, который имеет собственное TCP-соединение с прокси. HTTP-прокси понимает только протокол HTTP и не будет использовать другой протокол (обратите внимание, что для простоты я оставляю в стороне более запутанные вещи, такие как CONNECT
или многоцелевые прокси).
NAT совершенно другой. При пересылке HTTP-соединения через NAT существует только одно прямое TCP-соединение от клиента к серверу, NAT участвует только в отслеживании того, какая внутренняя конечная точка (адрес и порт) взаимодействует с какой внешней конечной точкой (адрес и порт). NAT не открывает TCP-соединения, он не знает, что такое HTTP, он не анализирует запросы или ответы и, конечно, ничего не кеширует. NAT может пересылать любой протокол (HTTP, ICMP, DNS ...), если он основан на IP, поскольку для работы ему не нужно ничего знать о протоколе.
Обратите внимание, что здесь я описываю только простые конфигурации. Существуют более сложные настройки, которые могут на первый взгляд сбить с толку. Одной из таких конфигураций является прозрачный прокси-сервер (также называемый перехватывающим прокси-сервером), который находится в середине сетевого пути и активно перехватывает HTTP-соединения, которые клиенты пытаются установить снаружи. При попытке такого соединения прозрачный прокси-сервер переписывает адрес назначения так, что соединение перенаправляется на прокси-сервер. После этого все ведет себя так, как я описал выше. Эта настройка используется, чтобы заставить клиентов проходить через прокси без необходимости изменения их конфигурации. В этом случае клиенты могут даже не знать, что их HTTP-трафик передается через прокси-сервер, а не просто через NAT. Для получения более практической информации о прокси-перехватчиках в документации по Squid есть много информации об этом.