使用一个公网服务器做内网穿透超详细

📌 FRP - Linux & Win 内网穿透教程

📖 目录

  • 🌍 什么是 FRP?
  • ⚡ 安装与配置
  • 🎯 服务器端配置
  • 🏠 客户端配置
  • 📝 测试与验证
  • 📌 结语

🌍 什么是 FRP?

FRP(Fast Reverse Proxy)是一款可以用于内网穿透的开源工具,支持 TCP/UDP/HTTP/HTTPS 协议,可以将内网服务暴露到公网,实现从任意网络环境访问到你的服务器或电脑。

内网穿透用于解决局域网设备对外提供服务的问题。当我们在局域网中部署了web服务或其他服务,但只有局域网IP而没有公网IP时,外部设备无法直接访问这些服务。通过内网穿透技术,可以让公网上的用户访问到局域网内的服务。

🔗 Frp官网:https://github.com/fatedier/frp

⚡ 安装与配置

❗ 前置要求

  • 一台有公网IP的服务器
  • 你需要实现内网穿透的服务器或电脑

🔹 1. 下载 FRP

前往 GitHub FRP Releases 下载适合你系统的版本:

💡 提示:

  • 文件格式是 frp_0.61.1_xxx(适用系统)_yyy(系统架构).tar.gz
  • Windows系统下载 frp_0.61.1_windows_amd64.zip
  • Linux系统amd架构下载 frp_0.61.1_linux_amd64.tar.gz
  • Linux系统arm架构下载 frp_0.61.1_linux_arm64.tar.gz

Linux查看系统架构的指令:

bash 复制代码
uname -m

输出示例:

  • x86_64: 表示 64 位 x86 架构(也称为 AMD64)
  • i686 或 i386: 表示 32 位 x86 架构
  • aarch64: 表示 64 位 ARM 架构
  • mips: 表示 MIPS 架构
Windows下载方式:

直接点击链接下载,下载完把zip解压出来

Linux下载方式:
bash 复制代码
# AMD架构下载
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_amd64.tar.gz

# ARM架构下载 树莓派 香橙派 用这个下载
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_arm64.tar.gz
Linux解压文件:
bash 复制代码
# AMD架构是这个
tar -xvzf frp_0.61.1_linux_amd64.tar.gz

# ARM架构是这个
tar -xvzf frp_0.61.1_linux_arm64.tar.gz

> tar命令参数详解:
> - `-x`: 解压模式(extract)
> - `-v`: 显示详细过程(verbose)
> - `-z`: 使用gzip解压缩(gunzip)
> - `-f`: 指定文件名(file)
>
> 所以 `tar -xvzf` 的含义是:
> 1. `-x`: 告诉tar要解压文件
> 2. `-v`: 在解压过程中显示正在解压的文件名
> 3. `-z`: 因为这是.gz格式,需要用gzip解压
> 4. `-f`: 后面接要解压的文件名
>
> 💡 Tips: 这些参数的顺序可以调整,但是`-f`参数后面必须紧跟文件名

#### 进入文件夹
```bash
cd frp_0.61.1_linux_amd64   # AMD架构
# 或
cd frp_0.61.1_linux_arm64   # ARM架构

💡 提示:根据你的系统架构,只需执行相应的命令。

🎯 服务器端配置

服务器端通常称为 frps,即 FRP 服务端,指的是有公网IP的服务器。

🔹 1. 服务器端 frps.toml 配置

在解压后的文件夹中,我们需要配置 frps.toml 文件:

bash 复制代码
# Linux查看文件
ls
# 通常会看到: frpc frpc.toml frps frps.toml LICENSE

# 编辑配置文件
nano frps.toml  # 或者使用vim: vim frps.toml

将以下配置复制到frps.toml中(删除原有内容):

toml 复制代码
# ==============================
# FRP 服务器端(frps.toml)配置
# ==============================

# 绑定监听地址(默认 `0.0.0.0` 代表监听所有 IP)
bindAddr = "0.0.0.0"

# 服务器监听端口(客户端需要通过该端口连接 FRP 服务器)
bindPort = 7000

# HTTP 端口(用于内网 HTTP 代理穿透)
vhostHTTPPort = 80

# HTTPS 端口(用于内网 HTTPS 代理穿透)
vhostHTTPSPort = 443

# 子域名支持
# 可以通过 `subDomainHost` 解析动态子域名
# 例如:如果 `subDomainHost` 配置为 "example.com"
# 那么客户端可以使用 `test.example.com` 访问内网服务
# 如果你没有域名或不使用此功能,请删除此行!
# 如果你要用IP直连例如:168.0.0.1:8848,就把这行删掉,不要配置!
subDomainHost = "xxxx.com"  # 请替换为你的真实域名

# =============================================
# Web 控制台(Dashboard)配置
# =============================================

# 监控界面监听地址(`0.0.0.0` 代表所有 IP 可访问)
webServer.addr = "0.0.0.0"

# Web 管理面板端口(可在浏览器访问,默认 7500)
# 你可以通过 `http://你的公网IP:7500` 访问 FRP 管理面板
webServer.port = 7500

# Web 控制台管理账号(可自定义)
webServer.user = "admin"

# Web 控制台密码(请自行修改)
webServer.password = "xxxx"

# =============================================
# 身份验证(Authentication)配置
# =============================================

# 认证方式(防止未经授权的客户端连接)
# 目前 FRP 支持 `token` 和 `oidc` 方式,我们选用token
auth.method = "token"

# Token 认证(客户端需要匹配相同 token 才能连接)
# 通俗来说就是密码,写一个你能记住的,尽量长一点
# 示例: 123-abc-123abc 
auth.token = "123-abc-123abc"   # 请自行修改,不要用示例中的值

💡 提示 :以上只是基本配置,查看完整配置参数可访问官方配置示例:frps_full_example.toml

🔹 2. 启动服务端frps

❗ 注意:启动指令必须在frp文件目录下执行!

Linux 启动指令
bash 复制代码
screen -S frps ./frps -c frps.toml

命令参数解析:

- `screen`: Linux下的终端复用工具,可以让程序在后台运行
- `-S frps`: 创建一个名为"frps"的新screen会话
- `./frps`: 运行当前目录下的frps程序
- `-c`: 指定配置文件参数
- `frps.toml`: 配置文件名称,使用TOML格式

这个命令的作用是:
1. 创建一个新的screen会话,命名为"frps"
2. 在这个会话中运行frps程序
3. 使用frps.toml作为配置文件
4. 让frps在后台持续运行,即使关闭终端也不会停止
Windows启动指令

在文件目录里,点击上方的路径栏输入cmd后按回车打开命令窗口,然后输入:

复制代码
frps.exe -c frps.toml

启动后不要关闭窗口!否则程序会终止运行。

成功启动后会出现类似以下信息:

复制代码
[frps/root.go:105] frps uses config file: frps.toml
[server/service.go:237] frps tcp listen on 0.0.0.0:7000
[server/service.go:305] http service listen on 0.0.0.0:80
[server/service.go:319] https service listen on 0.0.0.0:443
[frps/root.go:114] frps started successfully
[server/service.go:351] dashboard listen on 0.0.0.0:7500

💡 常见问题 & 注意事项

端口冲突问题

如果服务器80或443端口已被占用,可更换vhostHTTPPort和vhostHTTPSPort端口:

toml 复制代码
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
HTTP和HTTPS端口的作用
  • vhostHTTPPort(默认80端口):用于HTTP协议的内网穿透,当你使用"http"类型的代理时,所有HTTP请求会通过这个端口转发
  • vhostHTTPSPort(默认443端口):用于HTTPS协议的内网穿透,当你使用"https"类型的代理时,所有HTTPS请求会通过这个端口转发

这两个端口只有在你需要转发HTTP/HTTPS服务时才需要配置:

  1. 使用HTTP/HTTPS穿透和子域名功能时

    • 需要保证这两个端口未被占用,或者修改为其他未被占用的端口
    • 例如,当你配置了type = "http"subdomain = "test"时,用户可以通过http://test.example.com访问你的内网服务
  2. 仅使用TCP端口转发时

    • 如果你只使用TCP协议(例如type = "tcp"),无需关心这两个端口
    • 使用TCP协议时,用户通过服务器IP:远程端口访问,不经过HTTP/HTTPS端口
  3. 端口占用情况

    • 如果服务器上已有Web服务占用了80/443端口,可以修改为其他端口(例如8080/8443)
    • 修改后,通过http://yourdomain.com:8080或使用URL重写访问

只有使用HTTP/HTTPS类型代理时才需要关注这两个端口,纯TCP转发模式不受这两个端口的影响。

不同协议的访问方式

根据不同的协议类型和配置,访问方式会有所不同:

  1. TCP协议转发(例如SSH服务):

    toml 复制代码
    [[proxies]]
    name = "ssh_service"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 6000

    访问方式:ssh -p 6000 username@server_ip

    这种方式不使用vhostHTTPPort和vhostHTTPSPort,直接通过remotePort指定的端口访问

  2. HTTP协议转发(默认80端口):

    toml 复制代码
    [[proxies]]
    name = "web_service"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 80
    subdomain = "test"  # 假设域名为example.com

    访问方式:http://test.example.com

  3. HTTP协议转发(修改为8080端口):

    toml 复制代码
    # 服务端配置
    vhostHTTPPort = 8080
    
    # 客户端配置
    [[proxies]]
    name = "web_service"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 80
    subdomain = "test"  # 假设域名为example.com

    访问方式:http://test.example.com:8080

  4. 同时使用域名和TCP端口转发

    如果你需要同时使用域名模式和TCP端口转发,这是两个独立的配置,访问方式也不同:

    toml 复制代码
    # 客户端配置
    [[proxies]]
    name = "web_http"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 80
    subdomain = "test"  # 通过test.example.com访问
    
    [[proxies]]
    name = "ssh_tcp" 
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 6000  # 通过server_ip:6000访问
    • Web服务访问:http://test.example.com:8080(如果vhostHTTPPort=8080)
    • SSH服务访问:ssh -p 6000 username@server_ip

    注意:域名后面的端口8080是HTTP服务的端口,而不是SSH端口。SSH服务使用专门的TCP转发,通过remotePort指定的端口访问。

关于域名+端口转发

很多用户对域名、端口和协议类型之间的关系存在疑惑,这里进行详细说明:

  1. 使用域名+端口访问HTTP服务

    如果您在服务端修改了vhostHTTPPort (例如从80改为8080),那么通过域名访问时需要指定这个端口:

    toml 复制代码
    # 服务端配置
    vhostHTTPPort = 8080
    
    # 客户端配置
    [[proxies]]
    name = "web"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 80    # 本地网站端口
    subdomain = "www" # 子域名

    访问方式:http://www.yourdomain.com:8080

    解释::8080是因为服务端的vhostHTTPPort设置为8080,不是本地端口。

  2. 使用域名直接转发TCP服务(不支持)

    FRP不支持直接通过domain:port的方式访问TCP服务。例如,不能通过www.yourdomain.com:22来访问SSH服务。

    原因:域名解析是基于HTTP/HTTPS协议工作的,而TCP服务需要通过IP+端口直接访问。

    正确的做法是使用TCP类型的代理:

    toml 复制代码
    [[proxies]]
    name = "ssh"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22     # 本地SSH端口
    remotePort = 6000  # 远程访问端口

    访问方式:ssh -p 6000 username@server_ip

  3. 将域名+端口转发到本地不同端口

    如果要将域名的不同端口转发到本地不同服务,需要为每个端口配置单独的TCP代理:

    toml 复制代码
    # 将server_ip:6000转发到本地22端口
    [[proxies]]
    name = "ssh"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 6000
    
    # 将server_ip:8080转发到本地80端口
    [[proxies]]
    name = "web"
    type = "tcp" 
    localIP = "127.0.0.1"
    localPort = 80
    remotePort = 8080
    
    # 将server_ip:1433转发到本地SQL Server
    [[proxies]]
    name = "sql" 
    type = "tcp"
    localIP = "127.0.0.1" 
    localPort = 1433
    remotePort = 1433

    这种情况下,vhostHTTPPort和vhostHTTPSPort的设置不会影响TCP代理的访问。

  4. 使用HTTP类型代理转发不同的本地Web服务

    如果您有多个本地Web服务,想要通过不同的子域名访问:

    toml 复制代码
    # 服务端配置
    vhostHTTPPort = 8080
    
    # 客户端配置 - 转发本地80端口
    [[proxies]]
    name = "main_web"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 80
    subdomain = "www"
    
    # 客户端配置 - 转发本地8081端口的其他Web应用
    [[proxies]]
    name = "blog_web"
    type = "http"
    localIP = "127.0.0.1"
    localPort = 8081
    subdomain = "blog"

    访问方式:

    • http://www.yourdomain.com:8080 → 本地80端口服务
    • http://blog.yourdomain.com:8080 → 本地8081端口服务

    注意:访问时端口8080是vhostHTTPPort的设置,与本地端口无关。

总结:使用域名+端口访问时,需要区分HTTP/HTTPS协议和TCP/UDP协议的不同配置方式。对于HTTP/HTTPS协议,域名后的端口是指vhostHTTPPort;对于TCP/UDP协议,不能使用域名直接访问,需要使用IP+remotePort访问。

访问Web监控面板

通过 http://你的服务器IP:7500 可以访问FRP管理面板,查看连接状态。

Linux退出程序窗口
  • 按下Ctrl+A松开,再按一下D可以退出程序窗口(程序仍在后台运行)
  • 使用screen -r frps可以回到程序窗口
  • 使用pkill frps可以结束程序进程
使用systemd管理frps服务(推荐)

systemd是现代Linux系统中的主要初始化系统和服务管理器,使用systemd管理frps服务有以下重要优势:

  1. 自动启动:服务器重启后自动启动frps,无需手动干预
  2. 故障恢复:服务崩溃后自动重启frps服务
  3. 标准日志:通过journald统一管理日志,方便问题排查
  4. 优雅停止:正确处理服务停止信号,确保资源正确释放
  5. 依赖管理:可以设置服务启动顺序和依赖关系
  6. 状态监控:使用标准命令查看服务状态和健康情况

相比直接使用screen或nohup运行frps,systemd提供了更加完善、标准和可靠的服务管理方式。

配置步骤:
  1. 创建systemd服务文件

    bash 复制代码
    sudo vim /etc/systemd/system/frps.service

    写入以下内容:

    ini 复制代码
    [Unit]
    Description=frps service
    Documentation=https://github.com/fatedier/frp
    After=network.target
    Wants=network.target
    
    [Service]
    Type=simple
    # 替换为你的实际路径
    ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml
    Restart=on-failure
    # 重启前等待的时间
    RestartSec=5s
    # 使用专门的用户运行(可选,增强安全性)
    # User=frp
    # Group=frp
    # 设置合理的资源限制(可选)
    # LimitNOFILE=1048576
    
    [Install]
    WantedBy=multi-user.target
  2. 重新加载systemd配置

    bash 复制代码
    sudo systemctl daemon-reload

    此命令让systemd重新加载所有配置文件,识别新创建的服务文件。

  3. 启动frps服务

    bash 复制代码
    sudo systemctl start frps

    此命令启动frps服务,systemd会执行ExecStart中指定的命令。

  4. 设置开机自启

    bash 复制代码
    sudo systemctl enable frps

    此命令将frps服务设置为系统启动时自动启动。

  5. 查看服务状态

    bash 复制代码
    sudo systemctl status frps

    输出示例:

    复制代码
    ● frps.service - frps service
         Loaded: loaded (/etc/systemd/system/frps.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2025-03-25 15:32:45 CST; 3h 24min ago
       Main PID: 1234 (frps)
          Tasks: 12 (limit: 4915)
         Memory: 22.4M
         CGroup: /system.slice/frps.service
                 └─1234 /usr/local/frp/frps -c /usr/local/frp/frps.toml
常用的systemd管理命令:
bash 复制代码
# 启动服务
sudo systemctl start frps

# 停止服务
sudo systemctl stop frps

# 重启服务
sudo systemctl restart frps

# 重新加载配置(不中断服务)
sudo systemctl reload frps

# 查看详细日志
sudo journalctl -u frps

# 查看实时日志
sudo journalctl -u frps -f

# 检查服务是否开机启动
sudo systemctl is-enabled frps

# 禁用开机自启
sudo systemctl disable frps
为什么推荐使用systemd管理frps:
  1. 稳定性:长期运行的服务需要可靠的管理机制,systemd能确保服务持续运行
  2. 标准化:遵循Linux系统标准的服务管理方式,便于维护和操作
  3. 方便排错:集中的日志管理和状态监控,大大简化故障排查
  4. 安全性:可以限制服务的权限和资源使用,增强系统安全性
  5. 专业性:使用systemd管理服务是生产环境的最佳实践
注意事项:
  1. 必须使用root权限创建和管理systemd服务
  2. 确保ExecStart中的路径正确指向frps可执行文件和配置文件
  3. 如果修改了frps配置文件,需要重启服务:sudo systemctl restart frps
  4. 对于高安全需求场景,建议创建专门的非特权用户运行frps服务

🏠 客户端配置

客户端用于连接服务器,一般是内网服务器或个人电脑(如树莓派、香橙派或NAS)。

🔹 1. 配置 frpc.toml

客户端也需要下载相同版本的frp压缩包并解压,然后配置frpc.toml文件:

toml 复制代码
# 服务端地址(填你有公网IP的服务器的IP或域名)
serverAddr = "192.xxx.x.x"
# 服务器端口(Frp服务端监听的端口)
serverPort = 7000

# 连接协议
transport.protocol = "tcp"

# 认证方式
auth.method = "token"
# 认证所使用的Token(要和服务端token完全一样!)
auth.token = "123-abc-123abc"

# 代理配置
[[proxies]]
# 代理名称(标识该代理的名称,根据你的喜好填写)
name = "rocketcat"
# 代理类型(http、https、tcp等)
# 如果你有域名,就用http
# 如果你没有域名,那就用IP直连,用tcp协议
# 如果你用tcp协议就必须把服务端上subDomainHost配置删除!
# type = "tcp"   # IP+端口直连用这个
type = "http"
# 本地IP(Frp客户端需要将流量转发到的本地地址)
localIP = "127.0.0.1"
# 本地端口(Frp客户端需要将流量转发到的本地端口,根据你要穿透的端口来填写)
localPort = 8848
# 访问此代理的子域名
# 如果你没有域名要用IP直连,请把这句删除掉,否则会导致无法连接!
subdomain = "rocket" # 子域名请根据你拥有的域名配置,配置后通过rocket.xxx.com格式访问

# 如果你不用域名,要用ip+端口直连,请必须加上这句!
# 并且删除 subdomain = "rocket" 
# remotePort = 8848    # 这个端口和localPort配置的一模一样,这样才能正常访问!

💡 提示 :以上只是基本配置,查看完整配置参数可访问官方配置示例:frpc_full_example.toml

🔹 2. 启动客户端frpc

❗ 注意:启动指令必须在frp文件目录下执行!

Linux 启动指令:
bash 复制代码
screen -S frpc ./frpc -c frpc.toml
Windows启动指令:

在文件目录里,点击上方的路径栏输入cmd后按回车打开命令窗口,然后输入:

复制代码
frpc.exe -c frpc.toml

启动后不要关闭窗口!否则程序会终止运行。

成功启动后会出现类似以下信息:

复制代码
[I] [sub/root.go:142] start frpc service for config file [frpc.toml]
[I] [client/service.go:295] try to connect to server...
[I] [client/service.go:287] [7c9de41e30e15c46] login to server success, get run id [7c9de41e30e15c46]
[I] [proxy/proxy_manager.go:173] [7c9de41e30e15c46] proxy added: [rocketcat]
[I] [client/control.go:168] [7c9de41e30e15c46] [rocketcat] start proxy success

💡 常见问题 & 注意事项

文件配置错误

一定要注意客户端配置的是frpc.toml文件,不要配置错了。

IP+端口访问模式配置
  • 配置的时候必须删除服务端的subDomainHost
  • 配置type为TCP模式type = "tcp"
  • 配置remotePort监听你的端口remotePort = 8848
localIP设置说明

localIP 参数可以设置为任何您内网中可以访问到的IP地址,不一定要是127.0.0.1:

  • 127.0.0.1:当您要转发的服务运行在与frpc相同的机器上时使用
  • 局域网IP地址(如192.168.1.x):当您想转发局域网中其他设备上的服务时使用
  • 具体设备IP:如果您有多网卡或复杂网络环境,可以指向特定网卡IP

例如,如果您在设备A上运行frpc,但想转发设备B (192.168.1.100)上的Web服务:

toml 复制代码
[[proxies]]
name = "remote_web"
type = "tcp"
localIP = "192.168.1.100"  # 设备B的IP
localPort = 80
remotePort = 8080

确保从运行frpc的设备可以访问到localIP:localPort上的服务,否则转发将无法工作。

Linux退出程序窗口
  • 按下Ctrl+A松开,再按一下D可以退出程序窗口(程序仍在后台运行)
  • 使用screen -r frpc可以回到程序窗口
  • 使用pkill frpc可以结束程序进程

📝 测试与验证

🔹 1. 检查端口

在服务器端检查 FRPS 是否监听:

bash 复制代码
ss -tunlp | grep 7000
ss -tunlp | grep 7500

🔹 2. 访问 HTTP 服务

在浏览器访问你的网站:

  • 使用域名:http://subdomain.your-domain.com
  • 使用IP+端口:http://your-server-ip:port

📌 实用配置示例

IP直连+多端口转发配置示例

以下是使用IP直连模式(无需域名)并转发多个端口的配置示例。假设服务器公网IP为59.110.160.18。

服务器端配置 (frps.toml)
toml 复制代码
# ==============================
# FRP 服务器端配置 - IP直连示例
# ==============================

# 基础配置
bindAddr = "0.0.0.0"
bindPort = 7000

# 注意:使用IP直连时,不要配置subDomainHost

# Web控制台配置
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "strong_password" # 请修改为强密码

# 身份验证
auth.method = "token"
auth.token = "your_secure_token_123" # 请使用安全的token

# 日志设置
log.level = "info"
log.maxDays = 3
客户端配置 (frpc.toml)
toml 复制代码
# ==============================
# FRP 客户端配置 - IP直连+多端口示例
# ==============================

# 服务器连接信息
serverAddr = "59.110.160.18"
serverPort = 7000

# 认证方式
auth.method = "token"
auth.token = "your_secure_token_123" # 必须与服务端相同

# 连接协议
transport.protocol = "tcp"

# SSH服务转发示例 (通过59.110.160.18:2222访问内网SSH)
[[proxies]]
name = "ssh_service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 2222 # 外网访问端口

# Web服务转发示例 (通过59.110.160.18:8080访问内网Web服务)
[[proxies]]
name = "web_service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 80
remotePort = 8080 # 外网访问端口

# 远程桌面转发示例 (通过59.110.160.18:3389访问内网RDP)
[[proxies]]
name = "rdp_service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3389
remotePort = 3389 # 外网访问端口

# 数据库服务转发示例 (通过59.110.160.18:3306访问内网MySQL)
[[proxies]]
name = "mysql_service"
type = "tcp"
localIP = "127.0.0.1"
localPort = 3306
remotePort = 13306 # 外网访问端口,修改为13306避免与服务器本身的MySQL冲突

使用方法

  1. 在服务器上运行frps:

    bash 复制代码
    ./frps -c frps.toml
  2. 在内网设备上运行frpc:

    bash 复制代码
    ./frpc -c frpc.toml
  3. 通过以下方式访问内网服务:

    • SSH服务: ssh -p 2222 [email protected]
    • Web服务: 浏览器访问 http://59.110.160.18:8080
    • 远程桌面: 使用RDP客户端连接 59.110.160.18:3389
    • MySQL数据库: 使用数据库客户端连接 59.110.160.18:13306

安全提示

  1. 务必修改token为强密码,避免未授权访问
  2. 推荐在服务器端启用防火墙,只开放必要端口
  3. 考虑使用TLS加密传输数据,增强安全性
  4. 定期检查frps的日志,监控异常连接

常见问题解决

1. JSON解析错误问题

问题现象:

执行 ./frps -c frps.ini 命令时出现以下错误:

复制代码
error unmarshaling JSON: while decoding JSON: json: cannot unmarshal string into Go value of type v1.ServerConfig

原因分析:

这个错误通常是由于以下原因导致的:

  1. 使用了较新版本的frp,但配置文件格式仍使用旧版本的INI格式
  2. 配置文件中存在无效的格式或者格式问题

解决方案:

  1. 使用TOML格式配置文件

    根据官方文档,现在推荐使用TOML格式,按照本文档上述示例创建frps.toml配置文件

  2. 使用正确的配置文件版本

    • 查看当前frp版本: ./frps -v
    • 确保配置文件格式与当前版本兼容
端口作用总结

在FRP配置中,不同的端口有不同的用途:

端口配置项 默认值 作用 是否必需
bindPort 7000 客户端和服务端通信的端口 必需
webServer.port 7500 管理面板访问端口 可选
vhostHTTPPort 80 HTTP协议穿透端口 仅HTTP类型必需
vhostHTTPSPort 443 HTTPS协议穿透端口 仅HTTPS类型必需
remotePort 自定义 TCP/UDP协议穿透的公网访问端口 仅TCP/UDP类型必需
相关推荐
林开落L43 分钟前
Linux深度探索:进程管理与系统架构
linux·运维·系统架构
XINO1 小时前
防火墙双机热备实践
运维·安全
神洛华1 小时前
Docker概念详解
运维·docker·容器
四川合睿达自动化控制工程有限公司1 小时前
管道位移自动化监测方案
运维·自动化
007php0071 小时前
Docker Compose 安装Elasticsearch8和kibana和mysql8和redis5 并重置密码的经验与总结
大数据·运维·elasticsearch·搜索引擎·docker·容器·jenkins
城南已开9791 小时前
vue部署到nginx服务器 启用gzip
服务器·vue.js·nginx
XINO1 小时前
企业常见安全事故排查思路
运维·安全
自由如风7092 小时前
Apache Atlas构建安装(Linux)
linux·运维·apache
烦躁的大鼻嘎2 小时前
【Linux】进程替换与自定义 Shell:原理与实战
linux·运维·服务器·ubuntu
gzgenius3 小时前
警惕阿里云中的yum update操作不当导致:/sbin/init被清空导致Linux无法正常启动
linux·服务器·阿里云