有些操作需要在公司电脑才能完成,如果不在公司的时候,需要连接到公司电脑,这个时候就需要工具来进行内网穿透。frp就是这样一款工具。
开局一张图,其余看不看都无所谓:
如图所示,svr1和svr2是公司局域网的两台机器,在家班工的用户,希望可以远程访问它们:
- svr1上运行有一个web应用,可能是公司内部的OA系统,用户希望通过浏览器可以直接访问;
- svr2上开启了远程桌面3389端口,用户希望可以通过远程桌面直接连到这台机器进行操作;
正常情况下这些需求无法实现,因为svr1和svr2处于局域网,远程用户是访问不到的,此时就需要用到内网穿透技术。
一、下载安装
下载地址:https://github.com/fatedier/frp/releases
当前版本最新事0.57.0,可以看到有多个平台的安装版本:
- macos平台:frp_0.57.0_darwin_amd64.tar.gz
- linux平台:frp_0.57.0_linux_amd64.tar.gz
- windows平台:frp_0.57.0_windows_amd64.zip
如果访问太慢,可以从csdn下载0.57.0版本:
- macos平台:frp-v0.57.0-macos安装包
- linux平台:frp-v0.57.0-linux安装包
- windows平台:frp-v0.57.0-windows安装包
下载后解压,目录结构:
其中 frpc.exe、frpc.toml是客服端,frps.exe、frps.toml是服务端。
这里注意的是,frp从0.52.0开始弃用ini配置文件,改为toml配置。
还有个点注意下,服务端和客户端可以是不同版本,比如服务端是linux系统,客户端是windows系统,这在一般的公司环境中很正常。
我们接下来的场景假设就是这种情况,服务端是CentOS,客户端是Windows系统。
二、服务端配置
把frps、frps.toml拷贝到服务器10.0.0.123上。比如 /home/apps/frp/。
2.1 打开frps.toml编辑:
# 服务发布地址
bindAddr = 0.0.0.0
bindPort = 6666# 认证密码
auth.token=admin888# 仪表盘用户密码
webServer.addr = 0.0.0.0
webServer.port=8888
webServer.user=admin
webServer.password=admin999
enablePrometheus=true# 日志
log.to=/home/apps/frp/log/frps.log
log.level=info
log.maxDays=3
- bindPort,服务发布端口
- auth.token,客户端连接时的认证密码
- webServer.port,网页访问frp时的web服务端口
- webServer.user,网页访问frp时的登陆账号
- webServer.password,网页访问frp时的登陆密码
这里主要是区分一下两个密码,
auth.token 是客户端连接服务端的授权密码,也就是图1中第一步注册认证密码,
webServer.password 是通过网页查看frp网站时的登陆密码。
2.2 frps新老版本配置文件的区别
frp的ini版本和toml版本的配置基本出入不大:
2.3 配置自启动服务
添加服务:
> vi /etc/systemd/system/frp.service
编辑内容:
[Unit]
Description=frp serviceAfter=network.target syslog.target
Wants=network.target
[Service]
User=root
WorkingDirectory=/home/apps/frp/
PrivateTmp=true
Restart=always
Type=simple
ExecStart=/home/apps/frp/frps -c /home/apps/frp/frps.toml
ExecStop=/usr/bin/kill -15 $MAINPID[Install]
WantedBy=multi-user.target
2.4 保存退出,启动服务
# 启动服务
> systemctl start frp
# 查看服务状态
> systemctl status frp
三、客户端配置
把frpc.exe、frpc.toml拷贝到局域网服务器上。
3.1 打开frpc.toml编辑:
# 指定服务端
serverAddr = "10.0.0.123"
serverPort = 6666
# 服务端认证密码
auth.token=admin888
[[proxies]]
name = "svr1"
type = "tcp"
localIP = "192.168.1.101"
localPort = 80
remotePort = 8080
[[proxies]]
name = "svr2"
type = "tcp"
localIP = "192.168.1.102"
localPort = 3389
remotePort = 8081
- serverAddr,服务端地址
- serverPort,服务端服务发布端口
- auth.token,服务端认证密码
- [[proxies]],内网服务
- localIP,内网服务器的地址
- localPort,内网服务器提供服务的端口
- remotePort,从公网访问此内网服务时提供的端口
多个内网服务的配置也是比较简单的,就是添加多个[[proxies]]。
3.2 frpc新老版本配置文件的区别
frp的ini版本和toml版本的配置基本出入不大:
3.3 配置自启动
如果客户端也是CentOS系统,类似frps服务端,添加服务:
> vi /etc/systemd/system/frpc.service
编辑内容:
[Unit]
Description=frp clientAfter=network.target syslog.target
Wants=network.target
[Service]
User=root
WorkingDirectory=/home/apps/frp/
PrivateTmp=true
Restart=always
Type=simple
ExecStart=/home/apps/frp/frpc -c /home/apps/frp/frpc.toml
ExecStop=/usr/bin/kill -15 $MAINPID[Install]
WantedBy=multi-user.target
3.4 启动客户端
> frpc.exe -c frpc.toml
如果配置了自启动,通过服务启动:
> systemctl daemon-reload
> systemctl start frpc
四、远程用户访问
4.1 访问svr1
通过浏览器打开,输入网址 “http://10.0.0.123:8080”。
4.2 访问svr2
通过远程桌面,输入计算机 “10.0.0.123:8081”。
4.3 访问运维页面
打开浏览器,输入网址 “http://10.0.0.1:8888”。
首次访问时需要账号密码:
登陆后的界面: