我将以您的服务器 dev.hostcache.com 作为frp的服务端(frps),为您提供一个详细的、分步式的配置指南。
dev.hostcache.com)。它像一个“总机”,负责接收来自外网的请求和来自内网客户端的连接。整个连接过程是这样的:
[您在外部的电脑] ---SSH连接---> [dev.hostcache.com:6000] ===(frp隧道)===> [您家中的Linux服务器:22]
(第3步) (第1步: frps 服务端) (第2步: frpc 客户端)
您最终SSH连接的目标地址是您的公网服务器 dev.hostcache.com,但端口是一个您自定义的特殊端口(例如 6000)。frps 会将这个端口的流量通过frp建立的安全隧道,转发给您家里的Linux服务器的22号SSH端口。
我们选择 dev.hostcache.com 作为服务端。
登录您的公网服务器
ssh [email protected]
下载并解压 frp
amd64。0.59.0 版本为例,您可以替换为最新版链接。# 下载
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
# 解压
tar -zxvf frp_0.59.0_linux_amd64.tar.gz
# 进入解压后的目录,目录名可能包含版本号
cd frp_0.59.0_linux_amd64
解压后,您会看到 frps、frpc 以及它们的配置文件 frps.toml 和 frpc.toml。在服务端,我们只关心 frps 和 frps.toml。
配置 frps.toml 文件
使用 vim 或 nano 编辑 frps.toml 文件:
nano frps.toml
将其内容修改为如下(这是一个精简且安全的配置):
# frps.toml
# frp服务端的监听端口,frpc客户端将通过此端口连接到frps
bindPort = 7000
# 认证令牌(Token),frpc客户端需要使用相同的令牌才能连接成功
# 请务必修改为一个复杂的、随机的字符串,这是安全的关键!
auth.token = "YourSecretToken_ChangeThis"
bindPort = 7000: 这是frp服务端和客户端之间通信的端口。auth.token: 这是一个密码,确保只有您自己的客户端才能连上。请务必替换成一个您自己的复杂密码。配置服务器防火墙
您的公网服务器必须放行两个端口:
7000 (TCP): 用于frp客户端连接(即 bindPort)。6000 (TCP): 这是我们计划用于从外网SSH访问的端口(即 remote_port,下一步客户端会配置)。如果您的服务器使用 ufw 防火墙 (常见于Ubuntu/Debian):
sudo ufw allow 7000/tcp
sudo ufw allow 6000/tcp
sudo ufw reload
如果使用 firewalld (常见于CentOS/RHEL):
sudo firewall-cmd --zone=public --add-port=7000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=6000/tcp --permanent
sudo firewall-cmd --reload
注意:如果您的云服务商(如阿里云、腾讯云、AWS)有安全组策略,您还需要在网页控制台中放行这两个端口。
启动 frps 服务
先在前台运行测试一下,确保没有报错:
./frps -c ./frps.toml
如果看到类似 frps started successfully 的日志,说明服务端配置成功。按 Ctrl+C 停止它,我们稍后会配置成系统服务。
现在回到您家里的、处于大内网的Linux服务器上。
下载并解压 frp
执行和第一步中相同的下载和解压操作。
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
tar -zxvf frp_0.59.0_linux_amd64.tar.gz
cd frp_0.59.0_linux_amd64
在客户端,我们只关心 frpc 和 frpc.toml。
配置 frpc.toml 文件
编辑 frpc.toml 文件:
nano frpc.toml
将其内容修改为如下:
# frpc.toml
# frps服务端的地址,也就是您公网服务器的域名或IP
serverAddr = "dev.hostcache.com"
# frps服务端的端口,必须与frps.toml中的 bindPort 一致
serverPort = 7000
# 认证令牌,必须与frps.toml中的 auth.token 完全一致
auth.token = "YourSecretToken_ChangeThis"
# 定义一个名为 "ssh" 的穿透规则
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000
serverAddr: 填写您公网服务器的域名。auth.token: 必须和服务器上设置的完全一样。[[proxies]]: 这里定义了一个具体的转发规则。
name: 规则名,自定义。type = "tcp": SSH 使用 TCP 协议。localIP = "127.0.0.1": SSH服务就在本机上。localPort = 22: 本机SSH服务的端口号。remotePort = 6000: 这是关键!它告诉frps在 dev.hostcache.com 上监听 6000 端口,并将流量转发到本机的22端口。启动 frpc 服务
同样,先在前台运行测试:
./frpc -c ./frpc.toml
如果您的配置都正确,您应该会看到类似 login to server success 的日志,表示客户端已经成功连接到服务端。
现在,一切准备就绪。您可以在任何地方(比如您的笔记本电脑,用手机开热点模拟外网)打开终端,使用以下命令连接您家里的服务器:
ssh [email protected] -p 6000
请注意命令的每一部分:
your_home_linux_username: 您家里那台Linux服务器的用户名。@dev.hostcache.com: 连接的目标是您的公网服务器地址。-p 6000: 使用的端口是您在 frpc.toml 中指定的 remotePort。如果一切顺利,系统会提示您输入密码(或使用密钥),然后您就成功登录到家里的Linux服务器了!
为了让frp在服务器重启后能自动运行,我们需要将它配置为 systemd 服务。
在公网服务器 dev.hostcache.com 上操作:
将 frps 和 frps.toml 移动到合适的目录:
sudo mkdir -p /etc/frp
sudo cp frps /usr/bin
sudo cp frps.toml /etc/frp/
创建 systemd 服务文件:
sudo nano /etc/systemd/system/frps.service
粘贴以下内容:
[Unit]
Description=FRP Server
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.toml
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps # 检查服务状态
在内网Linux服务器上操作:
同样,移动文件:
sudo mkdir -p /etc/frp
sudo cp frpc /usr/bin
sudo cp frpc.toml /etc/frp/
创建 systemd 服务文件:
sudo nano /etc/systemd/system/frpc.service
粘贴以下内容(注意 ExecStart 的路径和程序名):
[Unit]
Description=FRP Client
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.toml
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
sudo systemctl status frpc # 检查服务状态
现在您已经拥有了一个稳定、可靠且开机自启的内网穿透方案,可以随时随地访问您家中的Linux服务器了。