关于 nginx 四层转发问题求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
cndns
V2EX    Linux

关于 nginx 四层转发问题求助

  •  
  •   cndns Nov 12, 2022 4478 views
    This topic created in 1264 days ago, the information mentioned may be changed or developed.
    各位 v 友们好,因为是 4 层的转发需求,我想实现的目标是转发机器能把客户连过的 IP 传递到后端 windows 服务器上
    看了下 iptables , rinetd 都均不能实现这种目的然后网上搜了 nginx 好像可以转发把真实客户 IP 传过去后端机器

    nginx/1.22.1
    编译安装参数如下
    ./configure --with-stream --with-stream_realip_module
    make && make install
    nginx.conf 配置文件如下
    worker_processes auto;
    events {
    worker_connections 1024;
    }
    stream {
    log_format proxy '$remote_addr [$time_local] '
    '$protocol $status $bytes_sent $bytes_received '
    '$session_time "$upstream_addr" '
    '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

    upstream backend {
    server 192.168.100.10:3389 ; #后端 windows 服务器
    }
    server {
    listen 13389;
    proxy_connect_timeout 10s;
    proxy_timeout 30s;
    proxy_protocol on ; # on 不正常改为 off 就正常
    proxy_pass backend;
    }
    }
    proxy_protocol 改为 off 就正常但是开启就不正常端口是通的但是无法远程桌面一直在尝试连接弹不出输入账户密码那一步,但是如果改成 off 的话,windows 服务器看不到真实客户 IP
    16 replies    2022-11-15 10:23:43 +08:00
    rrfeng
        1
    rrfeng  
       Nov 12, 2022 via Android
    listen 后面加 proxy_protocol
    这个 on 改成 off 。
    cpstar
        2
    cpstar  
       Nov 12, 2022
    你这个带 IP 的需求,基本上就,额,需要看协议。
    HTTP 可以带 X-FORWARDED-FOR 塞进 HEADER 里告诉服务器客户的 IP ,但是确实无法修改 IP 包里的源 IP 实现服务器的 IP 认证。同样的,如果 RDP 协议只认 TCP 包里的源 IP 。
    然后如果 Proxy_Protocol on 的时候,RDP 服务器拒绝了链接,那只能说,RDP 不支持这个插帧。

    https://www.jianshu.com/p/cc8d592582c9
    ZeroClover
        3
    ZeroClover  
       Nov 12, 2022
    RDP 服务端应该不支持 PROXY Protocol ,做 IP Transparent 吧
    1260475686
        4
    1260475686  
       Nov 12, 2022
    nginx 四层开了 proxy_protocol 那后端肯定也得支持对 proxy_protocol 的接入呀
    ihciah
        5
    ihciah  
       Nov 12, 2022 via iPhone
    转发常见的有 4 层和 7 层,7 层可以用 http 头携带原始请求者 ip ,4 层不太容易,可以用 SO_ORIGINAL_DST 。不过无论是哪种,都需要转发目标服务手动感知原始 ip 。
    你这个需求其实是三层转发,只有类似 iptables 这种面向 ip 包的手段能搞,一般都是内核态搞,ng 这种不可能的。
    iptables 直接配一个 SNAT+DNAT 应该就 ok 。
    beyondgamp
        6
    beyondgamp  
       Nov 12, 2022 via iPhone
    nginix 功能很强 但要搞明白还得自己花时间
    Tianao
        7
    Tianao  
       Nov 12, 2022
    TCP Option Address (TOA) 了解一下?
    salmon5
        8
    salmon5  
       Nov 12, 2022   1
    salmon5
        9
    salmon5  
       Nov 12, 2022
    TOA 还是算了,几乎已经没价值了。
    cus
        11
    cus  
       Nov 12, 2022
    开启代理协议后需要后端服务支持代理协议。

    > The Proxy Protocol works by adding a header that contains the client’s IP address to the beginning of a TCP connection.

    https://www.haproxy.com/blog/use-the-proxy-protocol-to-preserve-a-clients-ip-address
    https://docs.nginx.com/nginx/admin-guide/load-balancer/using-proxy-protocol
    bugfan
        12
    bugfan  
       Nov 12, 2022
    这个可以 4 层转发,支持 rdp ,vpc 远程桌面

    https://www.i996.me

    用 v2
    bugfan
        13
    bugfan  
       Nov 12, 2022
    vpc -> vnc
    cndns
        14
    cndns  
    OP
       Nov 13, 2022
    @bugfan 我不是内网转发不了而是我想获取真实 IP 到 windows 目标机器上
    julyclyde
        15
    julyclyde  
       Nov 14, 2022
    @salmon5 为什么现在 TOA 没有价值了呀
    loovezsh
        16
    loovezsh  
       Nov 15, 2022
    要 Windows 获取到真实 IP ,那需要 Windows 那边对 proxy_protocol 支持才行。因为 proxy_protocol 会进行特殊封包的。这是 proxy_protocol 的文档: https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt?spm=a2c4g.11186623.0.0.618564e8nKffLD&file=proxy-protocol.txt
    About     Help     Advertise     Blog     API     FAQ     Solana     5313 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 03:29 PVG 11:29 LAX 20:29 JFK 23:29
    Do have faith in what you're doing.
    ubao msn 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