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

Проблема с прозрачным NAT PRoxy

Я исследовал все связанные проблемы с прокси-серверами Linux NAT, но они не помогли мне решить мою проблему. Мне кажется, что я все делаю правильно, но это просто не работает.

Я пытаюсь создать прокси-узел в сети, которая находится между клиентом и сервером. Клиент думает, что он обращается к прокси, но прокси преобразует соединение и перенаправляет его на сервер. Достаточно просто, и я думаю, что iptables / netfilter может это сделать, но я не могу заставить это работать.

Вот мои шаги:

  1. включить пересылку: $ echo "1"> / proc / sys / net / ipv4 / ip_forward
  2. Добавить правило ПЕРЕРАБОТКИ: $ iptables -t nat -A PREROUTING -p tcp --dport <port> -j DNAT - пункт назначения <target-server>
  3. Добавьте правило POSTROUTING: $ iptables -t nat -A POSTROUTING -p tcp --dport <port> -j SNAT - к источнику <proxy-ip>

Затем я пытаюсь установить соединение от моего клиента к серверу в <target-server> подключившись к <proxy-ip> и порт <port>.

Если я отслеживаю счетчики с помощью iptables -t nat -L -v -n, я получаю приращения по правилу PREROUTING, но не по правилу POSTROUTING. Создается впечатление, что пакет не пересылается.

Я сделал захват пакета на прокси и вижу входящий SYN-запрос. Затем я увижу, что ICMP-пакет отправляется обратно клиенту с сообщением «Пункт назначения недоступен (сеть недоступна)». Если я посмотрю на содержимое в ответе ICMP, он покажет исходный IP-адрес пакета, который был отброшен как IP-адрес клиента, IP-адрес назначения - это IP-адрес прокси. Если я в это верю, то я задаюсь вопросом, почему IP-адрес назначения по-прежнему является IP-адресом прокси, а не тем из правила iptables, которое изменило его на целевой сервер. Я также задаюсь вопросом, почему он должен утверждать, что сеть недоступна, если IP-адрес назначения в ответе об ошибке icmp является IP-адресом прокси.

Если я удалю правила NAT и снова попробую установить соединение, прокси-сервер отправит RST, как и ожидалось, обратно клиенту, поскольку на этом порту на прокси-сервере нет приложения, прослушивающего этот порт.

Это говорит мне о том, что правило PREROUTING nat что-то делает, но по какой-то причине вместо пересылки пакета оно отбрасывает его и отвечает ICMP-пакетом о недоступности сети. Зачем? Прокси-сервер может подключаться к целевому серверу, и я доказал это, запустив клиент на прокси-сервере и подключившись напрямую к целевому серверу.

Это меня поставило в тупик. Кстати, прокси - это система android-x86, работающая внутри виртуальной машины VirtualBox.