硬件准备
使用frpc做内网穿透,需要有一台公网ip的服务器
文档地址
frp官网
frpgithub
下载
下载地址
客户端和服务端均在一个压缩包里,由于我客户的是mac,服务端是linux,所以要下载两个包
mac对应 darwin_amd64
linux对应 linux_md64
服务端
解压压缩包放置在有公网ip的服务器上
其中我放置的位置是 /home/nnnnzs/frp/
目录下
服务端配置文件
服务端程序为frps
,对应的配置文件为frps.ini
使用vim 打开目录下的frps.ini
[common]
# 和客户端互联的端口
bind_port = 1234
# 访问服务器8080ip的端口,才访问到内网穿透的应用
vhost_http_port = 8080
# 日志文件地址
log_file = /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps.log
服务端开机自启
参考官网教程 使用systemed 做进程管理
/etc/systemd/system/frps.service
文件[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps -c /home/nnnnzs/frp/frp_0.48.0_linux_amd64/frps.ini
[Install]
WantedBy = multi-user.target
3. 使用 systemd 命令,管理 frps。
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps
systemctl enable frps
如果出现添加开机自己被拒绝,请柬配置文件是不是复制粘贴的时候少了字符如:[
反向代理
在nginx设置反向代理,这样不需要暴露8080端口,通过域名+80端口 即可访问内网服务,原理是frpc根据host头来请求到对应服务
server{
listen 80;
listen [::]:80;
server_name a.nnnnzs.cn b.nnnnzs.cn;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
}
域名解析
将两个域名分别添加解析到服务器所在ip上
客户端A配置
放置在需要穿透的内网电脑A 上
[common]
#服务器ip地址
server_addr = 服务端ip地址
# 服务器开放端口
server_port = 1234
# 日志端口
log_file = ./frpc.log
[web]
type = http
# 本地ip
local_ip = 127.0.0.1
# 本地服务端口
local_port = 3001
#
custom_domains = a.nnnnzs.cn
客户端B配置
[common]
#服务器ip地址
server_addr = 服务端ip地址
# 服务器开放端口
server_port = 1234
# 日志端口
log_file = ./frpc.log
[web]
type = http
# 本地ip
local_ip = 127.0.0.1
# 本地服务端口
local_port = 3002
#
custom_domains = b.nnnnzs.cn
当然 客户端A 和 B 可以是同一台电脑的不同端口
[common]
#服务器ip地址
server_addr = 服务端ip地址
# 服务器开放端口
server_port = 1234
# 日志端口
log_file = ./frpc.log
[web]
type = http
# 本地ip
local_ip = 127.0.0.1
# 本地服务端口
local_port = 3003
#
custom_domains = a.nnnnzs.cn
[web]
type = http
# 本地ip
local_ip = 127.0.0.1
# 本地服务端口
local_port = 3004
#
custom_domains = b.nnnnzs.cn
客户端脚本
启动脚本
#!/bin/bash
nohup frpc -c frpc.ini &
停止脚本
#!/bin/bash
# 检查并杀死frp进程
processes=$(ps -ef | grep -E "frp|frpc" | grep -v grep | awk '{print $2}')
if [ -n "$processes" ]; then
echo "找到以下进程:"
echo "$processes"
echo "正在杀死进程..."
kill -9 $processes
echo "进程已成功结束。"
else
echo "没有找到frp或frpc进程。"
fi