1. DNAT no seu roteador

1. DNAT no seu roteador

Quero encaminhar a porta 80 do proxy para o nginx e manter o IP original. Minha estrutura atual:

insira a descrição da imagem aqui

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 exemplo, abri um navegador da web (ip local: 192.168.103) e digitei 192.168.0.104 no campo de endereço, então obtive a página da web padrão do Nginx. Nos logs do Nginx, quero ver algo como "192.168.0.103 -- [06/Nov/2022:19:10:38 +0600] ...", onde o IP de origem permanece o original

Script Iptables na VM proxy (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 configuração me permite acessar a página web localmente via 192.168.0.104, mas não salva meu endereço IP original.
Alguém sabe como fazer esse truque?

Responder1

Usar iptables para encaminhar tráfego e manter o IP do cliente só é possível (usando DNAT) se o seu proxy também for seu gateway padrão ou algum outro truque de roteamento.

As opções mais adequadas que você tem (na minha opinião) são:

1. DNAT no seu roteador

Configure sua VM proxy como um roteador. Deixe todo o tráfego do seu servidor web passar por este roteador (gateway padrão). Próxima configuração Destination NAT em seu roteador

2. Use um proxy L7

Use um proxy da camada 7 que entenda o tráfego HTTP. (nginx, haproxy, ...) Este proxy pode definir um erro HTTP que é definido para o IP do cliente original.

nginx

Adicione o seguinte à sua configuração:

proxy_set_header   X-Real-IP          $remote_addr;

HAProxy

Adicione o seguinte à sua configuração:

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

informação relacionada