Nginx 四层反代 QUIC 如何传递客户端 IP - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dabao
V2EX    NGINX

Nginx 四层反代 QUIC 如何传递客户端 IP

  •  
  •   dabao 209 天前 3182 次点击
    这是一个创建于 209 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 nginx 的四层代理监听 443 端口,反代后端 6443 端口站点。 通过http2可以正常获取到客户端 IP ,通过 h3quic连接则无法获取到真实的客户端 IP ,只能获取到 127.0.0.1 。

    请问各位大佬,在保持使用四层反代的前提下,如何配置可以通过quic获取到客户端 IP 。

    使用 quic 连接获取到的 IP

    REMOTE_ADDR: 127.0.0.1 HTTP_CLIENT_IP: 未设置 HTTP_X_FORWARDED_FOR: 未设置 HTTP_X_REAL_IP: 未设置 HTTP_FORWARDED: 未设置 HTTP_FORWARDED_FOR: 未设置 HTTP_X_FORWARDED: 未设置 

    四层 stream 配置

    map $ssl_preread_server_name $name { default default_backend; } upstream default_backend { server 127.0.0.1:6443; # 站点 } server { listen 443 reuseport; listen 443 udp reuseport; proxy_pass $name; ssl_preread on; proxy_protocol on; } 

    站点配置

    server { listen 80; listen 6443 ssl proxy_protocol ; listen 6443 quic reuseport; http2 on; server_name abc.com www.abc.com; index index.php index.html; root /wwwroot/abc.com; set_real_ip_from 127.0.0.1; real_ip_header proxy_protocol; ... } 
    第 1 条附言    209 天前
    nginx version: nginx/1.27.1 built by gcc 12.2.0 (Debian 12.2.0-14) built with OpenSSL 1.1.1q 5 Jul 2022 TLS SNI support enabled configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_v3_module 
    14 条回复    2025-03-17 10:15:18 +08:00
    dabao
        1
    dabao  
    OP
       209 天前
    ```
    nginx version: nginx/1.27.1
    built by gcc 12.2.0 (Debian 12.2.0-14)
    built with OpenSSL 1.1.1q 5 Jul 2022
    TLS SNI support enabled
    configure arguments: --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --add-module=/www/server/nginx/src/lua_nginx_module --add-module=/www/server/nginx/src/ngx_cache_purge --with-openssl=/www/server/nginx/src/openssl --with-pcre=pcre-8.43 --with-http_v2_module --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module --with-http_stub_status_module --with-http_ssl_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-http_auth_request_module --add-module=/www/server/nginx/src/ngx_http_substitutions_filter_module-master --with-ld-opt=-Wl,-E --with-cc-opt=-Wno-error --with-ld-opt=-ljemalloc --with-http_dav_module --add-module=/www/server/nginx/src/nginx-dav-ext-module --with-http_v3_module
    ```
    Showfom
        2
    Showfom  
    PRO
       209 天前
    lambdaq
        3
    lambdaq  
       209 天前
    我估计,四层反代 原理上无法把这个值带过来。。。
    dabao
        4
    dabao  
    OP
       209 天前
    @Showfom 这个模块也无法通过 quic 连接传递客户端 ip
    dabao
        5
    dabao  
    OP
       209 天前
    @lambdaq 通过目前查到的资料来看,还不支持通过 quic 传递客户端 ip
    lambdaq
        6
    lambdaq  
       209 天前
    @dabao 我猜就是因为 quic 是加密包,在不破坏原有二进制流的情况下,没法夹带额外的元数据
    Opportunity
        7
    Opportunity  
       209 天前
    v1
        8
    v1  
       209 天前
    stream 模块已经移除了对 QUIC 的支持,获取真实客户端 ip 直接直接在 HTTP 模块下多 Server 监听同端口即可

    https://hg.nginx.org/nginx/rev/113e2438dbd4
    https://mailman.nginx.org/pipermail/nginx/2023-April/CZ5L6KMLLZNDP2R6TGAX5MN4VLQA3U3R.html
    leonshaw
        9
    leonshaw  
       209 天前 via Android
    proxy_bind transparent 行不行
    ysc3839
        10
    ysc3839  
       208 天前
    四层反代不行,因为完全没有动内部传的数据,自然也不能加上表示 IP 的请求头。
    seansong
        11
    seansong  
       208 天前
    你已经开启了 proxy_protocol ,后端解析一下呗
    seansong
        12
    seansong  
       208 天前
    看错了,你是 quic ,proxy_protocol 不会生效
    huihuimoe
        13
    huihuimoe  
       208 天前 via iPhone   3
    udp 只能用 proxy protocol v2 ,nginx 官方只支持 v1(只作用于 tcp)。
    得加个 nginx-stream-proxy-protocol-v2 ,然后两边开 proxy protocol v2
    dabao
        14
    dabao  
    OP
       206 天前
    @kk2syc 最终还是用了这个办法
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2828 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 13:33 PVG 21:33 LAX 06:33 JFK 09:33
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86