介绍 frp是fast reverse proxy的缩写,其可用于反向代理和内网穿透,支持tcp, udp, http, https 协议,这比ngrok还多了个udp。并且发布以来广受欢迎,积累了不少用户,作者也是很勤快,一直在修复bug和更新新特性。
frp项目主页 https://github.com/fatedier/frp 并且,作者是个中国人,所以在GitHub上还有中文文档https://github.com/fatedier/frp/blob/master/README_zh.md 在你决定用frp之前,先仔细认真的把文档看一遍,虽然很多人都不喜欢看大篇幅的文档,但是这很有必要,有时候你遇到问题久久不能解决的时候,答案恰好文档里有
frp 的作用 1、利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。 2、对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。 3、利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
安装配置 将 frps 及 frps.ini 放到具有公网 IP 的机器上。 将 frpc 及 frpc.ini 放到处于内网环境的机器上。
外网主机 1 2 3 4 5 #示例版本为0.16(更新于2018.1.30),可前往项目主页releases页面下载最新版本 wget https://github.com/fatedier/frp/releases/download/v0.16.0/frp_0.16.0_linux_amd64.tar.gz tar -zxvf frp_0.16.0_linux_amd64.tar.gz cd frp_0.16.0_linux_amd64 vim myfrps.ini
服务端配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [common] #frp服务器监听地址,如果是IPV6地址必须用中括号包围 bind_addr = 0.0.0.0 #frp服务器监听端口 bind_port = 7000 #kcp的udp监听端口,如果不设那就不启用 #kcp_bind_port = 7000 #指定使用的协议,默认tcp,可选kcp #protocol = kcp #如果要使用vitual host,就必须设置 #vhost_http_port = 80 #vhost_https_port = 443 #Web后台监听端口 dashboard_port = 7500 #Web后台的用户名和密码 dashboard_user = admin dashboard_pwd = admin #Web后台的静态资源目录,调试用的,一般不设 #assets_dir = ./static #日志输出,可以设置为具体的日志文件或者console log_file = /var/log/frps.log #日志记录等级,有trace, debug, info, warn, error log_level = info #日志保留时间 log_max_days = 3 #启用特权模式,从v0.10.0版本开始默认启用特权模式,且目前只能使用特权模式 #privilege_mode = true #特权模式Token,请尽量长点且复杂 privilege_token = 12345678 #特权模式允许分配的端口范围 privilege_allow_ports = 2000-3000,3001,3003,4000-50000 #心跳超时,不用改 #heartbeat_timeout = 90 #每个代理可以设置的连接池上限 #max_pool_count = 5 #认证超时时间,一般不用改 #authentication_timeout = 900 #如果配置了这个,当你的模式为http或https时,就能设置子域名subdomain #subdomain_host = frps.com #是否启用tcp多路复用,默认就是true,不用管 #tcp_mux = true </pre> 保存上面的配置后,使用以下指令启动frp服务端 <pre class="prettyprint linenums" > nohup ./frps -c ./myfrps.ini &
客户端配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 [common] #frp服务器地址 server_addr = 1.2.3.4 #frp服务器端口 server_port = 7000 #特权模式Token privilege_token = 12345678 #转发SSH [ssh] type = tcp #可以指定为其它IP,默认是本地 #local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 #启用加密 use_encryption = true #启用压缩 use_compression = true #转发Web [web] type = http local_port = 80 custom_domains = www.yourdomain.com #修改header中的host #host_header_rewrite = dev.yourdomain.com #启用简单HTTP认证 #http_user = abc #http_pwd = abc #在服务端配置了subdomain_host的情况下用于自定义二级域名 #subdomain = test #在存在多个相同域名的情况下通过请求的URL路由到不同的配置 #locations = /news,/about # 加密 , 避免流量被识别 use_encryption = true # 压缩 , 节省带宽 . 会占用服务器和客户端一点点的CPU use_gzip = true #转发DNS请求 [dns] type = udp local_ip = 8.8.8.8 local_port = 53 remote_port = 6000 #转发Unix域套接字(这儿是Docker) [unix_domain_socket] type = tcp remote_port = 6000 plugin = unix_domain_socket plugin_unix_path = /var/run/docker.sock #HTTP代理 [http_proxy] type = tcp remote_port = 6000 plugin = http_proxy #配置http代理的简单认证 #plugin_http_user = abc #plugin_http_passwd = abc
保存以上配置,启动方式同服务端