1. DNAT auf Ihrem Router

1. DNAT auf Ihrem Router

Ich möchte Port 80 vom Proxy an nginx weiterleiten und die ursprüngliche IP behalten. Meine aktuelle Struktur:

Bildbeschreibung hier eingeben

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

Ich habe beispielsweise einen Webbrowser geöffnet (lokale IP: 192.168.103) und 192.168.0.104 in das Adressfeld eingegeben, dann habe ich die Standard-Nginx-Webseite erhalten. In den Nginx-Protokollen möchte ich so etwas sehen wie „192.168.0.103 – [06/Nov/2022:19:10:38 +0600] …“, wobei die Quell-IP die ursprüngliche bleibt

Iptables-Skript auf 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

Mit dieser Konfiguration kann ich lokal über 192.168.0.104 auf die Webseite zugreifen, aber meine ursprüngliche IP-Adresse wird nicht gespeichert.
Kennt jemand diesen Trick?

Antwort1

Die Verwendung von iptables zur Weiterleitung des Datenverkehrs und Beibehaltung der Client-IP ist (mithilfe von DNAT) nur möglich, wenn Ihr Proxy auch Ihr Standard-Gateway ist oder ein anderer Routing-Trick vorliegt.

Die (meiner Meinung nach) am besten geeigneten Optionen sind:

1. DNAT auf Ihrem Router

Konfigurieren Sie Ihre Proxy-VM als Router. Lassen Sie den gesamten Datenverkehr für Ihren Webserver über diesen Router laufen (Standard-Gateway). Richten Sie als Nächstes Destination NAT auf Ihrem Router ein.

2. Verwenden Sie einen L7-Proxy

Verwenden Sie einen Layer-7-Proxy, der HTTP-Verkehr versteht. (nginx, haproxy, …) Dieser Proxy kann einen HTTP-Fehler festlegen, der auf die ursprüngliche Client-IP gesetzt ist.

nginx

Fügen Sie Ihrer Konfiguration Folgendes hinzu:

proxy_set_header   X-Real-IP          $remote_addr;

HAProxy

Fügen Sie Ihrer Konfiguration Folgendes hinzu:

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

verwandte Informationen