Linux-frp代理https获取真实源IP

该博客介绍了如何利用frp(Fast Reverse Proxy)进行内外网穿透,以获取用户的真实源IP。配置过程中,外网和内网的NGINX服务器均进行了SSL配置并启用proxy_protocol,确保HTTPS请求的正确转发。frps和frpc的配置文件中设置了相应的端口和协议,以实现从用户到内网服务器的透明代理。关键在于外网NGINX的proxy_pass设置,以及内网NGINX的proxy_protocol和real_ip_header配置,以确保IP地址的正确传递。

说明

  • frp代理https获取真实源IP

  • 【架构】:

    • 用户访问域名 ->
    • 请求frps所在外网服务器NGINX ->
    • 外网NGINX监听该域名的80和443端口,并做强制http2https ->
    • 外网NGINX反代到本机frps所监听的HTTPS端口(这是关键) ->
    • 外网frps收到HTTPS请求后代理转发到内网frpc服务器 ->
    • 内网frpc监听了该域名在本地的HTTP和HTTPS代理(即80和443),并且都启用proxy_protocol_version = v2 ->
    • 内网frpc将该域名的HTTPS请求转发到本机NGINX ->
    • 内网NGINX也监听该域名的80和443端口,并且都启用proxy_protocol,没有强制http2https
  • 【注意】:

    • 内网、外网NGINX都做了SSL,即配了双份证书,而frpc没有配https2http,只是监听了两个端口而已

关键配置

  • frps.ini

    vhost_http_port = 1111
    vhost_https_port = 2222
    
  • 外网NGINX

    server
    {
        listen 80;
    	listen 443 ssl http2;
        server_name test.test.com;
        index index.php index.html;
        root /www/test.test.com;
        
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        ssl_certificate    /fullchain.pem;
        ssl_certificate_key    /privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        error_page 497  https://$host$request_uri;
    
        #SSL-END
        
        location / 
        {
        	proxy_ssl_server_name on;       #关键点
            proxy_pass https://$host:2222;  #关键点,必须使用$host,2222是frps的HTTPS监听的端口
            proxy_set_header Host $host;    #关键点
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header REMOTE-HOST $remote_addr;
        }
        ...
    }
    
  • frpc.ini

    [http]
    type = http
    local_ip = 127.0.0.1
    local_port = 80
    custom_domains = test.test.com
    proxy_protocol_version = v2
    
    [https]
    type = https
    local_port = 443
    custom_domains = test.test.com
    proxy_protocol_version = v2
    use_encryption = true
    use_compression = true
    
  • 内网NGINX

    server
    {
        listen 80 proxy_protocol;               #关键点
    	listen 443 ssl http2 proxy_protocol;    #关键点
        server_name test.test.com;
        index index.php index.html;
        root /www/test.test.com;
        
        #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
        #error_page 404/404.html;
        ssl_certificate    /fullchain.pem;
        ssl_certificate_key    /privkey.pem;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;
        error_page 497  https://$host$request_uri;
    
        #SSL-END
        
        #获取真实IP
        set_real_ip_from 127.0.0.1;         #关键点
        #set_real_ip_from 127.0.0.1/24;     #或者
        real_ip_header X-Forwarded-For;     #关键点
        #real_ip_recursive on;
        ...
    }
    
<think>好的,我现在需要帮助用户查找IP地址的方法。用户明确询问如何查找IP地址,并希望得到方法教程。首先,我要回忆一下之前提供的引用内容,看看有没有相关信息。 根据引用[3],Fiddler可以通过设置显示ServerIP列来查看请求的IP地址。步骤包括修改CustomRules.js文件,添加脚本,保存后重启Fiddler。这可能适用于通过抓包工具获取的情况。 另外,引用[2]提到配置静态IP时需要设置IP地址、子网掩码、网关和DNS,这可能涉及到查看本机IP的方法。比如在Windows中使用ipconfig命令,或者在Linux使用ifconfig或ip addr命令。这些方法可以帮助用户查看自己的本地IP地址,但用户可能指的是外部服务的IP,比如访问网站的服务器IP。 引用[4]解释了子网掩码和IP地址的关系,但可能对查找IP帮助不大。引用[1]说明IP地址标识网络节点,可能用于理解IP的基本概念。 用户可能需要多种场景下的查找方法:比如查找本机IP、远程服务器IP、通过命令行或工具抓包等。需要分步骤说明,结构清晰。 还需要考虑不同操作系统下的操作差异,比如Windows和Linux的命令不同。另外,通过在线服务如ipinfo.io可以直接获取公网IP,这可能也是用户需要的。 是否需要提到网络架构中的NAT问题?比如内网IP和公网IP的区别,但用户的问题可能更基础,暂时先提供直接的方法。 总结可能的步骤: 1. 查找本机IP使用命令行工具(ipconfig/ifconfig)。 2. 查找远程服务器IP使用ping或nslookup。 3. 使用抓包工具如Fiddler查看请求的IP。 4. 通过在线网站获取公网IP。 需要验证每个方法的正确性,确保步骤准确。比如Fiddler的设置是否会导致列被遮挡,需要提醒用户滚动查看。在线服务的例子要可靠,如ipinfo.io。 可能的问题:用户混淆了IP和目标IP,需要明确说明。例如,查找自己访问外部服务的IP,或者查找访问自己服务的IP。 在回答中需要分情况说明,确保用户能根据具体需求选择合适的方法。同时,引用相关的引用内容,如引用[3]的方法,引用[2]的配置信息可能相关但可能不是直接答案。 最终结构可能分为几个部分:命令行方法、网络工具方法、在线服务、抓包工具,每个部分详细步骤,并加入注意事项。</think>### 查找IP地址的完整方法教程 根据实际需求,IP地址可能指 **本机IP地址**、**远程服务器IP地址** 或 **网络请求的IP地址**。以下是不同场景下的具体方法: --- #### 一、查找本机IP地址 1. **Windows系统** - 打开命令提示符(Win+R → 输入 `cmd` → 回车) - 输入命令: ```bash ipconfig ``` - 在输出中找到 `IPv4 地址`,例如:`192.168.1.100`[^2][^4]。 2. **Linux/macOS系统** - 打开终端,输入命令: ```bash ifconfig # 传统命令 或 ip addr show # 新版命令 ``` - 查找 `inet` 或 `inet addr` 对应的地址(忽略 `127.0.0.1` 本地回环地址)。 --- #### 二、查找公网IP地址(对外暴露的IP) 1. **通过在线工具** 访问以下网站可直接显示公网IP- [ipinfo.io](https://ipinfo.io) - [whatismyip.com](https://whatismyip.com) --- #### 三、查找网络请求的IP地址(如HTTP请求) 1. **使用Fiddler抓包工具** - 安装并打开Fiddler → 菜单栏选择 `Rules` → `Customize Rules`[^3]。 - 在 `CustomRules.js` 文件中添加以下代码: ```javascript public static BindUIColumn("ServerIP", 50) function ServerIP(oS: Session): String { return oS.serverIP; } ``` - 保存文件(Ctrl+S)并重启Fiddler,在请求列表中查看 `ServerIP` 列[^3]。 - **注意**:若列未显示,可能是滚动条遮挡,需横向滚动查看[^3]。 2. **使用命令行工具** - 对目标域名执行 `ping` 或 `nslookup`: ```bash ping example.com # 显示服务器IP nslookup example.com # 通过DNS解析获取IP ``` --- #### 四、查找访问者的IP(如网站日志) 1. **Web服务器日志分析** - 在Apache/Nginx日志中,默认记录访问者IP,格式类似: ``` 192.168.1.100 - - [01/Jan/2023:12:00:00 +0800] "GET / HTTP/1.1" 200 612 ``` -服务器位于反向代理后,需配置 `X-Forwarded-For` 头获取真实IP--- #### 五、静态IP地址配置(可选) 若需固定本机IP,参考以下配置: 1. 编辑网络配置文件(Linux路径:`/etc/sysconfig/network-scripts/ifcfg-eth0`) ```bash IPADDR=192.168.230.131 # IP地址 NETMASK=255.255.255.0 # 子网掩码 GATEWAY=192.168.230.2 # 网关 DNS1=192.168.230.2 # DNS服务器 ``` 2. 重启网络服务生效。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值