Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
whywei8
V2EX  ›  Linux

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

  •  
  •   whywei8 · Jun 5, 2024 · 3428 views
    This topic created in 882 days ago, the information mentioned may be changed or developed.

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

    12 replies  •  2024-06-06 11:01:49 +08:00
    seers
    seers
    Jun 5, 2024
    1
    网络不要用 nat ,用桥接
    povsister
    povsister
    Jun 5, 2024
    2
    如果网关可以跑 nginx ,可以用 proxy protocol 反代转发
    如果网关就是普通路由,那需要三层真实 IP ,网关做个策略路由+mangle force route ,别用 NAT 就行了
    privil
    privil
    Jun 5, 2024
    3
    80 443 最前面起个 Nginx xff 后端应用就能获取到 IP 了
    privil
    privil
    Jun 5, 2024
    4
    @privil #2 Nginx 啥的 走 xff 或者 代理协议
    whywei8
    whywei8
    OP
    Jun 6, 2024
    5
    @povsister 不一定是网关,如果跑其它服务 ,你说的策略路由+mangle force route ,netstat 下 能看到真实 IP
    CodeWind
    CodeWind
    Jun 6, 2024
    6
    @privil #4 xff 是可以伪造的
    FabricPath
    FabricPath
    Jun 6, 2024
    7
    用 toa ,搜 TCP Option Address
    aihttp
    aihttp
    Jun 6, 2024
    8
    不管前面怎样转发,在最后面一台 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
    GuuJiang
    Jun 6, 2024 via iPhone
    9
    想要 netstat 看到是不可能的,除非你自己魔改一个 netstat ,前面所有答案都没有审题吗?
    答案就是,不要拘泥于 netstat ,而是在具体的应用里识别,因为不管是 xff 也好,代理协议也好,都是把真实 ip 作为应用层数据的一部分携带过去,后端需要自行提取
    privil
    privil
    Jun 6, 2024
    10
    @CodeWind #6 那我挂个 http 代理是不是我 IP 也能伪造了。
    povsister
    povsister
    Jun 6, 2024
    11
    @whywei8 我被你带坑里了,楼上所有人也被带歪了。
    要看到来源 IP ,直接路由 DNAT 不就行了吗,DNAT 又不改变 SrcIP 。。
    LoliconInside
    LoliconInside
    Jun 6, 2024
    12
    @chinanala haproxy 的话,你可以 nginx 开启 proxy_protocol 就可以正确识别来源 IP ,不用做额外调整
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2349 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 15:47 · PVG 23:47 · LAX 07:47 · JFK 10:47
    ♥ Do have faith in what you're doing.