Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
企猫商务
frp
提交
3fe50df2
F
frp
项目概览
企猫商务
/
frp
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
frp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3fe50df2
编写于
5月 18, 2017
作者:
F
fatedier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
doc: update
上级
93d86ca6
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
59 addition
and
185 deletion
+59
-185
README.md
README.md
+0
-14
README_zh.md
README_zh.md
+53
-149
conf/frpc_min.ini
conf/frpc_min.ini
+2
-2
conf/frps_min.ini
conf/frps_min.ini
+1
-8
models/config/server_common.go
models/config/server_common.go
+2
-12
server/service.go
server/service.go
+1
-0
未找到文件。
README.md
浏览文件 @
3fe50df2
...
...
@@ -36,7 +36,6 @@ frp is a fast reverse proxy to help you expose a local server behind a NAT or fi
*
[
Donation
](
#donation
)
*
[
AliPay
](
#alipay
)
*
[
Paypal
](
#paypal
)
*
[
Contributors
](
#contributors
)
<!-- vim-markdown-toc -->
...
...
@@ -485,16 +484,3 @@ frp QQ group: 606194980
### Paypal
Donate money by
[
paypal
](
https://www.paypal.me/fatedier
)
to my account
**fatedier@gmail.com**
.
## Contributors
*
[
fatedier
](
https://github.com/fatedier
)
*
[
Hurricanezwf
](
https://github.com/Hurricanezwf
)
*
[
Pan Hao
](
https://github.com/vashstorm
)
*
[
Danping Mao
](
https://github.com/maodanp
)
*
[
Eric Larssen
](
https://github.com/ericlarssen
)
*
[
Damon Zhao
](
https://github.com/se77en
)
*
[
Manfred Touron
](
https://github.com/moul
)
*
[
xuebing1110
](
https://github.com/xuebing1110
)
*
[
Anbitioner
](
https://github.com/bingtianbaihua
)
*
[
LitleCarl
](
https://github.com/LitleCarl
)
README_zh.md
浏览文件 @
3fe50df2
...
...
@@ -4,7 +4,7 @@
[
README
](
README.md
)
|
[
中文文档
](
README_zh.md
)
frp 是一个
高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, udp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发
。
frp 是一个
可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议
。
## 目录
...
...
@@ -23,33 +23,34 @@ frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内
*
[
服务器端热加载配置文件
](
#服务器端热加载配置文件
)
*
[
特权模式
](
#特权模式
)
*
[
端口白名单
](
#端口白名单
)
*
[
TCP 多路复用
](
#tcp-多路复用
)
*
[
连接池
](
#连接池
)
*
[
修改 Host Header
](
#修改-host-header
)
*
[
通过密码保护你的 web 服务
](
#通过密码保护你的-web-服务
)
*
[
自定义二级域名
](
#自定义二级域名
)
*
[
URL 路由
](
#url-路由
)
*
[
通过
HTTP PROXY 连接 frps
](
#通过-http-proxy-
连接-frps
)
*
[
通过
代理连接 frps
](
#通过代理
连接-frps
)
*
[
开发计划
](
#开发计划
)
*
[
为 frp 做贡献
](
#为-frp-做贡献
)
*
[
捐助
](
#捐助
)
*
[
支付宝扫码捐赠
](
#支付宝扫码捐赠
)
*
[
Paypal 捐赠
](
#paypal-捐赠
)
*
[
贡献者
](
#贡献者
)
<!-- vim-markdown-toc -->
## frp 的作用
*
利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
*
对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
*
利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
*
可查看通过代理的所有 http 请求和响应的详细信息。(待开发)
*
对于 http, https 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
*
利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
## 开发状态
frp
目前正在前期开发阶段,master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试
。
frp
仍然处于前期开发阶段,未经充分测试与验证,不推荐用于生产环境
。
**目前的交互协议可能随时改变,不能保证向后兼容,升级新版本时需要注意公告说明。**
master 分支用于发布稳定版本,dev 分支用于开发,您可以尝试下载最新的 release 版本进行测试。
**目前的交互协议可能随时改变,不保证向后兼容,升级新版本时需要注意公告说明同时升级服务端和客户端。**
## 架构
...
...
@@ -59,40 +60,36 @@ frp 目前正在前期开发阶段,master 分支用于发布稳定版本,dev
根据对应的操作系统及架构,从
[
Release
](
https://github.com/fatedier/frp/releases
)
页面下载最新版本的程序。
将
**frps**
及
**frps.ini**
放到有公网 IP 的机器上。
将
**frps**
及
**frps.ini**
放到
具
有公网 IP 的机器上。
将
**frpc**
及
**frpc.ini**
放到处于内网环境的机器上。
### 通过 ssh 访问公司内网机器
1.
修改 frps.ini 文件,
配置一个名为 ssh 的反向代理
:
1.
修改 frps.ini 文件,
这里使用了最简化的配置
:
```
ini
# frps.ini
[common]
bind_port
=
7000
[ssh]
listen_port
=
6000
auth_token
=
123
```
2.
启动 frps:
`./frps -c ./frps.ini`
3.
修改 frpc.ini 文件,
设置 frps 所在服务器的
IP 为 x.x.x.x;
3.
修改 frpc.ini 文件,
假设 frps 所在服务器的公网
IP 为 x.x.x.x;
```
ini
# frpc.ini
[common]
server_addr
=
x.x.x.x
server_port
=
7000
auth_token
=
123
[ssh]
local_ip
=
127.0.0.1
local_port
=
22
remote_port
=
6000
```
4.
启动 frpc:
...
...
@@ -107,36 +104,31 @@ frp 目前正在前期开发阶段,master 分支用于发布稳定版本,dev
有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能,以下示例为 http 服务,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
1.
修改 frps.ini 文件,
配置一个名为 web 的 http 反向代理,设置 http 访问端口为 8080,绑定自定义域名
`www.yourdomain.com`
:
1.
修改 frps.ini 文件,
设置 http 访问端口为 8080
:
```
ini
# frps.ini
[common]
bind_port
=
7000
vhost_http_port
=
8080
[web]
type
=
http
custom_domains
=
www.yourdomain.com
auth_token
=
123
```
2.
启动 frps;
`./frps -c ./frps.ini`
3.
修改 frpc.ini 文件,
设置 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口:
3.
修改 frpc.ini 文件,
假设 frps 所在的服务器的 IP 为 x.x.x.x,local_port 为本地机器上 web 服务对应的端口, 绑定自定义域名
`www.yourdomain.com`
:
```
ini
# frpc.ini
[common]
server_addr
=
x.x.x.x
server_port
=
7000
auth_token
=
123
[web]
type
=
http
local_port
=
80
custom_domains
=
www.yourdomain.com
```
4.
启动 frpc:
...
...
@@ -151,17 +143,12 @@ frp 目前正在前期开发阶段,master 分支用于发布稳定版本,dev
DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿透,配置方式和 TCP 基本一致。
1.
修改 frps.ini 文件
,配置一个名为 dns 的反向代理
:
1.
修改 frps.ini 文件:
```
ini
# frps.ini
[common]
bind_port
=
7000
[dns]
type
=
udp
listen_port
=
6000
auth_token
=
123
```
2.
启动 frps:
...
...
@@ -181,6 +168,7 @@ DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿
type
=
udp
local_ip
=
8.8.8.8
local_port
=
53
remote_port
=
6000
```
4.
启动 frpc:
...
...
@@ -202,7 +190,7 @@ DNS 查询请求通常使用 UDP 协议,frp 支持对内网 UDP 服务的穿
```
ini
[common]
dashboard_port
=
7500
# dashboard 用户名密码
可选
,默认都为 admin
# dashboard 用户名密码,默认都为 admin
dashboard_user
=
admin
dashboard_pwd
=
admin
```
...
...
@@ -213,9 +201,7 @@ dashboard_pwd = admin
### 身份验证
出于安全性的考虑,服务器端可以在 frps.ini 中为每一个代理设置一个 auth_token 用于对客户端连接进行身份验证,例如上文中的 [ssh] 和 [web] 两个代理的 auth_token 都为 123。
客户端需要在 frpc.ini 中配置自己的 auth_token,与服务器中的配置一致才能正常运行。
从 v0.10.0 版本开始,所有 proxy 配置全部放在客户端(也就是之前版本的特权模式),服务端和客户端的 common 配置中的
`privilege_token`
参数一致则身份验证通过。
需要注意的是 frpc 所在机器和 frps 所在机器的时间相差不能超过 15 分钟,因为时间戳会被用于加密验证中,防止报文被劫持后被其他人利用。
...
...
@@ -223,141 +209,76 @@ dashboard_pwd = admin
### 加密与压缩
这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,
无论类型是 tcp, http 还是 https
:
这两个功能默认是不开启的,需要在 frpc.ini 中通过配置来为指定的代理启用加密与压缩的功能,
压缩算法使用 snappy
:
```
ini
# frpc.ini
[ssh]
type
=
tcp
l
isten_port
=
6000
auth_token
=
123
l
ocal_port
=
22
remote_port
=
6000
use_encryption
=
true
use_
gzip
=
true
use_
compression
=
true
```
如果公司内网防火墙对外网访问进行了流量识别与屏蔽,例如禁止了 ssh 协议等,通过设置
`use_encryption = true`
,将 frpc 与 frps 之间的通信内容加密传输,将会有效防止流量被拦截。
如果传输的报文长度较长,通过设置
`use_
gzip
= true`
对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
如果传输的报文长度较长,通过设置
`use_
compression
= true`
对传输内容进行压缩,可以有效减小 frpc 与 frps 之间的网络流量,加快流量转发速度,但是会额外消耗一些 cpu 资源。
### 服务器端热加载配置文件
当需要新增一个 frpc 客户端时,为了避免将 frps 重启,可以使用 reload 命令重新加载配置文件。
reload 命令仅能用于修改代理的配置内容,[common] 内的公共配置信息无法修改。
1.
首先需要在 frps.ini 中指定 dashboard_port:
```
ini
# frps.ini
[common]
bind_port
=
7000
dashboard_port
=
7500
```
2.
启动 frps:
`./frps -c ./frps.ini`
3.
修改 frps.ini 增加一个新的代理 [new_ssh]:
```
ini
# frps.ini
[common]
bind_port
=
7000
dashboard_port
=
7500
[new_ssh]
listen_port
=
6001
auth_token
=
123
```
4.
执行 reload 命令,使 frps 重新加载配置文件,实际上是通过 7500 端口发送了一个 http 请求
`./frps -c ./frps.ini --reload`
5.
之后启动 frpc,[new_ssh] 代理已经可以使用。
由于从 v0.10.0 版本开始,所有 proxy 都在客户端配置,这个功能暂时移除。
### 特权模式
如果想要避免每次增加代理都需要操作服务器端,可以启用特权模式。
特权模式被启用后,代理的所有配置信息都可以在 frpc.ini 中配置,无需在服务器端做任何操作。
1.
在 frps.ini 中设置启用特权模式并设置 privilege_token,客户端需要配置同样的 privilege_token 才能使用特权模式创建代理:
```
ini
# frps.ini
[common]
bind_port
=
7000
privilege_mode
=
true
privilege_token
=
1234
```
2.
启动 frps:
`./frps -c ./frps.ini`
3.
在 frpc.ini 配置代理 [ssh],使用特权模式创建,无需事先在服务器端配置:
```
ini
# frpc.ini
[common]
server_addr
=
x.x.x.x
server_port
=
7000
privilege_token
=
1234
[ssh]
privilege_mode
=
true
local_port
=
22
remote_port
=
6000
```
remote_port 即为原先在 frps.ini 的代理中配置的 listen_port 参数,使用特权模式后需要在 frpc 的配置文件中指定。
4.
启动 frpc:
`./frpc -c ./frpc.ini`
5.
通过 ssh 访问内网机器,假设用户名为 test:
`ssh -oPort=6000 test@x.x.x.x`
由于从 v0.10.0 版本开始,所有 proxy 都在客户端配置,原先的特权模式是目前唯一支持的模式。
#### 端口白名单
启用特权模式后
为了防止端口被滥用,可以手动指定允许哪些端口被使用,在 frps.ini 中通过 privilege_allow_ports 来指定:
为了防止端口被滥用,可以手动指定允许哪些端口被使用,在 frps.ini 中通过 privilege_allow_ports 来指定:
```
ini
# frps.ini
[common]
privilege_mode
=
true
privilege_token
=
1234
privilege_allow_ports
=
2000-3000,3001,3003,4000-50000
```
privilege_allow_ports 可以配置允许使用的某个指定端口或者是一个范围内的所有端口,以
`,`
分隔,指定的范围以
`-`
分隔。
### TCP 多路复用
从 v0.10.0 版本开始,客户端和服务器端之间的连接支持多路复用,不再需要为每一个用户请求创建一个连接,使连接建立的延迟降低,并且避免了大量文件描述符的占用,使 frp 可以承载更高的并发数。
该功能默认启用,如需关闭,可以在 frps.ini 和 frpc.ini 中配置,该配置项在服务端和客户端必须一致:
```
ini
# frps.ini 和 frpc.ini 中
[common]
tcp_mux
=
false
```
### 连接池
默认情况下,当用户请求建立连接后,frps 才会请求 frpc 主动与后端服务建立一个连接。当为指定的代理启用连接池后,frp 会预先和后端服务建立起指定数量的连接,每次接收到用户请求后,会从连接池中取出一个连接和用户连接关联起来,避免了等待与后端服务建立连接以及 frpc 和 frps 之间传递控制信息的时间。
这一功能比较适合有大量短连接请求时开启。
1.
首先可以在 frps.ini 中设置每个代理可以创建的连接池上限,避免大量资源占用,默认为 100,客户端设置超过此配置后会被调整到当前值:
**由于从 v0.10.0 版本开始支持了 tcp 连接的多路复用,如果启用了 tcp 的多路复用功能,则不再需要使用此功能或者连接池数量设置为 1 即可。**
1.
首先可以在 frps.ini 中设置每个代理可以创建的连接池上限,避免大量资源占用,客户端设置超过此配置后会被调整到当前值:
```
ini
# frps.ini
[common]
max_pool_count
=
5
0
max_pool_count
=
5
```
2.
在 frpc.ini 中为
指定代理
启用连接池,指定预创建连接的数量:
2.
在 frpc.ini 中为
客户端
启用连接池,指定预创建连接的数量:
```
ini
# frpc.ini
[ssh]
type
=
tcp
local_port
=
22
pool_count
=
10
[common]
pool_count
=
1
```
### 修改 Host Header
...
...
@@ -367,7 +288,6 @@ privilege_allow_ports 可以配置允许使用的某个指定端口或者是一
```
ini
# frpc.ini
[web]
privilege_mode
=
true
type
=
http
local_port
=
80
custom_domains
=
test.yourdomain.com
...
...
@@ -387,7 +307,6 @@ frp 支持通过 HTTP Basic Auth 来保护你的 web 服务,使用户需要通
```
ini
# frpc.ini
[web]
privilege_mode
=
true
type
=
http
local_port
=
80
custom_domains
=
test.yourdomain.com
...
...
@@ -395,7 +314,7 @@ http_user = abc
http_pwd
=
abc
```
通过浏览器访问
`test.yourdomain.com`
,需要输入配置的用户名和密码才能访问。
通过浏览器访问
`
http://
test.yourdomain.com`
,需要输入配置的用户名和密码才能访问。
### 自定义二级域名
...
...
@@ -403,10 +322,11 @@ http_pwd = abc
通过在 frps 的配置文件中配置
`subdomain_host`
,就可以启用该特性。之后在 frpc 的 http、https 类型的代理中可以不配置
`custom_domains`
,而是配置一个
`subdomain`
参数。
只需要将
`*.
subdomain_host
`
解析到 frps 所在服务器。之后用户可以通过
`subdomain`
自行指定自己的 web 服务所需要使用的二级域名,通过
`{subdomain}.{subdomain_host}`
来访问自己的 web 服务。
只需要将
`*.
{subdomain_host}
`
解析到 frps 所在服务器。之后用户可以通过
`subdomain`
自行指定自己的 web 服务所需要使用的二级域名,通过
`{subdomain}.{subdomain_host}`
来访问自己的 web 服务。
```
ini
# frps.ini
[common]
subdomain_host
=
frps.com
```
...
...
@@ -415,7 +335,6 @@ subdomain_host = frps.com
```
ini
# frpc.ini
[web]
privilege_mode
=
true
type
=
http
local_port
=
80
subdomain
=
test
...
...
@@ -436,14 +355,12 @@ frp 支持根据请求的 URL 路径路由转发到不同的后端服务。
```
ini
# frpc.ini
[web01]
privilege_mode
=
true
type
=
http
local_port
=
80
custom_domains
=
web.yourdomain.com
locations
=
/
[web02]
privilege_mode
=
true
type
=
http
local_port
=
81
custom_domains
=
web.yourdomain.com
...
...
@@ -452,7 +369,7 @@ locations = /news,/about
按照上述的示例配置后,
`web.yourdomain.com`
这个域名下所有以
`/news`
以及
`/about`
作为前缀的 URL 请求都会被转发到 web02,其余的请求会被转发到 web01。
### 通过
HTTP PROXY
连接 frps
### 通过
代理
连接 frps
在只能通过代理访问外网的环境内,frpc 支持通过 HTTP PROXY 和 frps 进行通信。
...
...
@@ -472,11 +389,11 @@ http_proxy = http://user:pwd@192.168.1.128:8080
*
frps 记录 http 请求日志。
*
frps 支持直接反向代理,类似 haproxy。
*
frpc 支持负载均衡到后端不同服务。
*
frpc debug 模式,控制台显示代理状态,类似 ngrok 启动后的界面。
*
frpc http 请求及响应信息展示。
*
frpc 支持直接作为 webserver 访问指定静态页面。
*
frpc 完全控制模式,通过 dashboard 对 frpc 进行在线操作。
*
支持 udp 打洞的方式,提供两边内网机器直接通信,流量不经过服务器转发。
*
支持 plugin,frpc 获取到的连接可以交给指定 plugin 处理,例如 http 代理,简单的 web server。
*
集成对 k8s 等平台的支持。
## 为 frp 做贡献
...
...
@@ -504,16 +421,3 @@ frp 交流群:606194980 (QQ 群号)
### Paypal 捐赠
海外用户推荐通过
[
Paypal
](
https://www.paypal.me/fatedier
)
向我的账户
**fatedier@gmail.com**
进行捐赠。
## 贡献者
*
[
fatedier
](
https://github.com/fatedier
)
*
[
Hurricanezwf
](
https://github.com/Hurricanezwf
)
*
[
Pan Hao
](
https://github.com/vashstorm
)
*
[
Danping Mao
](
https://github.com/maodanp
)
*
[
Eric Larssen
](
https://github.com/ericlarssen
)
*
[
Damon Zhao
](
https://github.com/se77en
)
*
[
Manfred Touron
](
https://github.com/moul
)
*
[
xuebing1110
](
https://github.com/xuebing1110
)
*
[
Anbitioner
](
https://github.com/bingtianbaihua
)
*
[
LitleCarl
](
https://github.com/LitleCarl
)
conf/frpc_min.ini
浏览文件 @
3fe50df2
[common]
server_addr
=
0.0.0.0
server_port
=
7000
auth_token
=
123
privilege_token
=
12345678
#privilege_token = 12345678
[ssh]
type
=
tcp
local_ip
=
127.0.0.1
local_port
=
22
remote_port
=
6000
conf/frps_min.ini
浏览文件 @
3fe50df2
...
...
@@ -4,11 +4,4 @@ bind_port = 7000
vhost_http_port
=
80
vhost_https_port
=
443
dashboard_port
=
7500
privilege_mode
=
true
privilege_token
=
12345678
[ssh]
type
=
tcp
auth_token
=
123
bind_addr
=
0.0.0.0
listen_port
=
6000
#privilege_token = 12345678
models/config/server_common.go
浏览文件 @
3fe50df2
...
...
@@ -186,17 +186,7 @@ func LoadServerCommonConf(conf ini.File) (cfg *ServerCommonConf, err error) {
// PrivilegeMode configure
if
cfg
.
PrivilegeMode
==
true
{
tmpStr
,
ok
=
conf
.
Get
(
"common"
,
"privilege_token"
)
if
ok
{
if
tmpStr
==
""
{
err
=
fmt
.
Errorf
(
"Parse conf error: privilege_token can not be empty"
)
return
}
cfg
.
PrivilegeToken
=
tmpStr
}
else
{
err
=
fmt
.
Errorf
(
"Parse conf error: privilege_token must be set if privilege_mode is enabled"
)
return
}
cfg
.
PrivilegeToken
,
_
=
conf
.
Get
(
"common"
,
"privilege_token"
)
cfg
.
PrivilegeAllowPorts
=
make
(
map
[
int64
]
struct
{})
tmpStr
,
ok
=
conf
.
Get
(
"common"
,
"privilege_allow_ports"
)
...
...
@@ -215,7 +205,7 @@ func LoadServerCommonConf(conf ini.File) (cfg *ServerCommonConf, err error) {
err
=
fmt
.
Errorf
(
"Parse conf error: privilege_allow_ports is incorrect, %v"
,
errRet
)
return
}
ServerCommonC
fg
.
PrivilegeAllowPorts
[
singlePort
]
=
struct
{}{}
c
fg
.
PrivilegeAllowPorts
[
singlePort
]
=
struct
{}{}
}
else
if
rangeType
==
2
{
// range ports
min
,
errRet
:=
strconv
.
ParseInt
(
portArray
[
0
],
10
,
64
)
...
...
server/service.go
浏览文件 @
3fe50df2
...
...
@@ -169,6 +169,7 @@ func (svr *Service) Run() {
stream
,
err
:=
session
.
AcceptStream
()
if
err
!=
nil
{
log
.
Warn
(
"Accept new mux stream error: %v"
,
err
)
session
.
Close
()
return
}
wrapConn
:=
frpNet
.
WrapConn
(
stream
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录