本文教大家如何使用frp搭建内网穿透服务,以实现远程电脑和访问内网Web服务。
1.准备工作
- 一台具有公网IP的服务器
- 一个备案的域名(港澳和海外服务器可以不用备案,如果只是远程电脑用可以不用域名)
- 下载对应版本的frp(https://github.com/fatedier/frp/releases)
因为我服务器是Linux系统,客户端是WIndows,所以下载两个。
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 部署服务端
- 将 frps、frps.ini 上传至服务器,这里上传到 /opt/frp-server 目录
- 添加可执行权限
chmod +x frps.ini
- 创建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
- 使用 systemd 命令,管理 frps
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
# 设置 frps 开机自启
systemctl enable frps
2.4 部署客户端
- 将frpc.exe、frpc.ini放到自己的程序安装目录,这里以 D:\frp-client 举例
- 启动客户端,注意需要使用cmd命令启动
- 因为使用cmd命令启动关闭串口之后服务也随之停止,也不能自启动,使用起来不方便。这个时候就需要用到一个小工具了。
- 首推 NSSM,其次是 WinSW
https://nssm.cc/download
https://github.com/winsw/winsw/releases/tag/v2.11.0 - 在你的nssm程序目录下输入cmd,再输入 nssm install,然后就可以打开服务配置页面
- 在服务里面启动frp,如果不是自启动就改为自启动
注意使用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/