frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
本文教程原发时间为2016年,只测试过老版本,新版本的frp服务并未测试。本文仅做参考。
项目开源地址:
https://github.com/fatedier/frp
中文官方文档:
https://github.com/fatedier/frp/blob/master/README_zh.md
官网下载地址:
https://github.com/fatedier/frp/releases
备用下载地址:
http://pan.baidu.com/s/1bp3Nk2j
1.穿透案例一 (标准用法)
工具:一台内网主机(A:12.34.56.78),一台外网主机(B:1.1.1.1),frp程序。
本文将使用作者编译好的程序,有兴趣可以根据作者的文档对源程序自己进行编译。
下载符合自己系统架构的版本,然后解压。
其中以下四个文件需要特别留意:
frpc:客户端脚本
frpc.ini :客户端脚本配置文件
frps:服务器端脚本
frps.ini:服务器端脚本配置文件
将服务器端脚本及配置文件上传到外网主机(B)上,将客户端脚本及配置文件上传到内网网主机(A),
然后编辑服务器端脚本文件frps.ini:
[common]
bind_addr =12.34.56.78 #服务器端监听的IP地址,多网卡时候需要可以设置,可省
bind_port = 7000 # 用于接收 frpc 连接的端口
log_file = ./frps.log #log 文件,可省
log_level = info # 记录日志的级别,可省
dashboard_port = 750 # web页面端口,可省
[ssh] # ssh 为代理的自定义名称,可以有多个,不能重复,和frpc中名称对应
auth_token = 123 #服务器端和客户端认证口令,一致才能认证通过
bind_addr = 12.34.56.78 #服务器端监听的IP地址,多网卡时候需要可以设置,可省
listen_port = 6000 # 最后将通过此端口访问后端服务
[web01]
auth_token = 123
bind_addr = 12.34.56.78
listen_port = 1111 # 最后将通过此端口访问后端服务
编辑客户端脚本文件frpc.ini:
server_addr = 12.34.56.78 # frps 所在服务器绑定的IP地址
server_port = 7000 #服务器端的IP地址
log_file = ./frpc.log #log 文件,可省
log_level = info # 记录日志的级别,可省
auth_token = 123 #服务器端和客户端认证口令,一致才能认证通过
[ssh] # ssh 需要和 frps.ini 中配置一致
local_port = 22 # 需要转发的本地端口
use_encryption = true # 启用加密,frpc与frps之间通信加密,默认为 false
[web01]
type = http
local_ip = 12.34.56.78
local_port =80
use_gzip = true
pool_count = 1111 #服务器端用于转发开启的端口
配置完成后,先启动服务器端服务(启动时候会占据并且不会释放终端,可以借助screen、nohup等命令进行剥离)
./frps -c ./frps.ini
ss -ntlp 检查配置文件中设置的端口是否开启,按照经验来说,终端未释放就可以说明服务已启动。
再启动客户端
./frpc -c ./frpc.ini
按照经验来说,终端未释放就可以说明服务已启动。
当然也可以直接访问A主机对应B主机服务的端口测试,访问地址http://12.34.56.78:1111。
也可以访问 http://12.34.56.78:7500 查看。
2. 穿透案例二(域名泛解)
在frpc.ini和frps.ini的对应服务器段(如:[web01])下添加:
custom_domains = web01.mykernel.cn
注意:域名必须存在,你自己可以解析。
解析格式如下(这种写法可以直接在配置文件中定义二级域名了,不需要单独再去域名提供商那里做额外的解析):
* CNAME mykernel.cn
@ A 12.34.56.78
当然也可以直接指定单个的二级域名进行解析。
此时访问地址可以为web01.mykernel.cn:1111,若要使用80端口,请备案域名或者使用国外主机。
3. 穿透案例三(docker部署frps)
注意:以下文件都必须放在同一个文件夹内。
1. 文件一:Dockerfile
#设置继承镜像
FROM ubuntu:14.04
#提供一些作者的信息
MAINTAINER mykernel(www.mykernel.cn)
#下面开始运行命令,此处更改ubuntu的源为国内163的源
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse" > /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse" >> /etc/apt/sources.list
RUN echo "deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse" >> /etc/apt/sources.list
RUN apt-get update
#更改系统时区
RUN echo "Asia/Shanghai" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
#为了避免ubuntu发生不必要的错误,所以建议更新下系统的时区设置,因为在 web 应用中经常会用到时区这个系统变量。
RUN mkdir -p /frp
#复制配置文件到相应位置,并赋予脚本可执行权限
ADD frps /frp
ADD frps.ini /frp
ADD run.sh /run.sh
RUN chmod 755 /run.sh
EXPOSE 81
EXPOSE 7500
EXPOSE 6000
#设置自启动命令
CMD ["/run.sh"]
2. 文件二 frps
frps运行程序,百度云链接,自取。
http://pan.baidu.com/s/1kVLhMBX
密码:ah3f
3. 文件三 frps.ini
[common]
#bind_addr = 120.27.112.196 # 用于接收 frpc 连接的端口
bind_port = 7000
log_file = ./frps.log
log_level = info
dashboard_port = 7500 # ssh 为代理的自定义名称,可以有多个,不能重复,和frpc中名称对应
[ssh1]
auth_token = 123
bind_addr = 0.0.0.0 # 最后将通过此端口访问后端服务
listen_port = 6000
[web02]
auth_token = 123
bind_addr = 0.0.0.0
# 最后将通过此端口访问后端服务
listen_port = 81
custom_domains = frp2.mykernel.cn
4. 文件四 run.sh
vim run.sh
#文件内容如下:
#! /bin/bash
cd /frp
./frps -c ./frps.ini ~
5. 编译并启动容器
#编译dockerfile文件
docker build -t frp .
#启动编译好的docker镜像
docker run --name frp -p 81:81 -p 6000:6000 -p 7500:7500 -p 7000:7000 -d frp
#查看服务示范启动
docker ps
#或者
ss -ntlp查看宿主机端口是否开启
网友评论