--- title: frp内网穿透使用指南 tags: ["linux"] date: 2024-12-02 summary: "frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透。..." --- ## 什么是 frp? frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透。它可以将内网服务暴露到公网上,方便外部访问。 有很多小伙伴,家里都有性能很强大的电脑,但是苦于没有公网 IP,导致无法在互联网上部署自己的网站或者服务,而 frp 内网穿透就是用来解决这个问题的。 --- - 首先你得拥有一台具有公网 IP 的服务器,如果你只是用来进行内网穿透的话,性能并不需要很强,1h1g 是肯定够用了。 - 其次,在中国境内的服务器因为种种原因,需要进行网站备案,所以我这里更推荐你去购买香港或者美国的服务器,可以免备案。会省下很多麻烦事。 > PS: 这里推荐一下本站在用的服务器 CloudCone,价格便宜实惠,流量大,用作 frp 服务器绰绰有余。我这边购买的是 2h1g 服务器,一年也就 130 元人民币,并且还支持支付宝直接支付,无需 VISA 卡之类的,本站强烈推荐!!!! --- ## frp 内网穿透 frp 一共分为两个部分: - **服务器**:一个具有公网 IP 的服务器,运行 frps(frp server)。 - **客户端**:一台处于内网中的机器,运行 frpc(frp client)。 ### frps(服务端) 1. 前往 [frp GitHub Releases 页面](https://github.com/fatedier/frp/releases) 下载适合你服务器操作系统的 frp 包。(一般linux64位系统选择linux\_amd64即可) 2. 解压缩下载的包: tar -zxvf frp_x.x.x_linux_amd64.tar.gz 3. 进入解压好的目录,找到frps.toml文件 vim frps.toml 4. 编辑frps.toml文件 ```sh [common] # frps 服务端的基本配置 # frps 监听的端口,frpc 将通过这个端口连接到 frps bind_port = 7443 # 用于身份验证的 token,frpc 连接时需要提供相同的 token token = xxxxxxxxx # 监控面板的端口(可选),通过这个端口可以访问 frps 的状态信息 dashboard_port = 8443 # 监控面板的用户名和密码,保护监控面板的访问 dashboard_user = new_username dashboard_pwd = NewPassword!2024 # 允许开放的端口范围,设置为只开放 10000-11000 端口(可自定义开放端口) allow_ports = 10000-11000 # 日志级别,可选值有 trace, debug, info, warn, error log_level = info # 日志文件路径,frps 的日志将写入该文件 log_file = ./frps.log # 指定日志的最大大小(单位:MB),达到该大小后将进行轮转 max_log_size = 10 # 允许的最大连接数,限制同时连接到 frps 的 frpc 客户端数量 max_connections = 100 # 启用加密传输(可选),可以提高数据传输的安全性 enable_encrypt = true # 启用 TCP KeepAlive(可选),可以防止由于网络问题导致的连接断开 tcp_keep_alive = true # 允许的最大数据包大小(单位:字节) max_packet_size = 8192 ``` ### frp从(客户端) 前面的步骤都是一样的 - 前往 [frp GitHub Releases 页面](https://github.com/fatedier/frp/releases) 下载适合你服务器操作系统的 frp 包。(一般linux64位系统选择linux\_amd64即可) - 解压缩下载的包: tar -zxvf frp_x.x.x_linux_amd64.tar.gz 1. 找到frpc.toml 2. 编辑frpc.toml ```sh [common] # frpc 连接到 frps 服务器的配置 # frps 服务器的地址 server_addr = "your_frps_server_ip" # 替换为你的 frps 服务器 IP # frps 服务器的端口 server_port = 7443 # 与 frps 的 bind_port 一致 # 身份验证 token,必须与 frps 中的 token 一致 token = "xxxxxxxxx" # 以下是需要开放的服务配置 # 例如,HTTP 服务 [http] type = "tcp" local_ip = "127.0.0.1" local_port = 80 # 本地 HTTP 服务端口 remote_port = 10001 # 通过 frp 暴露的端口 # 其他服务可以继续添加 ``` --- > ***这时候通过访问公网服务器ip加上remote_port端口,即可访问你对应的内网服务了!如果访问有不了请检查一下服务器的防火墙,和云服务器上的防火墙。*** 这时我们还需要把公网服务器上的frps服务设置为开机自启动 --- - 创建 一个Systemd 服务文件 sudo vi /etc/systemd/system/frps.service 在文件里添加 ``` [Unit] Description=frp server After=network.target [Service] ExecStart=/path/to/frps -c /path/to/frps.toml Restart=on-failure User=your_username # 替换为运行 frps 的用户名 WorkingDirectory=/path/to/frp # frp 的工作目录 [Install] WantedBy=multi-user.target ``` - 重新加载 Systemd sudo systemctl daemon-reload - 启动服务并设置为开机自启 sudo systemctl start frpssudo systemctl enable frps - 查看服务状态 sudo systemctl status frps - 如果出现错误,大概率是你的路径填写的不对,确保 `ExecStart` 路径指向你的 frps 可执行文件和配置文件的正确路径。