一、环境搭建

第一步:连接到你的云服务器

我这使用的是 SSH连接。

第二步:更新系统软件包(保持系统最新)

1
apt update && apt upgrade -y

作用:更新软件源列表并升级所有已安装的软件包,确保系统安全和稳定。

第三步:安装 frp 服务端 (frps)

frp 是一个轻量级的内网穿透工具,服务端运行在你的云服务器上,负责接收公网请求并转发到内网。

3.1 下载 frp

frp发布页查询目前最新版本,然后复制对应版本的文件连接,使用以下命令进行下载。

1
2
cd /root
wget https://github.com/fatedier/frp/releases/download/v0.68.0/frp_0.68.0_linux_arm64.tar.gz

作用:从 GitHub 下载 frp 0.68.0 版本的 Linux 压缩包。

由于服务器网络问题,我这里选用的是

1
wget https://ghproxy.net/https://github.com/fatedier/frp/releases/download/v0.68.0/frp_0.68.0_linux_arm64.tar.gz

3.2 解压

1
tar -zxvf frp_0.68.0_linux_amd64.tar.gz

作用:解压得到 frp_0.68.0_linux_amd64 文件夹。

3.3 进入文件夹并查看内容

1
2
cd frp_0.68.0_linux_amd64
ls -l

你会看到 frpsfrps.toml 等文件。frps 是服务端程序,frps.toml 是配置文件。

3.4 配置 frps

1
nano frps.toml

删除原有内容,输入以下内容:

1
2
3
bindPort = 7000
vhostHTTPPort = 8080
vhostHTTPSPort = 8443

Ctrl+X,按 Y,按 Enter 保存。

作用

  • bindPort = 7000:frp 客户端(你内网的 frpc)连接此端口建立隧道。
  • vhostHTTPPort = 8080:frp 将接收到的 HTTP 流量转发到此端口,之后由 Nginx 接收。
  • vhostHTTPSPort = 8443:类似,用于 HTTPS 流量。

3.5 测试运行 frps

1
./frps -c frps.toml

如果看到 start frps success 字样,按 Ctrl+C 停止。测试通过后,我们把它做成系统服务。

3.6 创建 systemd 服务(实现开机自启)

1
nano /etc/systemd/system/frps.service

粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Frp Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/frp_0.61.0_linux_amd64
ExecStart=/root/frp_0.61.0_linux_amd64/frps -c /root/frp_0.61.0_linux_amd64/frps.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

保存退出。

作用:让 systemd 管理 frps,开机自动启动,异常退出时会自动重启。

3.7 启动 frps 服务

1
2
systemctl daemon-reload
systemctl enable frps --now

作用:重新加载 systemd 配置,设置 frps 开机自启并立即启动。

3.8 检查状态

1
systemctl status frps

应该显示 active (running)

确认状态显示 active (running) 后,按 q 退出。

第四步:安装 Nginx(作为公网入口)

Nginx 是一个高性能的 Web 服务器和反向代理。这里它负责接收来自公网的 HTTP/HTTPS 请求,并根据域名转发给 frp 的虚拟主机端口。

4.1 安装 Nginx

1
apt install nginx -y

4.2 验证 Nginx 是否运行

1
systemctl status nginx

浏览器访问 http://120.79.200.141,应该能看到 Nginx 欢迎页。

第五步、在内网服务器上安装frp客户端

假设你已经可以通过 SSH 登录到 192.168.3.69(或者在那台机器上直接操作)。

内网服务器通常需要通过本地网络访问。假设你有一台电脑在内网,可以用 SSH 连接 192.168.3.69

1
2
3
4
cd /root
wget https://github.com/fatedier/frp/releases/download/v0.68.0/frp_0.68.0_linux_amd64.tar.gz
tar -zxvf frp_0.68.0_linux_amd64.tar.gz
cd frp_0.68.0_linux_amd64

只需要 frpcfrpc.toml两个文件即可。

至此环境搭建已经完成。


二、开始配置内网穿透

假设你有两个网站:site1.example.comsite2.example.com(请替换为你自己的真实域名)。

1、域名解析

去你的域名服务商(如阿里云、Cloudflare)添加 A 记录:

  • 主机记录 site1 → 记录值 120.79.200.141
  • 主机记录 site2 → 记录值 120.79.200.141

(如果你用的是二级域名如 site1.example.com,主机记录填 site1

等待 DNS 生效(通常几分钟到几小时)。

然后继续完成以下步骤:

2、在云服务器创建网站的配置文件

创建配置文件,第一个网站:site1.example.com
连接云服务器,执行:

1
nano /etc/nginx/sites-available/site1

粘贴以下内容(注意把 site1.example.com 换成你的域名):

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name site1.example.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

保存退出。

作用:当用户访问 site1.example.com 时,云服务器上的Nginx 将请求转发到家里的 8080 端口(即 frps 监听的 HTTP 虚拟主机端口)。


创建第二个网站的配置文件

1
nano /etc/nginx/sites-available/site2

内容类似,把 server_name 换成第二个域名。

3、启用站点

1
2
ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/site2 /etc/nginx/sites-enabled/

作用:在 sites-enabled 目录创建符号链接,Nginx 会加载这些配置。

4、测试 Nginx 配置语法

1
nginx -t

如果显示 syntax is oktest is successful,则配置正确。

5、重载 Nginx 使配置生效

1
systemctl reload nginx

6、开放云服务器防火墙和安全组

6.1 检查 ufw 状态

1
ufw status

如果显示 inactive,跳过;如果 active,则需要放行端口。

6.2 放行云服务器的必要端口(如果 ufw 开启)

1
2
3
4
ufw allow 22/tcp   # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS(将来用)
ufw allow 7000/tcp # frp 控制端口

然后 ufw reload

6.3 阿里云安全组设置(非常重要)

登录阿里云控制台,找到你的实例 → 安全组 → 配置规则 → 添加入方向:

  • 端口:80/80,授权对象:0.0.0.0/0
  • 端口:443/443,授权对象:0.0.0.0/0
  • 端口:7000/7000,授权对象:0.0.0.0/0

作用:允许公网访问这些端口。


在内网服务器(192.168.3.69)上配置 frp 客户端 (frpc)

假设你已经可以通过 SSH 登录到 192.168.3.69(或者在那台机器上直接操作)。

内网服务器通常需要通过本地网络访问。假设你有一台电脑在内网,可以用 SSH 连接 192.168.3.69

1、 配置 frpc.toml

打开frpc.toml文件

1
nano frpc.toml

输入以下内容(注意修改域名和本地端口):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
serverAddr = "120.79.200.141"
serverPort = 7000

[[proxies]]
name = "site1"
type = "http"
localIP = "127.0.0.1"
localPort = 3000 # 内网服务器上 site1 的端口
customDomains = ["site1.example.com"]

[[proxies]]
name = "site2"
type = "http"
localIP = "127.0.0.1"
localPort = 3001 # 内网服务器上 site2 的端口
customDomains = ["site2.example.com"]

保存退出。

作用:告诉 frpc 连接到你的云服务器,并将指定域名的 HTTP 请求转发到内网服务器的对应端口。

2、测试运行 frpc

1
./frpc -c frpc.toml

如果看到 start proxy success,说明隧道建立成功。按 Ctrl+C 停止,然后我们让它后台运行。

3、使用 systemd 管理 frpc(可选,推荐)

类似云服务器,创建服务文件:

1
nano /etc/systemd/system/frpc.service

内容:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Frp Client
After=network.target

[Service]
Type=simple
WorkingDirectory=/root/frp_0.61.0_linux_amd64
ExecStart=/root/frp_0.61.0_linux_amd64/frpc -c /root/frp_0.61.0_linux_amd64/frpc.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动:

1
2
3
systemctl daemon-reload
systemctl enable frpc --now
systemctl status frpc

第八步:测试访问

在内网服务器上确保你的网站服务正在运行(例如 python -m http.server 3000 测试)。然后在外网用浏览器访问 http://site1.example.com,应该能看到你的网站内容。


常见问题排查

  1. 访问不了:检查云服务器安全组是否开放 80 端口;检查 Nginx 配置中的 server_name 是否与域名完全一致;检查 frpc 日志(journalctl -u frpc -f)。
  2. 502 Bad Gateway:frps 未运行或端口不对;检查 frps 的 vhostHTTPPort 是否 8080,Nginx 的 proxy_pass 是否指向 http://127.0.0.1:8080
  3. 404 Not Found:frpc 配置中的 customDomains 可能未匹配上,或者内网网站服务未启动。

移动frp和配置文件到指定目录启动

(这一步用不着,只是我喜欢把软件放在指定目录,方便管理)

移动 frpc 可执行文件和配置文件

假设你当前 frpc 在 /home/risespark/frp/ 目录下:

我想把frpc和配置文件移动到指定目录"/mnt/1T-disk/DIY-docker配置文件/我的阿里云服务器-内网穿透/"

1
2
3
4
5
# 移动 frpc 可执行文件到新目录
sudo mv /home/risespark/frp/frpc "/mnt/1T-disk/DIY-docker配置文件/我的阿里云服务器-内网穿透/"

# 移动配置文件 frpc.toml
sudo mv /home/risespark/frp/frpc.toml "/mnt/1T-disk/DIY-docker配置文件/我的阿里云服务器-内网穿透/"

创建一个软链接到简单路径,这样既保留你的目录结构,又避免 systemd 解析问题

1
2
3
4
5
# 1. 创建一个无空格无中文的软链接目录
sudo ln -s "/mnt/1T-disk/DIY-docker配置文件/我的阿里云服务器-内网穿透" /opt/frpc-data

# 2. 验证软链接
ls -l /opt/frpc-data

修改 systemd 服务文件

1
sudo nano /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
User=root
WorkingDirectory=/opt/frpc-data
ExecStart=/opt/frpc-data/frpc -c /opt/frpc-data/frpc.toml
Restart=on-failure

[Install]
WantedBy=multi-user.target

保存退出。

1
2
3
4
5
6
7
# 3. 确保 frpc 可执行权限
sudo chmod +x /opt/frpc-data/frpc

# 4. 重新加载并重启
sudo systemctl daemon-reload
sudo systemctl restart frpc
sudo systemctl status frpc

这样应该不会再报错,并且配置文件和程序仍然实际存储在你指定的中文目录下(通过软链接访问)。

验证

1
sudo journalctl -u frpc -n 20

应该看到 start proxy success

然后测试访问网站。