Я надеюсь, что кто-нибудь поможет мне с этой конфигурацией. У меня уже есть рабочая установка, в которой Linux-сервер действует как маршрутизатор, просто перенаправляя порт для общедоступных IP-адресов. Кстати, это все общедоступные IP-адреса.
HOST_x - может быть любой хост с публичным IP. (например, x.x.x.x)
MY_LINUX - Использование IPtables просто для перенаправления портов для общедоступных IP-адресов. (Фиксированный IP, например: 2.2.2.2)
СЕРВЕР - веб-сервер с публичным IP-адресом. (Фиксированный IP, например, 3.3.3.3)
ПОРТ - (TCP PORT = 80)
Вот конфигурация MY_LINUX:
iptables -t nat -A PREROUTING -p tcp -d 2.2.2.2 --dport 80 -j DNAT --to-destination 3.3.3.3:80 iptables -t nat -A POSTROUTING -p tcp -d 3.3.3.3 --dport 80-Я МАСКАРАД
Приведенная выше конфигурация работает. Когда HOST_x вводит 2.2.2.2 в браузере, он получает веб-страницу из 3.3.3.3.
Единственная проблема, с которой я столкнулся, заключается в том, что целевой СЕРВЕР (3.3.3.3) видит запрос, исходящий из MY_LINUX (2.2.2.2), я хочу видеть исходный IP-адрес запрашивающего HOST_x (x.x.x.x).
Буду признателен за любые предложения, спасибо.
Я бы сказал, что это невозможно на уровне Уровня-3. HOST_x ожидает, что оставшиеся пакеты придут от хоста, на котором он инициировал соединение MY_LINUX. Если SERVER внезапно окажется в середине рукопожатия TCP и ответа, HOST_x просто проигнорирует эти пакеты.
Поскольку HOST_x и SERVER имеют прямое соединение, я думаю, что было бы лучше переместить эту схему маршрутизации на уровень приложения и реализовать перенаправления HTTP. Затем HOST_x открывает соединение непосредственно с конечной точкой.
Вы можете сделать это, если у вас есть доступ к веб-серверам (или их шлюзу). Единственное решение, которое приходит мне в голову, - это туннель между маршрутизатором и веб-сервером. Затем веб-сервер (шлюз) может отправлять все ответные пакеты на маршрутизатор без необходимости изменять адрес назначения. Если это вариант для вас, я собираюсь взглянуть на детали.