本文章参考:github frp、Nikon937、Liorwong、clangcn和clangcn docker的文章
frp介绍
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
为什么使用frp?
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
前置准备
- 外网服务器一台(或者有公网ip的机器如阿里服务器)
- 内网服务器一台(win10电脑)
安装方法 1(较2繁琐一点)
1. 下载脚本部署文件
注意事项:
- 服务器端和内网机器端下载的版本要相同,否则可能会影响内网穿透
- 根据服务器系统选择合适的脚本
- 脚本主要分为服务端与客户端文件
- 外网服务器端用到的是Frps和Frps.ini
- win10电脑用到的是Frpc和Frpc.ini
注: 服务端部署,可以只保留服务端文件frps
客户端部署,可以只保留客户端文件frpc2. 服务器端frps部署
1. 解压压缩包并命重命名文件夹:
创建frp文件夹,然后上传linux压缩包至文件夹并解压
mkdir frp
tar xzvf frp_linux_386.tar.gz
mv frp_linux_386 frp
或者
```Linux
wget https://github.com/fatedier/frp/releases/download/v0.xx.0/frp_0.xx.0_linux_amd64.tar.gz
tar -zxvf frp_0.xx.0_linux_amd64.tar.gz
mkdir frp
mv frp_0.xx.0_linux_386 frp</code></pre>
<h4>2. 配置</h4>
<ol>
<li>配置Frps.ini文件
<ul>
<li>进入frp文件夹下:cd frp,修改frps.ini文件 (vim frps.ini)
<pre><code class="language-frp">[common]
bind_addr = 0.0.0.0
#“bind_addr”内网穿透服务器端监听的IP地址,可以省略,默认为127.0.0.1
bind_port = 7000
#“bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
dashboard_port = 7500
#“dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为VPS的IP)查看frp服务运行信息。
token = 12345678
“token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到
dashboard_user = admin
dashboard_pwd = admin
“dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。
vhost_http_port = 10080
vhost_https_port = 10443
“vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。</code></pre></li>
<li>修改完成,:wq 退出</li>
</ul></li>
<li>启动命令
注:需要切换到文件目录
<pre><code class="language-frp">./frps -c frps.ini</code></pre>
<p>如果看到屏幕输出这样一段内容,即表示运行正常,如果出现错误提示,请检查上面的步骤。</p>
<pre><code class="language-frp">2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2019/01/12 15:22:39 [I] [service.go:172] http service listen on 0.0.0.0:10080
2019/01/12 15:22:39 [I] [service.go:193] https service listen on 0.0.0.0:10443
2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
2019/01/12 15:22:39 [I] [root.go:210] Start frps success</code></pre>
<p>则说明服务器端已经启动Frp服务,监听的端口是7000。此时访问 x.x.x.x:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面</p></li>
</ol>
<h4>服务端后台运行</h4>
<p>至此,我们的服务端仅运行在前台,如果Ctrl+C停止或者关闭SSH窗口后,frps均会停止运行,因而我们使用nohup命令将其运行在后台。
nohup命令相关地址:<a href="https://ehlxr.me/2017/01/18/Linux-%E7%9A%84-nohup-%E5%91%BD%E4%BB%A4%E7%9A%84%E7%94%A8%E6%B3%95/">https://ehlxr.me/2017/01/18/Linux-%E7%9A%84-nohup-%E5%91%BD%E4%BB%A4%E7%9A%84%E7%94%A8%E6%B3%95/</a></p>
<pre><code class="language-nohup">nohup ./frps -c frps.ini &</code></pre>
<p>输出如下内容即表示正常运行</p>
<pre><code class="language-nohup">nohup: ignoring input and appending output to 'nohup.out'</code></pre>
<p>此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序</p>
<pre><code class="language-nohup">jobs</code></pre>
<p>在结果中我们可以看到frps正在后台正常运行</p>
<pre><code class="language-nohup">[1]+ Running nohup ./frps -c frps.ini &</code></pre>
<p>此时访问 x.x.x.x:7500 依然可以打开仪表板界面,至此,服务端即设置完成,你可以关闭SSH窗口了。</p>
<h3>3. win10客户端配置</h3>
<h4>1. 解压压缩包并命重命名文件夹:</h4>
<p>创建frp文件夹,然后下载的windows压缩包至文件夹并解压</p>
<h4>2. 内网服务配置</h4>
<ol>
<li>内网机器配置Frpc.ini
<ul>
<li>进入frp文件夹下找到frpc.ini右击Notepade打开
<pre><code class="language-frp">[common]
server_addr = xx.xx.xx.xx
#外网-服务器端ip
server_port = 7000
#外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
token = 12345678
#“token”是你在服务器上设置的连接口令,原样填入即可</code></pre></li>
<li>修改完成,保存退出
<h4>4. 自定义规则</h4>
<p>frp实际使用时,会按照端口号进行对应的转发,原理如下图所示。</p></li>
</ul></li>
</ol>
<p>上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。</p>
<ul>
<li>“[xxx]”表示一个规则名称,自己定义,便于查询即可。</li>
<li>“type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。</li>
<li>“local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。</li>
<li>“remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可
<h4>5. 启动命令</h4>
<p>Ctrl+R 执行cmd需要再frp文件路径下执行</p>
<pre><code class="language-cmd">
./frpc -c frpc.ini</code></pre></li>
</ul>
<p>Ctrl+C停止服务</p>
<pre><code>#### 6. 启动日志
```frp
2019/03/23 17:28:21 **[I] [service.go:221] login to server success, get run id [3435ffb8820dbcf1], server udp port [0]**
2019/03/23 17:28:21 **[I] [proxy_manager.go:137] [3435ffb8820dbcf1] proxy added: [web]**
2019/03/23 17:28:21 **[I] [control.go:144] [web] start proxy success**
7. 客户端后台运行及开机自启
frpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。
@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
cd C:\frp
frpc -c frpc.ini
exit
之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。
至于开机启动,把这个 .bat 文件直接扔进Windows的开机启动文件夹就好了
4. 访问内网http服务
- 启动服务端frps服务成功
- 启动win10客户frpc服务成功
- 启动需要映射本机服务成功
- server_addr:local_port
- 访问成功,至此搭建成功!
- 更多帮助请移步官方帮助文件:https://github.com/fatedier/frp/blob/master/README_zh.md
安装方法 2
使用脚本由clangcn提供
1. 服务器端frps部署
- 安装
wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh
chmod 700 ./install-frps.sh
./install-frps.sh install
2. 安装步骤
```Linux
Loading network version for frps, please wait...
frps Latest release file frp_0.8.1_linux_amd64.tar.gz
#此步骤会自动获取frp最新版本,自动操作,无需理会
Loading You Server IP, please wait...
You Server IP:12.12.12.12
#自动获取你服务器的IP地址
Please input your server setting:
Please input frps bind_port [1-65535](Default Server Port: 5443):
#输入frp提供服务的端口,用于服务器端和客户端通信
Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):
#输入frp的控制台服务端口,用于查看frp工作状态
Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):
#输入frp进行http穿透的http服务端口
Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443):
#输入frp进行https穿透的https服务端口
Please input privilege_token (Default: WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq):
#输入frp服务器和客户端通信的密码,默认是随机生成的
Please input frps max_pool_count [1-200](Default max_pool_count: 50):
#设置每个代理可以创建的连接池上限,默认50
##### Please select log_level #####
1: info
2: warn
3: error
4: debug
#####################################################
Enter your choice (1, 2, 3, 4 or exit. default [1]):
#设置日志等级,4个选项,默认是info
Please input frps log_max_days [1-30]
(Default log_max_days: 3 day):
#设置日志保留天数,范围是1到30天,默认保留3天。
##### Please select log_file #####
1: enable
2: disable
#####################################################
Enter your choice (1, 2 or exit. default [1]):
#设置是否开启日志记录,默认开启,开启后日志等级及保留天数生效,否则等级和保留天数无效
设置完成后检查你的输入,如果没有问题按任意键继续安装
============== Check your input ==============
You Server IP : 12.12.12.12
Bind port : 5443
Dashboard port : 6443
vhost http port : 80
vhost https port: 443
Privilege token : WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq
Max Pool count : 50
Log level : info
Log max days : 3
Log file : enable
==============================================
安装结束后显示:
Congratulations, frps install completed!
==============================================
You Server IP : 12.12.12.12
Bind port : 5443
Dashboard port : 6443
vhost http port : 80
vhost https port: 443
Privilege token : WEWLRgwRjIJVPx2kuqzkGnvuftPLQniq
Max Pool count : 50
Log level : info
Log max days : 3
Log file : enable
#将上面信息添加到你的路由器frp穿透插件中吧
==============================================
frps Dashboard: http://12.12.12.12:6443/
#这个是frp控制台访问地址
==============================================
- 命令
- 更新命令
./install-frps.sh update
- 卸载命令
./install-frps.sh uninstall
- 服务器端管理命令
/etc/init.d/frps start /etc/init.d/frps stop /etc/init.d/frps restart /etc/init.d/frps status /etc/init.d/frps config /etc/init.d/frps version
2. 路由器设置(windows请参考安装方法1里)
在路由器上使用的时候,请使用虚拟内存
- 更新命令
安装方法 3 docker
相关链接
frps的教程:https://code.aliyun.com/clangcn/frp-docker/blob/master/frps-docker/README.md
frpc的教程:https://code.aliyun.com/clangcn/frp-docker/blob/master/frpc-docker/README.md
1. 介绍
frps for Docker
- 基于Dockerfile文件编译出一个frps的容器镜像。
- 版本 frp 0.20.0
- 问题 如何安装Docker自行百度吧
2. 安装
下载镜像导入从项目中下载docker images后导入,阿里云镜像下载:
wget --no-check-certificate https://code.aliyun.com/clangcn/frp-docker/raw/master/frps-docker/frps-docker.tar
github镜像下载地址:
wget --no-check-certificate https://github.com/clangcn/frp-docker/raw/master/frps-docker/frps-docker.tar
镜像导入命令
docker load < frps-docker.ta
3. 使用
启动命令
docker run -h="frps-docker" --name frps-docker -d \ -p 6443:5443/tcp \ -p 6443:5443/udp \ -p 6444:5444/udp \ -p 7443:5445/tcp \ -p 8080:80/tcp \ -p 8443:443/tcp \ -e set_token=password \ -e set_subdomain_host= \ -e set_max_pool_count=50 \ -e str_log_level=info \ -e set_log_max_days=3 \ "frps-docker:latest"