2018-10-24
linux
00
请注意,本文编写于 2009 天前,最后修改于 2009 天前,其中某些信息可能已经过时。

目录

1.穿透案例一 (标准用法)
2. 穿透案例二(域名泛解)
3. 穿透案例三(docker部署frps)
1. 文件一:Dockerfile
2. 文件二 frps
3. 文件三 frps.ini
4. 文件四 run.sh
5. 编译并启动容器

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:

bash
[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:

bash
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 注意:域名必须存在,你自己可以解析。 解析格式如下(这种写法可以直接在配置文件中定义二级域名了,不需要单独再去域名提供商那里做额外的解析):

bash
* CNAME mykernel.cn @ A 12.34.56.78

当然也可以直接指定单个的二级域名进行解析。 此时访问地址可以为web01.mykernel.cn:1111,若要使用80端口,请备案域名或者使用国外主机。

3. 穿透案例三(docker部署frps)

注意:以下文件都必须放在同一个文件夹内。

1. 文件一:Dockerfile

bash
#设置继承镜像 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

bash
[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

bash
vim run.sh #文件内容如下: #! /bin/bash cd /frp ./frps -c ./frps.ini ~

5. 编译并启动容器

bash
#编译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查看宿主机端口是否开启

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!