使用 frp 进行内网穿透的基本操作

2023-07-21 15:42:07 浏览数 (2)

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 的概念

原理

frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

frp 的架构

看一下frp的架构

服务端搭建

下载安装包

选择适合自己服务器的安装包下载即可,下载地址

代码语言:javascript复制
# 下载
wget https://github.com/fatedier/frp/releases/download/v0.51.0/frp_0.51.0_linux_amd64.tar.gz

# 修改目录名称,和权限
mv frp_0.51.0_linux_amd64 frp
chown -R root:root frp

修改服务端配置

编辑frps.ini文件,设置指定的端口,这个端口是客户端连接服务端的口端

代码语言:javascript复制
[common]
bind_port = 7000

使用 systemd 启动服务

在 Linux 系统下,使用systemd 可以方便地控制 frp 服务端 frps 的启动和停止、配置后台运行和开启自启。

要使用 systemd 来控制 frps,需要先安装 systemd,然后在 /etc/systemd/system 目录下创建一个 frps.service 文件。

1、如Linux服务端上没有安装 systemd,可以使用 yum 或 apt 等命令安装 systemd

代码语言:javascript复制
# yum
yum install systemd
# apt
apt install systemd

2、使用文本编辑器,如 vim 创建并编辑 frps.service 文件

代码语言:javascript复制
$ vi /etc/systemd/system/frps.service

写入内容

代码语言:javascript复制
[Unit]
# 服务名称,可自定义
Description = frp server
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /opt/cloud/frp/frps -c /opt/cloud/frp/frps.ini

[Install]
WantedBy = multi-user.target

3、使用 systemd 命令,管理 frps

代码语言:javascript复制
# 重新加载配置
systemctl daemon-reload
# 启动frp
systemctl start frps
# 停止frp
systemctl stop frps
# 重启frp
systemctl restart frps
# 查看frp状态
systemctl status frps

4、配置 frps 开机自启

代码语言:javascript复制
systemctl enable frps

客户端搭建

客户端的软件包跟服务端是同一个,安装方式相同。

修改客户端配置

安装之后修复服务端的配置文件frpc.ini

代码语言:javascript复制
[common]
# 改成服务端的IP
server_addr = xxx.xxx.xxx.xx    
# 改成服务端的bind_port端口
server_port = 7000              

[ssh]             
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 设置映射端口,也就是22映射给7203
remote_port = 7203          

客户端启动服务

跟服务端一样,创建一个系统服务文件,文件名称跟服务端区分(服务端是frps.service,客户端是frpc.service)

代码语言:javascript复制
$ vi /etc/systemd/system/frpc.service

输入内容

代码语言:javascript复制
[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simple
# 启动frps的命令,需修改为您的frpc的安装路径
ExecStart = /root/frp/frpc -c /root/frp/frpc.ini

[Install]
WantedBy = multi-user.target

然后跟服务端一样,启动服务即可。

代码语言:javascript复制
# 重新加载配置
systemctl daemon-reload
# 启动frp
systemctl start frpc
# 停止frp
systemctl stop frpc
# 重启frp
systemctl restart frpc
# 查看frp状态
systemctl status frpc
# 开机自启
systemctl enable frpc

端口开放

服务端需要开放frp的端口,如上配置的bind_port的7000端口,然后还有客户端配置的remote_port的端口

ssh 登录

服务端和客户端都正常启动服务之后,可以验证一下ssh登录

代码语言:javascript复制
ssh root@xx.xxx.xx.xx -p 7203
  • xx.xxx.xx.xx:即服务端的IP地址,也就是代理服务器公网IP
  • 7203:这个端口是客户端配置的端口,也就是客户端将22端口转发给服务端的7203端口

不出意外的话,ssh可以正常登录,如果出了意外,需要去检查服务端和客户端的frp服务是否正常启动,如果正常,则去排查服务端和客户端的配置是否OK,如果正常,则可以去排查服务端和客户端的防火墙是否开放对应端口。

官方指导

  • 官方项目仓库
  • 官方文档

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处 本文链接:https://tendcode.com/subject/article/frp/ 许可协议:署名-非商业性使用 4.0 国际许可协议

0 人点赞