为了实现在外网访问本地云的需求,在一番调查之后选择使用frp配置内网穿透来实现。本文参考了互联网上的众多文章,一并放在最后。

在开始前默认你现在已经有了一个可以ping通的VPS,它的ip为:xxx.xxx.xxx.xxx,用户为:root

服务端安装与配置

通过ssh连接到VPS

ssh root@xxx.xxx.xxx.xxx # 连接到远程服务器				

wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 使用wget命令下载服务端压缩包
tar -zxvf frp_0.59.0_linux_amd64.tar.gz -C /usr/local # 解压到 /usr/local

进入/etc/systemd/system目录,新建文件frps.service,配置如下:

# frps.service
[Unit] Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#Restart=always 
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp_0.59.0_linux_amd64/frps -c /usr/local/frp_0.59.0_linux_amd64/frps.toml #启动服务的命令 

[Install]
WantedBy=multi-user.target

保存,回到frp目录下

cd /usr/local/frp_0.59.0_linux_amd64
vim frps.toml #编辑frps配置,frps中的s表示服务端,同理c表示客户端

配置如下:

# frps.toml  
bindPort = 7000 # 服务端与客户端通信端口  

transport.tls.force = true # 服务端将只接受 TLS链接  

auth.token = "public" # 身份验证令牌,frpc要与frps一致  

# Server Dashboard,可以查看frp服务状态以及统计信息  
webServer.addr = "0.0.0.0" # 后台管理地址  
webServer.port = 7500 # 后台管理端口  
webServer.user = "admin" # 后台登录用户名  
webServer.password = "admin" # 后台登录密码  

保存并退出。

启动frp服务端

sudo systemctl enbale frps # 设为开机自启
sudo systemctl start frps # 启动frp
sudo systemctl status frps # 查看启动日志

如果没有任何报错说明服务启动成功。此时可以在网上访问端口号为7500的面板,在浏览器里输入xxx.xxx.xxx.xxx:7500,即可登录到frp的控制面板。如果访问不到,检查服务器上是否开启了7000与7500端口。执行如下操作:

sudo ufw status # 检查当前防火墙的状态
sudo ufw allow <你要开启的端口>

如果还访问不到,那可能需要一点魔法。

客户端安装与配置

下载与解压的方法一样,只不过在客户端配置的是frpc服务,注意是frpc不是frps。

进入/etc/systemd/system目录,新建文件frpc.service,配置如下:

# frpc.service
[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#Restart=always
Restart=on-failure
RestartSec=5s
#启动服务的命令

ExecStart=/usr/local/frp_0.59.0_linux_amd64/frpc -c /usr/local/frp_0.59.0_linux_amd64/frpc.toml

[Install]
WantedBy=multi-user.target

保存,回到frp目录下

cd /usr/local/frp_0.59.0_linux_amd64
vim frpc.toml #编辑frpc配置

配置如下:

# frpc.toml
transport.tls.enable = true # 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "xxx.xxx.xxx.xxx"
serverPort = 7000 # 公网服务端通信端口

auth.token = "public" # 令牌,与公网服务端保持一致

[[proxies]]
name = "test_case"
type = "tcp"
localIP = "127.0.0.1" # 需要暴露的服务的IP
localPort = xxxx # 本地服务的端口
remotePort = xxxx # 暴露服务的公网端口

保存并退出。

启动frp服务端:

sudo systemctl enbale frpc # 设为开机自启
sudo systemctl start frpc # 启动frp
sudo systemctl status frpc # 查看启动日志

不出意外的话,现在就可以在公网上访问本地服务器上的服务了。如果还有其他问题可以使用如下命令:

sudo journalctl -u frpc -e # 在客户端运行
sudo journalctl -u frps -e # 在服务端运行

查看客户端和服务端的日志,看不懂没关系,把结果喂给GPT一步步排查就好,大部分情况是网络问题。

Reference

## 2024年了居然有人还不会搭建FRP做内网穿透
frp图解 附最新.toml配置文件 
教你新手怎么搭建frp内网穿透教程VPS云服务器搭建最新教程+注意细节【快速上手】