Рейтинг:0

Перенаправить порт на ВМ и сохранить исходный IP

флаг de

Я хочу перенаправить порт 80 с прокси на nginx и сохранить исходный IP. Моя текущая структура:

введите описание изображения здесь

Proxy vm(192.168.0.104) — виртуальная машина с iptables, которая перенаправляет весь трафик с порта 80 на 192.168.106:80.  
Nginx vm (192.168.0.106) — виртуальная машина с веб-страницей nginx по умолчанию на порту 80.

Например, я открыл веб-браузер (локальный IP-адрес: 192.168.103) и ввел 192.168.0.104 в поле адреса, после чего я получил веб-страницу Nginx по умолчанию. В логах Nginx хочу видеть что-то вроде этого "192.168.0.103 -- [06/Nov/2022:19:10:38 +0600]...", где исходный IP остается исходным

Скрипт Iptables на виртуальной машине-прокси (192.168.0.104)

#!/бин/баш

IPT=/sbin/iptables

echo "Сброс таблиц..."

# Сброс политик по умолчанию
$IPT -P ВВОД ПРИНЯТЬ
$IPT -P ПЕРЕДАТЬ ПРИНЯТЬ
$IPT -P ВЫВОД ПРИНЯТЬ
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P ОТПРАВКА ПРИНЯТИЯ
$IPT -t nat -P ВЫВОД ПРИНЯТЬ
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P ВЫВОД ПРИНЯТЬ

# Сбросить все правила
$ИПТ-F
$IPT -t физ -F
$IPT -t калечить -F

# Стереть все цепочки не по умолчанию
$ИПТ-Х
$IPT -t нат -X
$IPT -t калечить -X

# apt install conntrack # если ошибка 
коннтрек --flush

IF_IN=enp0s3
ПОРТ_В=80

IP_OUT=192.168.0.106
ПОРТ_ВЫХОД=80

эхо "1" > /proc/sys/net/ipv4/ip_forward

$IPT -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --назначение ${IP_OUT}:${PORT_OUT}
$IPT -A FORWARD -p tcp -i $IF_IN --dport $PORT_OUT -j ПРИНЯТЬ
$IPT -A POSTROUTING -o $IF_IN -t nat -j MASQUERADE

Эта конфигурация позволяет мне получить доступ к веб-странице локально через 192.168.0.104, но не сохраняет мой исходный IP-адрес.
Кто-нибудь знает, как сделать этот трюк?

Рейтинг:0
флаг lr

Использование iptables для перенаправления трафика и сохранение IP-адреса клиента возможно только (с использованием DNAT), если ваш прокси-сервер также является вашим шлюзом по умолчанию или какой-либо другой трюк с маршрутизацией.

Наиболее подходящие варианты у вас есть (на мой взгляд):

1. DNAT на вашем роутере

Настройте прокси-виртуальную машину в качестве маршрутизатора. Пусть весь трафик вашего веб-сервера проходит через этот маршрутизатор (шлюз по умолчанию). Следующая настройка Destination NAT на вашем роутере

2. Используйте прокси L7

Используйте прокси-сервер уровня 7, который понимает HTTP-трафик. (nginx, haproxy, ...) Этот прокси-сервер может установить ошибку HTTP, которая устанавливается на исходный IP-адрес клиента.

нгинкс

Добавьте в конфигурацию следующее:

proxy_set_header X-Real-IP $remote_addr;

HAProxy

Добавьте в конфигурацию следующее:

интерфейс *your_frontend*
  опция переадресации для заголовка X-Real-IP
  http-запрос set-header X-Real-IP %[src]

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.