FRP 内网穿透工具使用笔记(v0.51.3)


一、FRP 的作用

  1. 功能
    FRP 是一款内网穿透工具,允许通过公网服务器(如阿里云)访问内网服务(如 Jenkins、Web 应用、SSH 等)。
  2. 核心场景
    • 外网访问家庭 NAS、摄像头等内网设备。
    • 开发调试时暴露本地服务到公网。
    • 绕过无公网 IP 的限制,实现服务远程访问。
  3. 工作原理
    • 服务端(公网服务器):监听端口,接收外网请求并转发到内网客户端。
    • 客户端(内网服务器):主动连接服务端,建立隧道,将内网服务映射到公网端口。

二、安装与配置步骤

1. 服务端配置(阿里云服务器)

下载并解压
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
cd frp_0.51.3_linux_amd64
编辑服务端配置
vi frps.ini

输入以下内容(按需修改端口和 Token):

[common]
bind_port = 7000          # 服务端监听端口
token = 123456            # 客户端连接密码(可选)
启动服务端
./frps -c frps.ini

2. 客户端配置(内网服务器)

下载并解压
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
cd frp_0.51.3_linux_amd64
编辑客户端配置
vi frpc.ini

输入以下内容(替换实际参数):

[common]
server_addr = 111.111.111.111 # 阿里云公网IP
server_port = 7000            # 服务端端口
token = 123456                # 需与服务端一致(如配置了 Token)

[jenkins]                     # 自定义服务名称
type = tcp                    # 协议类型
local_ip = 127.0.0.1          # 内网服务IP
local_port = 8080             # 内网服务端口(如 Jenkins)
remote_port = 8080            # 外网访问端口
启动客户端
./frpc -c frpc.ini

三、通过 Systemctl 管理服务

1. 服务端(阿里云)

创建服务文件
sudo vi /etc/systemd/system/frps.service

输入以下内容:

[Unit]
Description=Frp Server
After=network.target

[Service]
Type=simple
ExecStart=/path/to/frps -c /path/to/frps.ini
Restart=on-failure

[Install]
WantedBy=multi-user.target
启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps

2. 客户端(内网)

创建服务文件
sudo vi /etc/systemd/system/frpc.service

输入以下内容:

[Unit]
Description=Frp Client
After=network.target

[Service]
Type=simple
ExecStart=/path/to/frpc -c /path/to/frpc.ini
Restart=on-failure

[Install]
WantedBy=multi-user.target
启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc

四、验证与测试

1. 检查服务状态

# 服务端(阿里云)
sudo systemctl status frps

# 客户端(内网)
sudo systemctl status frpc

2. 查看日志

# 服务端日志
journalctl -u frps -f

# 客户端日志
journalctl -u frpc -f

3. 外网访问测试

浏览器访问 http://阿里云公网IP:8080,若显示内网服务(如 Jenkins),则穿透成功。


五、防火墙与安全组

  1. 阿里云安全组:放行 TCP:7000(服务端端口)和 TCP:8080(外网访问端口)。

  2. 内网服务器防火墙

    sudo firewall-cmd --add-port=8080/tcp --permanent
    sudo firewall-cmd --reload
    

六、常用命令

操作 命令
启动服务 sudo systemctl start frps
停止服务 sudo systemctl stop frps
重启服务 sudo systemctl restart frps
查看服务状态 sudo systemctl status frps
禁用开机自启 sudo systemctl disable frps

七、故障排查

  1. 端口占用

    sudo netstat -tulnp | grep 7000
    
  2. Token 不匹配:确保服务端和客户端的 token 完全一致。

  3. 连接超时:检查阿里云安全组和内网防火墙是否放行端口。


通过以上步骤,您可以通过 systemctl 方便地管理 FRP 服务,并实现稳定的内网穿透。