V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
whywei8
V2EX  ›  Linux

请问大家一个关于转发怎么获取真实 IP 的运维的问题

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

    场景:托管到机房一台机器,安装 LINUX 或 EXSI 系统 ,在这台机器上装 2 到 3 台虚拟机(用 A,B,C 代替), 只有一个公网 IP 。 问题:如果我把公网 IP 的 80 或 443 转发到虚拟机 A 上,在虚拟机内用网络查看命令“:netstat 查看 访问虚拟机 A 80 ,443 对应服务器的 IP ,是内网 IP 。而不是真实的客户 IP 。 怎么实现 虚拟机内 netstat 能看到真实的客户访问 IP 而不是内网地址。是要装软路由吗,还是有其它方案。谢谢

    12 条回复    2024-06-06 11:01:49 +08:00
    seers
        1
    seers  
       152 天前
    网络不要用 nat ,用桥接
    povsister
        2
    povsister  
       152 天前
    如果网关可以跑 nginx ,可以用 proxy protocol 反代转发
    如果网关就是普通路由,那需要三层真实 IP ,网关做个策略路由+mangle force route ,别用 NAT 就行了
    privil
        3
    privil  
       152 天前
    80 443 最前面起个 Nginx xff 后端应用就能获取到 IP 了
    privil
        4
    privil  
       152 天前
    @privil #2 Nginx 啥的 走 xff 或者 代理协议
    whywei8
        5
    whywei8  
    OP
       152 天前
    @povsister 不一定是网关,如果跑其它服务 ,你说的策略路由+mangle force route ,netstat 下 能看到真实 IP
    CodeWind
        6
    CodeWind  
       152 天前
    @privil #4 xff 是可以伪造的
    FabricPath
        7
    FabricPath  
       152 天前
    用 toa ,搜 TCP Option Address
    chinanala
        8
    chinanala  
       152 天前
    不管前面怎样转发,在最后面一台 Nginx 配置文件中加上识别代码就正常了:

    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Forwarded-For;
    real_ip_recursive on;


    我开始是用 iptables 转发,这个工作在三层,如果前端套 CDN 的话,没法把用户真实 IP 带过去。
    后面改用 haproxy ,可以设置走 TCP 或者 HTTP ,然后后端 Nginx 配置里加上 xff 识别代码就能完美实现需求。
    GuuJiang
        9
    GuuJiang  
       152 天前 via iPhone
    想要 netstat 看到是不可能的,除非你自己魔改一个 netstat ,前面所有答案都没有审题吗?
    答案就是,不要拘泥于 netstat ,而是在具体的应用里识别,因为不管是 xff 也好,代理协议也好,都是把真实 ip 作为应用层数据的一部分携带过去,后端需要自行提取
    privil
        10
    privil  
       152 天前
    @CodeWind #6 那我挂个 http 代理是不是我 IP 也能伪造了。
    povsister
        11
    povsister  
       152 天前
    @whywei8 我被你带坑里了,楼上所有人也被带歪了。
    要看到来源 IP ,直接路由 DNAT 不就行了吗,DNAT 又不改变 SrcIP 。。
    LoliconInside
        12
    LoliconInside  
       152 天前
    @chinanala haproxy 的话,你可以 nginx 开启 proxy_protocol 就可以正确识别来源 IP ,不用做额外调整
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4466 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 05:34 · PVG 13:34 · LAX 21:34 · JFK 00:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.