使用frp搭建内网穿透服务

使用frp搭建内网穿透服务

别null了 2,528 2022-08-19

本文教大家如何使用frp搭建内网穿透服务,以实现远程电脑和访问内网Web服务。

1.准备工作

  1. 一台具有公网IP的服务器
  2. 一个备案的域名(港澳和海外服务器可以不用备案,如果只是远程电脑用可以不用域名)
  3. 下载对应版本的frp(https://github.com/fatedier/frp/releases)

因为我服务器是Linux系统,客户端是WIndows,所以下载两个。
1660890868(1)

2.服务部署

2.1 修改服务端配置文件 frps.ini

[common]
# 服务端监听地址、端口
bind_addr = 0.0.0.0
bind_port = 7000

# Http、Https代理监听端口
vhost_http_port = 8080
#vhost_https_port = 443

# 身份验证方式,token 或 oidc
authentication_method = token
# 在每一个心跳包中附加上身份认证信息
authenticate_heartbeats = true
# 在每次创建工作连接时附加上身份认证信息
authenticate_new_work_conns = true
# Token 字符串
token = 1234567890

# 日志存储位置
log_file = /opt/frp-server/log/frps.log
# 日志级别 trace, debug, info, warn, error
log_level = info
# 日志保留天数
log_max_days = 30

# 监控面板
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = 123456

2.2 修改客户端配置文件 frpc.ini

[common]
# 服务器地址、端口
server_addr = xx.xx.xx.xx # 填写你的服务器ip
server_port = 7000

# 在每一个心跳包中附加上身份认证信息
authenticate_heartbeats = true
# 在每次创建工作连接时附加上身份认证信息
authenticate_new_work_conns = true
# Token 字符串,跟服务端保持一致
token = 1234567890

# 日志存储位置
log_file = D:\\frp-client\\log\\frpc.log
# 日志级别 trace, debug, info, warn, error
log_level = info
# 日志保留天数
log_max_days = 30

# 远程桌面
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
# 因为服务器是linux用不到3389端口,这里就直接用了
remote_port = 3389

# WEB 服务
[web01]
type = http
local_ip = 127.0.0.1
local_port = 8081
custom_domains = www.yourdomain.com
host_header_rewrite = www.yourdomain.com

[web02]
type = http
local_ip = 192.168.10.248
local_port = 8082
custom_domains = www.yourdomain2.com
host_header_rewrite = www.yourdomain2.com

2.3 部署服务端

  1. 将 frps、frps.ini 上传至服务器,这里上传到 /opt/frp-server 目录
    image
  2. 添加可执行权限
chmod +x frps.ini
  1. 创建systemd服务,设置开机自启
vim /etc/systemd/system/frps.service

写入内容

[Unit]
Description = frp-server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
ExecStart = /opt/frp-server/frps -c /opt/frp-server/frps.ini

[Install]
WantedBy = multi-user.target
  1. 使用 systemd 命令,管理 frps
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps

# 设置 frps 开机自启
systemctl enable frps

2.4 部署客户端

  1. 将frpc.exe、frpc.ini放到自己的程序安装目录,这里以 D:\frp-client 举例
    image-1660892832208
  2. 启动客户端,注意需要使用cmd命令启动
  3. 因为使用cmd命令启动关闭串口之后服务也随之停止,也不能自启动,使用起来不方便。这个时候就需要用到一个小工具了。

注意使用nssm创建完服务以后千万不要删除掉了

3.收尾工作(不使用web服务的可以不看)

使用 ngin x代理 frp http 服务

# frp http代理
server {
    listen       80;
    listen       [::]:80;
    # 由于web服务都是使用同一个服务端口,所以客户端配置了多个web服务时可以写在一起
    server_name  www.yourdomain.com www.yourdomain2.com;

    location / {
        proxy_pass http://xx.xx.xx.xx:8080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

frp 官方文档:https://gofrp.org/docs/overview/


# 内网穿透