码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • frp内网穿透实战


    什么是frp

    frp是一个使用非常简单的开源内网穿透软件,代码地址:https://github.com/fatedier/frp ,使用条前提你需要有一台公网服务器,大致原理是:公网服务器监听某个端口等待内网服务器连接,内网服务器连接成功后用户访问公网的某一个端口,访问的所有内容都会转发到内网服务器,也就是所有的请求都会经过公网服务器转发一次,还不是真正的完全内网穿透。

    准备工作

    • 准备一台公网服务器,内网服务器可以直接用本地电脑模拟;
    • 本地电脑准备一个可访问的 http://127.0.0.1:8080 地址供测试;
    • 2端各下载好对应平台软件,下载地址:https://github.com/fatedier/frp/releases

    配置&启动

    3.1. 公网服务器

    tar -zxvf frp_0.43.0_linux_amd64.tar.gz
    mv frp_0.43.0_linux_amd64 frps
    cd frps
    # 删除客户端相关无用文件
    rm -rf frpc*
    vim frps.ini
    

    frps.ini配置:

    [common]
    # 等待内网服务器连接的端口
    bind_port = 7000
    # 最终用户访问的端口(http)
    vhost_http_port = 7080
    # 最终用户访问的端口(https)
    vhost_https_port = 7081
    # 密钥,最好设置,避免你的服务器被他人冒用
    token = 123456
    

    启动:./frps -c ./frps.ini,不出意外的话就启动成功了:

    3.2. 内网服务器

    也就是你本机,假设以Mac为例:

    tar -zxvf frp_0.43.0_darwin_arm64.tar.gz
    mv frp_0.43.0_darwin_arm64 frpc
    cd frpc
    # 删除服务端相关文件
    rm -rf frps*
    vim frpc.ini
    

    frpc.ini配置:

    [common]
    # 你的公网IP
    server_addr = 112.*.*.*
    # 前面设置的连接端口
    server_port = 7000
    # 前面设置的密钥
    token = 123456
    
    # 这个名字可以随便取web1、web2等,但是需要保证所有客户端唯一
    [web1]
    type = http
    # 需要转发的内网端口
    local_port = 8080
    # 自定义域名,如果没有域名直接填写公网服务器的IP
    custom_domains = 112.*.*.*
    

    然后启动:./frpc -c ./frpc.ini,不出意外的话已经内网穿透成功了:

    访问 http://公网IP:7080 返回的应该是 http://127.0.0.1:8080 的内容。

    进阶

    4.1. 自定义域名

    直接使用IP最多只能允许一台内网服务器访问连接,自定义域名可以解决此问题。内网服务器将custom_domains修改为一个能指向公网服务器的域名,例如:

    custom_domains = testfrp.haoji.me
    

    然后访问:http://testfrp.haoji.me:7080 即可看到 http://127.0.0.1:8080 的内容。

    4.2. 只使用一个端口

    公网服务器的vhost_port其实可以和bind_port保持一致,这样可以更好理解:

    [common]
    bind_port = 7000
    vhost_http_port = 7000
    vhost_https_port = 7000
    token = 123456
    

    然后访问:http://testfrp.haoji.me:7000 即可看到 http://127.0.0.1:8080 的内容。

    隐藏访问端口

    用户访问的时候还需要带一个端口,访问不太方便,可以利用nginx再转发一层:

    server {
        listen       80;
        server_name  testfrp.haoji.me;
        location / {
               proxy_pass http://testfrp.haoji.me:7000;
        }
    }
    

    然后访问:http://testfrp.haoji.me 即可看到 http://127.0.0.1:8080 的内容,实现了最完美的内网穿透。

  • 相关阅读:
    【蓝桥杯选拔赛真题46】Scratch磁铁游戏 少儿编程scratch蓝桥杯选拔赛真题讲解
    Java 如何将目录以数型结构Tree结构形式返回至前端展示?
    Web 网页性能及性能优化
    [架构之路-221]:鸿蒙系统和安卓系统的比较:微内核VS宏内核, 分布式VS单体式
    常用设计模式-详解
    手动扩缩容 Kubernetes 上的 TiDB 集群
    springboot+个人博客 毕业设计-附源码191613
    小迪安全29WEB 攻防-通用漏洞&SQL 注入&增删改查&盲注&延时&布尔&报错
    idea热部署Jrebel插件和自动手动三种方式实现
    基于springboot+mybatis+sqlserver+jsp运行会报名管理系统
  • 原文地址:https://www.cnblogs.com/liuxianan/p/frp.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号