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

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

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

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

Proxy vm(192.168.0.104) - VM with iptables that redirects all traffic from port 80 to 192.168.106:80  
Nginx vm(192.168.0.106) - VM with default nginx webpage on port 80

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

Скрипт Iptables на прокси-машине VM(192.168.0.104)

#!/bin/bash

IPT=/sbin/iptables

echo "Flushing Tables ..."

# Reset Default Policies
$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT

# Flush all rules
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F

# Erase all non-default chains
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

# apt install conntrack # if error 
conntrack --flush

IF_IN=enp0s3
PORT_IN=80

IP_OUT=192.168.0.106
PORT_OUT=80

echo "1" > /proc/sys/net/ipv4/ip_forward

$IPT -A PREROUTING -t nat -i $IF_IN -p tcp --dport $PORT_IN -j DNAT --to-destination ${IP_OUT}:${PORT_OUT}
$IPT -A FORWARD -p tcp -i $IF_IN --dport $PORT_OUT -j ACCEPT
$IPT -A POSTROUTING -o $IF_IN -t nat -j MASQUERADE

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

решение1

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

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

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

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

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

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

nginx

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

proxy_set_header   X-Real-IP          $remote_addr;

HAProxy

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

frontend *your_frontend*
  option forwardfor header X-Real-IP
  http-request set-header X-Real-IP %[src]

Связанный контент