Переадресация портов с помощью 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 ответа
- Похоже, это исходит от первого маршрутизатора, так как
SNAT
-Тед. Так что удалитеSNAT
правило для сохранения исходного IP-адреса источника входящего трафика. - Затем скажите второму серверу, что его маршрутизатор по умолчанию должен быть первым сервером, который знает, как маршрутизировать его обратно к источнику.
Я предполагаю, что все остальное настроено правильно:
- Переадресация 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.