最近偶然留意到了 frp ,手头刚好有闲置的 Mac 设备,跟着官方 ReadMe 走下来,基本上跑的通。简单的写个教程,算做总结。
一、前期准备
- 公网 IP
一定要。并且需要在公网 IP 这台机器上运行 frp 的 server 程序。
- 客户端设备
局域网要做内网穿透的设备,部署 frp 的 client 程序。
二、frp 下载与部署
下载
github 开源地址:https://github.com/fatedier/frp 。直接去 Releases 选择最新的版本下载。操作系统和CPU位数等都注明了,对应的选择合适的下载即可。
安装、配置、启动
安装使用主要是看官方的使用教程:Example Usage 。frp 不需要特别的安装,下载解压后直接就能进行配置和启动程序了。
以我下载的适配 mac 的客户端为例,解压后如下:
➜ frp_0.51.2_darwin_amd64 tree
.
|____frpc
|____frps.ini
|____frps_full.ini
|____LICENSE
|____frpc.ini
|____frps
|____frpc_full.ini
Zsh其中文件名 frp 后是 c 后缀的,就是客户端相关;s 后缀就是服务端相关。frpc 是客户端程序,frpc.ini 是客户端配置文件,frpc_full.ini 是客户端的全部配置字段,可以用作参考。frps 各文件同 frpc。
分别讲一下 server 和 client 配置和启动:
- server 配置和启动
在公网 IP 机器上下载 frp 程序,或者将对应的 frp 程序上传到公网 IP 的机器,修改 frps.ini 配置。我使用的配置如下( x 均为马赛克):
/xxx/frp_0.51.2_linux_amd64 cat frps.ini
[common]
bind_port = 7000
vhost_http_port = 70xx
dashboard_port = 7500
# dashboard's username and password are both optional
dashboard_user = xxxx
dashboard_pwd = xxxx
token = xxxx
Bashbind_port 是用于 server 和 client 的通讯端口,所以服务器防火墙要打开 bind_port 端口。vhost_http_port 是我配置的 http 代理端口,非必需。
dashboard_xx 对应的是 frp 管理后台的配置,直接在 dashboard 看配置的代理是否正常,比较方便。dashboard_port 端口也要打开。
token 是服务端和客户端校验比对使用的,必须一致。安全起见最好配一下 token。
配置好了之后要启动服务端程序,启动方法如下:
./frps -c ./frps.ini
Bash程序启动后不可以退出。推荐这个方法启动:
nohup ./frps -c ./frps.ini &
Bash- client 的配置与启动
在 client 设备下载并解压 frp 程序,修改 frpc.ini 配置。我使用的配置如下:
/xxx/frp_0.51.2_darwin_amd64 cat frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000
token = xxxx
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[xxxx]
type = http
local_port = 80xx
custom_domains = xxxx.phoene.com
Zshserver_addr 即公网 IP。
server_port 就是在 server 配置启动部分,配置的 bind_port。
token 同 server 的 token。
[ssh] 节点配置的是一个 tcp 类型的代理,用于 ssh 登录。其中公网 IP 机器要把 remote_port 也打开。
[xxxx] 节点是我配置的一个 http 节点,非必需。我在穿透后的局域网设备上,部署了一个 jenkins 服务,所以配置了这个节点,就可以在外网通过 xxxx.phoene.com 域名访问服务。
至此,客户端配置也比较简单,启动方法如下:
./frpc -c ./frpc.ini
Zsh同 server 部分所述,你最好这样启动:
nohup ./frpc -c ./frpc.ini &
Zsh三、frp 部署后验证和使用
一顿操作猛如虎,结果如何呢?可以这样验证:
- dashboard
如果 frp server 部分有配置 dashboard 的话,可以直接通过这个链接访问 dashboard:
http://[公网 IP]:dashboard_port
假设你的公网 IP 是 133.134.135.136,dashboard_port 是 7500,则访问链接是:http://133.134.135.136:7500 。
如果可以正常打开,使用账号 dashboard_user 和密码 dashboard_pwd 登录进入后,在管理后台的 Proxies 菜单里可以看到客户端配置是否生效,比如 TCP 下会看到我们配置的 SSH 节点,并且会有 online 的状态标识。
- ssh 登录穿透后的设备
登录命令是:
ssh [client 用户名]@[公网 IP] -p[remote_port]
Zsh如果你部署 client 的设备,也即内网穿透的设备,假如用户名是 frp_root;假设你的公网 IP 是 133.134.135.136,client 的 [ssh] 节点部分配置的 remote_port 是 6000,那么你在外网使用 ssh 登录内网穿透的设备的命令是:
ssh frp_root@133.134.135.136 -p 6000
Zsh不出意外的话,输入 frp_root 用户对应的密码,就可以在外网通过 ssh 访问内网设备了。如果出了意外,检查 frp 都没问题后,记得去看一下端口是否开放,局域网 client 设备的用户、密码和远程访问等是否开启。
四、frp 内网穿透有什么用?
自己做 NAS 挺不错的,稳定性的话就自己去保障了。
我做了内网穿透后,是想做为测试环境服务器使用。
client 我直接安装了 docker ,通过 docker 启动了 jenkins、mysql 等各种服务。还可以部署自己应用的测试环境。
可以通过域名从外网访问 client 上的服务,步骤大概是:先把域名解析到公网 IP,公网 IP 的机器通过 nginx 代理转发到 vhost_http_port 端口上,frp 会继续转发到 client 设备上,再通过 client 的配置代理到本机的对应端口上。
以上看出,ssh 登录 client 可以进行运维,通过 http 代理可以正常访问服务,做测试服务器再合适不过了。
至于 client 安装 docker、域名各种代理、解析之类,不在此次教程范围,就不赘述了。
进阶推荐:
md😠
远程登录 frpc,一不留神儿把 frpc 进程给杀了,连接直接断开。💔
回去就把 frpc 部署到 docker,部署完再更一篇。💪