1. DNAT en tu enrutador

1. DNAT en tu enrutador

Quiero reenviar el puerto 80 desde el proxy a nginx y conservar la IP original. Mi estructura actual:

ingrese la descripción de la imagen aquí

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

Por ejemplo, abrí un navegador web (ip local: 192.168.103) e ingresé 192.168.0.104 en el campo de dirección, luego obtuve la página web predeterminada de Nginx. En los registros de Nginx quiero ver algo como esto "192.168.0.103 - [06/Nov/2022:19:10:38 +0600] ...", donde la IP de origen sigue siendo la original

Script de Iptables en Proxy 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

Esta configuración me permite acceder a la página web desde local a través de 192.168.0.104, pero no guarda mi dirección IP original.
¿Alguien sabe cómo hacer este truco?

Respuesta1

Usar iptables para reenviar tráfico y mantener la IP del cliente solo es posible (usando DNAT) si su proxy es también su puerta de enlace predeterminada o algún otro truco de enrutamiento.

Las opciones más adecuadas que tienes (en mi opinión) son:

1. DNAT en tu enrutador

Configure su máquina virtual proxy como enrutador. Deje que todo el tráfico de su servidor web pase por este enrutador (puerta de enlace predeterminada). Siguiente configuración de Destino NAT en su enrutador

2. Utilice un proxy L7

Utilice un proxy de capa 7 que comprenda el tráfico HTTP. (nginx, haproxy, ...) Este proxy puede establecer un error HTTP que se establece en la IP del cliente original.

nginx

Agregue lo siguiente a su configuración:

proxy_set_header   X-Real-IP          $remote_addr;

HAProxy

Agregue lo siguiente a su configuración:

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

información relacionada