frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。

开源地址:https://github.com/fatedier/frp

官方文档:https://github.com/fatedier/frp/blob/master/README_zh.md

frp程序下载地址:https://github.com/fatedier/frp/releases

备用下载地址:https://pan.baidu.com/s/1bp3Nk2j#list/path=%2F

穿透案例一(标准用法):

工具:一台内网主机(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文件

[common]

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 查看。

穿透案例二(域名泛解)

在frpc.ini和frps.ini的对应服务器段(如:[web01])下添加:

custom_domains = web01.mykernel.cn
注意:域名必须存在,你自己可以解析。
解析格式如下(这种写法可以直接在配置文件中定义二级域名了,不需要单独再去域名提供商那里做额外的解析):
  *   CNAME  mykernel.cn
  @   A     12.34.56.78
当然也可以直接指定单个的二级域名进行解析。
此时访问地址可以为web01.mykernel.cn:1111,若要使用80端口,请备案域名或者使用国外主机。
穿透案例三(docker部署frps)
文件一: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 应用中经常会用到时区这个系统变量。
#安装 ssh 服务
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"]
文件二 frps
链接:http://pan.baidu.com/s/1kVLhMBX 密码:ah3f
文件三 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
文件四 run.sh
#! /bin/bash
 cd /frp
./frps -c ./frps.ini ~

docker运行命令
docker run -p 81:81 -p 6000:6000 -p 7500:7500 -p 7000:7000 -d  frp
ss -ntlp查看宿主机端口是否开启
更多内容,请关注博主博客