mostkia
V2EX  ›  问与答

FRP 内网穿透,如何获取到访客的真实的 IP 地址?

  •  
  •   mostkia · Jul 28, 2018 · 6280 views
    This topic created in 2854 days ago, the information mentioned may be changed or developed.

    如题,使用 FRP 内网穿透部署了服务器,使用良好,但最近发现有部分基于 IP 的功能出现了异常。

    排查后发现是 FRP 内网穿透导致的(原因是访客访问域名后,请求会经过 FRP 服务器周转到本地服务器的 127.0.0.1 地址上),导致网站程序获取的 IP 都是内网的 127.0.0.1,因此导致了错误的发生(我使用的是 Nginx 服务器)。

    访问了作者的 github 项目,希望能够找到解决方案,有是有,但写的比较模糊,不太看得懂,连接地址如下: https://github.com/fatedier/frp/blob/master/README_zh.md#%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E7%9C%9F%E5%AE%9E-ip

    请问有没有朋友也碰到过类似的问题?是否有良好的解决方案,谢谢~

    8 replies    2019-11-12 16:30:55 +08:00
    billchenchina
        1
    billchenchina  
       Jul 28, 2018 via Android
    这个功能当时是我提出来的,这里做一下解释
    为了获取访客的真实 ip,需要进行以下操作

    frp 监听随机(自定)端口,用户访问的时候用 nginx 套反代,header 里面加上用户的真实 ip ( X-Forwarded-For )和一个自定的 token。

    在自己的站点获取用户 ip 的时候做出的改动:
    1. 检查 token 是否被设置且是否正确,如果没有被设置说明一定不来自 frp,这时的流量可以看作直接访问的流量,可以忽略掉或者保存真实 ip
    2. 如果 token 正确的话,则信任 header 里面的 X-Forwarded-For,把这个当做用户真实 ip
    t6attack
        2
    t6attack  
       Jul 28, 2018
    用 nginx 反向代理做负载均衡后,会遇到类似问题。
    你以关键词 “ nginx 负载均衡 真实 IP ” 搜索。就能搜到相关信息了。
    line
        3
    line  
       Jul 28, 2018 via iPhone
    tcp 协议也可以吗?
    29EtwXn6t5wgM3fD
        4
    29EtwXn6t5wgM3fD  
       Jul 28, 2018 via iPhone
    插个统计服务的 js 吧
    mostkia
        5
    mostkia  
    OP
       Jul 28, 2018 via Android
    @shengyu 恩,这也是一个解决的办法。 @line 我这边已经验证了官方的说法,的确只能通过 http 方式获取到 ip,加了 ssl 都不行。tcp 估计是不行的,不知道是不是有方法可以解决。
    mostkia
        6
    mostkia  
    OP
       Jul 30, 2018 via Android
    已经解决,但效果可能不太理想,后来恢复回滚到原来的样子了。。有需要的朋友依旧可以参考一下:

    1,frp 端口要事先改为非 80 和 443 以免和 nginx 冲突,比如 8080 端口。

    2,在 frp 前台服务器安装 nginx,然后再 frp 前套一个 nginx 反代,把证书和域名什么的都先绑定到前台服务器上,然后前台服务器全部将流量反代到 frp 的转发端口 127.0.0.1:8080 端口上,这样就能够拿到 ip 了,原理不太懂,但是貌似会降低速度。 @t6attack @billchenchina
    mostkia
        7
    mostkia  
    OP
       Jul 30, 2018 via Android
    缺点:
    1,两个 nginx(我内网的 web 服务器也是 nginx),配置
    冗余分散不好管理,而且容易出错。
    2,速度变慢,原因可能和反代有关。
    3,ie 浏览器莫名无法访问,原因未知,比较玄学的一
    个问题,可能下一位尝试者就不会碰到。

    不过貌似目前现有的资料都是类似的解决方案,还是希望作者能早日填坑吧。
    qingyuan0o0
        8
    qingyuan0o0  
       Nov 12, 2019
    提交外网获取到的 ip 为表单提交到 server,可行不?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1625 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 16:31 · PVG 00:31 · LAX 09:31 · JFK 12:31
    ♥ Do have faith in what you're doing.