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 仍然是原始 IP

代理虛擬機器上的 Iptables 腳本(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

將代理虛擬機器配置為路由器。讓您的 Web 伺服器的所有流量都通過此路由器(預設閘道)。接下來在路由器上設定目標 NAT

2.使用L7代理

使用理解 HTTP 流量的第 7 層代理程式。 (nginx,haproxy,...)此代理程式可以設定 HTTP 錯誤,該錯誤設定為原始客戶端 IP。

nginx

將以下內容新增至您的配置:

proxy_set_header   X-Real-IP          $remote_addr;

HA代理

將以下內容新增至您的配置:

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

相關內容