From 66120fe49d5a50d5520b847551f1fc2fd7ab48ff Mon Sep 17 00:00:00 2001 From: fatedier Date: Mon, 12 Jun 2017 01:31:33 +0800 Subject: [PATCH] update doc --- README.md | 99 +++++++++++++++++++++++++++++++++-- README_zh.md | 98 +++++++++++++++++++++++++++++++++- doc/pic/donate-wechatpay.png | Bin 0 -> 27594 bytes 3 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 doc/pic/donate-wechatpay.png diff --git a/README.md b/README.md index 349ddfd..334df82 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,8 @@ frp is a fast reverse proxy to help you expose a local server behind a NAT or fi * [Access your computer in LAN by SSH](#access-your-computer-in-lan-by-ssh) * [Visit your web service in LAN by custom domains](#visit-your-web-service-in-lan-by-custom-domains) * [Forward DNS query request](#forward-dns-query-request) + * [Forward unix domain socket](#forward-unix-domain-socket) + * [Connect website through frpc's network](#connect-website-through-frpcs-network) * [Features](#features) * [Dashboard](#dashboard) * [Authentication](#authentication) @@ -32,10 +34,12 @@ frp is a fast reverse proxy to help you expose a local server behind a NAT or fi * [Custom subdomain names](#custom-subdomain-names) * [URL routing](#url-routing) * [Connect frps by HTTP PROXY](#connect-frps-by-http-proxy) + * [Plugin](#plugin) * [Development Plan](#development-plan) * [Contributing](#contributing) * [Donation](#donation) * [AliPay](#alipay) + * [Wechat Pay](#wechat-pay) * [Paypal](#paypal) @@ -143,7 +147,7 @@ However, we can expose a http or https service using frp. ### Forward DNS query request -1. Modify frps.ini, configure a reverse proxy named [dns]: +1. Modify frps.ini: ```ini # frps.ini @@ -178,6 +182,69 @@ However, we can expose a http or https service using frp. `dig @x.x.x.x -p 6000 www.goolge.com` +### Forward unix domain socket + +Using tcp port to connect unix domain socket like docker daemon. + +1. Modify frps.ini: + + ```ini + # frps.ini + [common] + bind_port = 7000 + ``` + +2. Start frps: + + `./frps -c ./frps.ini` + +3. Modify frpc.ini: + + ```ini + # frpc.ini + [common] + server_addr = x.x.x.x + server_port = 7000 + + [unix_domain_socket] + type = tcp + remote_port = 6000 + plugin = unix_domain_socket + plugin_unix_path = /var/run/docker.sock + ``` + +4. Start frpc: + + `./frpc -c ./frpc.ini` + +5. Get docker version by curl command: + + `curl http://x.x.x.x:6000/version` + +### Connect website through frpc's network + +Configure frps same as above. + +1. Modify frpc.ini: + + ```ini + # frpc.ini + [common] + server_addr = x.x.x.x + server_port = 7000 + + [http_proxy] + type = tcp + remote_port = 6000 + plugin = http_proxy + ``` + +4. Start frpc: + + `./frpc -c ./frpc.ini` + +5. Set http proxy `x.x.x.x:6000` in your browser and visit website through frpc's network. + ## Features ### Dashboard @@ -360,20 +427,42 @@ frpc can connect frps using HTTP PROXY if you set os environment `HTTP_PROXY` or ```ini # frpc.ini +[common] server_addr = x.x.x.x server_port = 7000 http_proxy = http://user:pwd@192.168.1.128:8080 ``` +### Plugin + +frpc only forward request to local tcp or udp port by default. + +Plugin is used for providing rich features. There are built-in plugins such as **unix_domain_socket**, **http_proxy** and you can see [example usage](#example-usage). + +Specify which plugin to use by `plugin` parameter. Configuration parameters of plugin should be started with `plugin_`. `local_ip` and `local_port` is useless for plugin. + +Using plugin **http_proxy**: + +```ini +# frpc.ini +[http_proxy] +type = tcp +remote_port = 6000 +plugin = http_proxy +plugin_http_user = abc +plugin_http_passwd = abc +``` + +`plugin_http_user` and `plugin_http_passwd` are configuration parameters used in `http_proxy` plugin. + + ## Development Plan * Log http request information in frps. * Direct reverse proxy, like haproxy. * Load balance to different service in frpc. * Frpc can directly be a webserver for static files. -* Full control mode, dynamically modify frpc's configure with dashboard in frps. * P2p communicate by make udp hole to penetrate NAT. -* Client Plugin (http proxy). * kubernetes ingress support. @@ -398,6 +487,10 @@ frp QQ group: 606194980 ![donation-alipay](/doc/pic/donate-alipay.png) +### Wechat Pay + +![donation-wechatpay](/doc/pic/donate-wechatpay.png) + ### Paypal Donate money by [paypal](https://www.paypal.me/fatedier) to my account **fatedier@gmail.com**. diff --git a/README_zh.md b/README_zh.md index 0cedd93..ee4fc86 100644 --- a/README_zh.md +++ b/README_zh.md @@ -16,6 +16,8 @@ frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp * [通过 ssh 访问公司内网机器](#通过-ssh-访问公司内网机器) * [通过自定义域名访问部署于内网的 web 服务](#通过自定义域名访问部署于内网的-web-服务) * [转发 DNS 查询请求](#转发-dns-查询请求) + * [转发 Unix域套接字](#转发-unix域套接字) + * [通过 frpc 所在机器访问外网](#通过-frpc-所在机器访问外网) * [功能说明](#功能说明) * [Dashboard](#dashboard) * [身份验证](#身份验证) @@ -30,10 +32,12 @@ frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp * [自定义二级域名](#自定义二级域名) * [URL 路由](#url-路由) * [通过代理连接 frps](#通过代理连接-frps) + * [插件](#插件) * [开发计划](#开发计划) * [为 frp 做贡献](#为-frp-做贡献) * [捐助](#捐助) * [支付宝扫码捐赠](#支付宝扫码捐赠) + * [微信支付捐赠](#微信支付捐赠) * [Paypal 捐赠](#paypal-捐赠) @@ -179,6 +183,71 @@ DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿 `dig @x.x.x.x -p 6000 www.goolge.com` +### 转发 Unix域套接字 + +通过 tcp 端口访问内网的 unix域套接字(和 docker daemon 通信)。 + +1. 修改 frps.ini 文件: + + ```ini + # frps.ini + [common] + bind_port = 7000 + ``` + +2. 启动 frps: + + `./frps -c ./frps.ini` + +3. 修改 frpc.ini 文件,启用 unix_domain_socket 插件: + + ```ini + # frpc.ini + [common] + server_addr = x.x.x.x + server_port = 7000 + + [unix_domain_socket] + type = tcp + remote_port = 6000 + plugin = unix_domain_socket + plugin_unix_path = /var/run/docker.sock + ``` + +4. 启动 frpc: + + `./frpc -c ./frpc.ini` + +5. 通过 curl 命令查看 docker 版本信息 + + `curl http://x.x.x.x:6000/version` + +### 通过 frpc 所在机器访问外网 + +frpc 内置了 http proxy 插件,可以使其他机器通过 frpc 的网络访问互联网。 + +frps 的部署步骤同上。 + +1. 修改 frpc.ini 文件,启用 http_proxy 插件: + + ```ini + # frpc.ini + [common] + server_addr = x.x.x.x + server_port = 7000 + + [http_proxy] + type = tcp + remote_port = 6000 + plugin = http_proxy + ``` + +4. 启动 frpc: + + `./frpc -c ./frpc.ini` + +5. 浏览器设置 http 代理地址为 `x.x.x.x:6000`,通过 frpc 机器的网络访问互联网。 + ## 功能说明 ### Dashboard @@ -375,11 +444,34 @@ locations = /news,/about ```ini # frpc.ini +[common] server_addr = x.x.x.x server_port = 7000 http_proxy = http://user:pwd@192.168.1.128:8080 ``` +### 插件 + +默认情况下,frpc 只会转发请求到本地 tcp 或 udp 端口。 + +插件模式是为了在客户端提供更加丰富的功能,目前内置的插件有 **unix_domain_socket**、**http_proxy**。具体使用方式请查看[使用示例](#使用示例)。 + +通过 `plugin` 指定需要使用的插件,插件的配置参数都以 `plugin_` 开头。使用插件后 `local_ip` 和 `local_port 不再需要配置。 + +使用 **http_proxy** 插件的示例: + +```ini +# frpc.ini +[http_proxy] +type = tcp +remote_port = 6000 +plugin = http_proxy +plugin_http_user = abc +plugin_http_passwd = abc +``` + +`plugin_http_user` 和 `plugin_http_passwd` 即为 `http_proxy` 插件可选的配置参数。 + ## 开发计划 计划在后续版本中加入的功能与优化,排名不分先后,如果有其他功能建议欢迎在 [issues](https://github.com/fatedier/frp/issues) 中反馈。 @@ -388,9 +480,7 @@ http_proxy = http://user:pwd@192.168.1.128:8080 * frps 支持直接反向代理,类似 haproxy。 * frpc 支持负载均衡到后端不同服务。 * frpc 支持直接作为 webserver 访问指定静态页面。 -* frpc 完全控制模式,通过 dashboard 对 frpc 进行在线操作。 * 支持 udp 打洞的方式,提供两边内网机器直接通信,流量不经过服务器转发。 -* 支持 plugin,frpc 获取到的连接可以交给指定 plugin 处理,例如 http 代理,简单的 web server。 * 集成对 k8s 等平台的支持。 ## 为 frp 做贡献 @@ -416,6 +506,10 @@ frp 交流群:606194980 (QQ 群号) ![donate-alipay](/doc/pic/donate-alipay.png) +### 微信支付捐赠 + +![donate-wechatpay](/doc/pic/donate-wechatpay.png) + ### Paypal 捐赠 海外用户推荐通过 [Paypal](https://www.paypal.me/fatedier) 向我的账户 **fatedier@gmail.com** 进行捐赠。 diff --git a/doc/pic/donate-wechatpay.png b/doc/pic/donate-wechatpay.png new file mode 100644 index 0000000000000000000000000000000000000000..d8fef5872f3448e9a26d90dab0062723a8bc417c GIT binary patch literal 27594 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 literal 0 HcmV?d00001