专栏首页lestat's blogfrp+nginx实现内网穿透

frp+nginx实现内网穿透

写在前面:上一篇文章写了关于ngrok+nginx实现内网穿透的流程,并提出了一些存在的问题,昨天试过frp之后,将之前ngrok存在的无法映射本地域名的问题解决了

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。

先决条件

有一个域名,并解析到自己服务器上,如:*.frp.lestat.me

有一个具备固定ip的公网服务器

系统环境

假设环境为:

服务器OS:ubuntu17.10

客户端OS:macOS High Sierra

以下内容将按照上述环境进行搭建

部署

相对于ngrok还需要编译源码,frp方便很多,真正的开箱即用

服务器

下载对应操作系统的frp服务端&客户端至服务器和内网电脑

wget
https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz

解压

tar zxf ./frp_0.16.1_linux_amd64.tar.gz
cd ./frp_0.16.1_linux_amd64
ll

目录结构如下(不同版本可能有差异,但大致相似):

-rw-rw-r--  1 kcptun kcptun   11358 Mar 21 10:11 LICENSE
-rwxrwxr-x  1 kcptun kcptun 6154432 Mar 21 10:10 frpc*
-rw-rw-r--  1 kcptun kcptun     126 Mar 21 10:11 frpc.ini
-rw-rw-r--  1 kcptun kcptun    5306 Mar 21 10:11 frpc_full.ini
-rwxrwxr-x  1 kcptun kcptun 7586848 Mar 21 10:10 frps*
-r--r-----  1 root   root     11207 Mar 25 15:38 frps.2018-03-25.log
-rw-rw-r--  1 kcptun kcptun    2127 Mar 25 13:42 frps.ini
-rw-rw----  1 root   root       723 Mar 26 05:06 frps.log
-rw-rw-r--  1 kcptun kcptun    2300 Mar 21 10:11 frps_full.ini
-rw-------  1 root   root         0 Mar 25 11:12 nohup.out

编辑配置文件

vim ./frps.ini

可参考如下配置:

# 服务器端监听客户端连接请求的端口
bind_port = 7000

# 服务器端监听http请求的端口(由于80端口被nginx占用,因此指定其他端口)
vhost_http_port = 8080

# 服务器用以显示连接状态的站点端口,以下配置中可以通过访问IP:7500登录查看frp服务端状态等信息
dashboard_addr = 0.0.0.0
dashboard_port = 7500

# dashboard对应的用户名/密码
dashboard_user = use
dashboard_pwd = pwd

# 日志文件路径
log_file = ./frps.log

# 日志记录错误级别,分为:trace, debug, info, warn, erro
log_level = warn

# 日志保存最大天数
log_max_days = 3

# 客户端连接校验码(客户端需与之相同)
privilege_token = privilege_token

# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_timeout is 90
# heartbeat_timeout = 90

# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
# privilege_allow_ports = 2000-3000,3001,3003,4000-50000

# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 5

# max ports can be used for each client, default value is 0 means no limit
max_ports_per_client = 0

# authentication_timeout means the timeout interval (seconds) when the frpc connects frps
# if authentication_timeout is zero, the time is not verified, default is 900s
authentication_timeout = 900

# 支持外部访问的域名(需要将域名解析到IP)
subdomain_host = frps.lestat.me

配置nginx反向代理,将来自80端口并指向*.frp.lestat.me的请求分发至frp服务器http请求的监听端口

server {
    listen       80;
    server_name *.frps.lestat.me;

    location / {
        proxy_pass  http://127.0.0.1:8080;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_max_temp_file_size 0;
        proxy_redirect off;
        proxy_read_timeout 240s;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

启动frp服务器并后台运行,启动完成后可通过lsof -i :7000查看端口占用情况

nohup ./frps -c ./frps.ini &

客户端

  1. 创建目录并解压
  2. 编辑配置文件
[common]
server_addr = 服务器IP
server_port = 7000
privilege_token = privilege_token
auth_token = auth_token
[hccrm]
type = http
local_port = 80
subdomain = hccrm

启动frp客户端程序

./frpc -c ./frpc.ini

本地apache/nginx虚拟主机配置域名别名(alias),根据自己环境而定

mamp集成apache配置

流程图解

假设甲使用的浏览器希望访问乙所在内网环境服务器的web项目:

最后

尝试使用*.frps.lestat.me访问站点看是否正常,相比ngrok的流程,frp省去了编译,少踩不少坑,的确省事多了

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://lestatmiao.github.io复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • ssh tunnel 实现内网穿透

    Submitted by dravenk on Wed, 08/08/2018 - 16:06 所需条件:

    逍遥子大表哥
  • 内网穿透

    一般的校园网/企业网往往都设置有防火墙,在内网可以访问外网,但在外网却无法访问内网。比如校园的服务器,当我们在校外时,只能通过学校的 VPN 访问校园网。然而,...

    hotarugali
  • 内网穿透

    为什么要要内网穿透? 1 我们的内网的数据库,IIS,FTP等等网络服务要为外网的用户使用. 2 开发上的用途 原来我们要调试一个公众号,支付测试,要使用自己搭...

    加菲猫的VFP
  • Ubuntu 使用 FRP 实现内网穿透

    KEVINGUO_CN
  • 使用goproxy实现内网穿透 原

    内网穿透由三部分组成:Control端(A)、bridge&server端(B)、agent端(C)。Control与server通过bridge进行桥接。

    阿dai学长
  • ssh与frp实现内网穿透

    很多时候我们需要内网穿透来进行一些操作 因为我们本地是内网而且在没有端口转发的情况下 msf不能很好的去使用。所以今天来总结一下 利用ssh frp实现内网穿透...

    用户2700375
  • 内网渗透 | 内网穿透

    学了网络之后,我们知道了公网和私网。私网是不能在公网传输和通信的。我们一个学校,一个小区,都是在自己单独的私网里面。通过这个私网内部的路由器(NAPT方式)和外...

    黑白天安全
  • 内网渗透 | 内网穿透

    学了网络之后,我们知道了公网和私网。私网是不能在公网传输和通信的。我们一个学校,一个小区,都是在自己单独的私网里面。通过这个私网内部的路由器(NAPT方式)和外...

    谢公子
  • 内网穿透

    frp github (opens new window) | bilibili 视频教程 (opens new window) | frp中文文档 (...

    熊猫 code
  • 如何使用 frp 实现内网穿透

    作为一名程序员,家里多多少少会有一些落了灰的电脑,如果把闲置的电脑变成服务器,不仅有良好的配置,还能用来做各种测试,那就再好不过了。但是局域网的设备怎么被外网访...

    平也
  • 一键实现内网穿透

    也就是今天我们演示的这个,分商业版和免费版,免费版限制比较大,有钱的可以购买下,也不贵,github上开源的代码是1.0版本的

    追马
  • frpc实践(一)实现内网穿透

    利用内网穿透, 可以将内网中部署的软件通过外网来访问, 而外网能够访问则需要域名. 只要你拥有域名, 那就成功了一半.

    时间静止不是简史
  • 钉钉pierced实现内网穿透

    有时候经常需要通过互联网来调试本地项目,这时用内网穿透就可以将本地项目映射到公网上.

    玖柒的小窝
  • ngrok+nginx实现内网穿透

    写在前面: 前天在qq群里看到有人在讨论替代花生壳的工具,说到了ngrok,说是可以实现花生壳一样的内网穿透,个人认为主要有以下几个用处: 可以在公司测试服务...

    lestat
  • SSH端口转发实现内网穿透的实现

    我们局域网的机器能够访问外网,但是外网不能访问内网。因为内网访问互联网时候能确定外网的地址,外网却不能确定我们局域网内的具体地址。(ip地址有限)如果 我们在访...

    砸漏
  • [Golang软件推荐] Frp内网穿透

    在一个IP紧缺的时代,连电信也不分配固定IP给到你用,一条专网专用线路贵的不行,那么作为软件开发人员常常要使用到外网,比如和微信调试程序,给到不在同一网段的朋友...

    喵了个咪233
  • 内网穿透(nc)

    nc 小巧强悍,可以读写TCP或UDP网络连接,它被设计成一个可靠的后端工具, 能被其它的程序或脚本直接驱动。同时,它又是一个功能丰富的网络调试和开发工具 ...

    肖萧然

扫码关注腾讯云开发者

领取腾讯云代金券