前言
电信运营商因为IP地址短缺常常不会给用户分配公网IP地址,而我们的台式机、NAS等设备却有远程访问的需求,此时选择使用frp进行内网穿透再合适不过了。
frp(Fast Reverse Proxy)作为一个用于网络通信的开源工具,常用于在内网和外网之间建立反向代理通道,实现内网服务的外部访问。该技术可以应用于内网服务器、摄像头、传感器等设备的远程访问或监控上。
工作原理:服务端运行,监听一个主端口,等待客户端的连接 → 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型 → 服务端fork新的进程监听客户端指定的端口 → 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端 → 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。
项目地址:https://github.com/fatedier/frp
服务器配置
1.运行如下命令,选择相应版本下载
1
| wget https://github.com/fatedier/frp/releases/download/v0.52.0/frp_0.52.0_linux_amd64.tar.gz
|
2.解压frp压缩包
1
| tar -zxvf frp_0.52.0_linux_amd64.tar.gz
|
3.将文件复制到frps/usr/bin
1
| cp frp_0.52.0_linux_arm64/frps/usr/bin/
|
4.打开配置文件
5.配置文件修改:/etc/frp/frps.toml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 服务端与客户端通信端口,默认是7000 bindPort = 7000 # 服务端将只接受TLS链接 transport.tls.force = true # 身份验证令牌可以设置复杂点,frpc要与frps一致 auth.method = "token" auth.token = "设置复杂点的token" # 如"PuBlicOde"
# 后台管理地址 webServer.addr = "0.0.0.0" # 后台管理端口 webServer.port = 7500 # 设置后台登录的用户名和密码 webServer.user = "admin" webServer.password = "自行设置登录密码"
|
6.配置文件修改:/etc/systemd/system/frps.service
1 2 3 4 5 6 7 8 9 10 11
| [Unit] Description = frp server After = network.target syslog.target Wants = network.target
[Service] Type = simple ExecStart = /usr/bin/frps -c /etc/frp/frps.toml
[Install] WantedBy = multi-user.target
|
7.输入以下命令,启动frp服务
1 2 3
| systemctl daemon-reload systemctl enable frps systemctl start frps
|
8.Ubuntu服务器,使用ufw工具放行端口
1 2 3 4
| # 监听端口 ufw allow 7000/tcp # 对外开发的端口 ufw allow 443
|
客户端配置
1.运行如下命令,选择相应版本下载
1
| wget https://github.com/fatedier/frp/releases/download/v0.52.0/frp_0.52.0_linux_amd64.tar.gz
|
2.解压frp压缩包
1
| tar -zxvf frp_0.52.0_linux_amd64.tar.gz
|
3.将文件复制到frps/usr/bin
1
| cp frp_0.52.0_linux_arm64/frps/usr/bin/
|
4.打开配置文件
5.配置文件修改:/etc/frp/frps.toml
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
| # 设置为服务器的IP地址 serverAddr = "x.x.x.x" # 服务器的通信端口 serverPort = 7000 auth.method = "token" # 身份验证令牌,与服务器保持一致 auth.token = "之前设置的token"
# 配置http服务,可以自行配置多个代理 [[proxies]] name = "test-http" type = "tcp" # 设置为需要开放服务的主机IP localIP = "127.0.0.1" localPort = 目标主机的端口 # 自定义的远程服务器端口 remotePort = 服务器开放端口
# 配置ssh服务 [[proxies]] name = "ssh" type = "tcp" # 设置为需要开放服务的主机IP localIP = "127.0.0.1" localPort = 目标主机的端口 # 自定义的远程服务器端口 remotePort = 服务器开放端口
|
6.配置文件修改:/etc/systemd/system/frpc.service
1 2 3 4 5 6 7 8 9 10 11 12 13
| [Unit] Description=Frp Client Service After=network.target [Service] Type=simple DynamicUser=yes Restart=on-failure RestartSec=5s ExecStart=/usr/bin/frpc -c /etc/frp/frpc.toml ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.toml LimitNOFILE=1048576 [Install] WantedBy=multi-user.target
|
7.输入以下命令,启动服务
1 2 3
| systemctl daemon-reload systemctl enable frpc systemctl start frpc
|