Переадресация портов с помощью IPTABLES и удаленного определения IP

Я смог перенаправить порт 80 с моего основного сервера 192.168.90.1 на второй 192.168.90.2 с помощью IPTABLES

Основной сервер имеет публичный адрес XXXX

поэтому я перенаправил XXXX:80 -> 192.168.90.2:80

Моя проблема заключается в том, что второй сервер считает, что весь трафик, исходящий из Интернета, поступает с 192.168.90.1 (все удаленные адреса - 192.168.90.1, а не реальный адрес клиентов exp: будет отображаться 192.168.90.1 вместо IP-адреса клиента)

Есть кто-то, кто сталкивался с этой проблемой? Мне нужно исправить это, не используя решение обратного прокси

Вот как я пересылаю свои пакеты:

iptables -A PREROUTING -t nat -d XXXX -p tcp --dport 80 -j DNAT - к месту назначения 192.168.90.2:80

iptables -t nat -A POSTROUTING -d 192.168.90.2 -p tcp --dport 80 -j SNAT - в XXXX

2 ответа

  1. Похоже, это исходит от первого маршрутизатора, так как SNAT-Тед. Так что удалите SNAT правило для сохранения исходного IP-адреса источника входящего трафика.
  2. Затем скажите второму серверу, что его маршрутизатор по умолчанию должен быть первым сервером, который знает, как маршрутизировать его обратно к источнику.

Я предполагаю, что все остальное настроено правильно:

  • Переадресация IP включена
  • нет других блокирующих правил iptables

Насколько я понимаю, ваш основной сервер имеет два фиксированных IP-адреса:

  • частный: 192.168.90.1 (скажем, eth0)
  • публичный: XXXX (скажем, wan0)

Предполагая, что я прав:

На самом деле, ваше правило SNAT выполняет NAT для всего трафика TCP, когда пункт назначения 192.168.90.2:80

Я не уверен, что это правило уместно, потому что вы уже перенаправили порт 80 в своем правиле DNAT, а первичный и вторичный серверы находятся в одной подсети (частные IP-адреса), поэтому вам не нужна особая маршрутизация, чтобы заставить их общаться друг с другом.,

Я думаю, что вы должны удалить свое правило SNAT.


На мой взгляд, ваше правило SNAT будет иметь больше смысла для NAT весь исходящий трафик в Интернет с вашего публичного IP.

Возможно, вам следует изменить его, добавив фильтр на исходящий интерфейс, чтобы трафик SNAT передавался на ваш интерфейс WAN:

iptables -t nat -A POSTROUTING -o wan0 -p tcp --dport 80 -j SNAT --to X.X.X.X

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

Другие вопросы по тегам