首页 > 数据库 > 数据库开发技术 > 用FRP实现内外网穿透
众所周知,从公网中访问自己的私有设备向来是一件难事儿自己的主力台式机、NAS等等设备,它们可能处于路由器后,或者运营商因为IP地址短缺不给你分配公网IP地址。如果我们想直接访问到这些设备(远程桌面,远程文件,SSH等等),一般来说要通过一些转发或者P2P(peer to peer lending 即 个人对个人 或者point to point 点对点)组网软件的帮助
我有一台计算机位于一个很复杂的局域网中,我想要实现远程桌面和文件访问 目前来看其所处的网络环境很难通过简单的端口映射将其暴露在公网之中,也就是说不使用端口映射来实现访问
如果使用工具,则可以选用:花生壳TeamViewer蒲公英等
简单地说,frp就是一个反向代理软件,它体积轻量但功能很强大,可以使处于内网或防火墙后的设备对外界提供服务,它支持HTTP、TCP、UDP等众多协议
HyperText Transfer Protocol超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础HTTP协议
Transmission Control Protocol传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议
User Datagram Protocol用户数据报协议UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的UDP用来支持那些需要在计算机之间传输数据的网络应用。比如网络视频会议系统等 客户/服务器 模式的网络应用都需要使用UDP协议TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、NFS(网络文件系统)、DNS(域名系统)
frp的原理是利用服务端(所准备的VPS)进行转发,因而VPS的速度直接决定了之后连接的质量,请根据自己的需要选择相应主机配置。每个VPS主机都可选配独立公网IP地址、独立操作系统、独立超大空间、独立内存、独立CPU资源、独立执行程序和独立系统配置等


官网地址: https://gofrp.org/包: 或者github下载:0.36.2
cd /usr/local/
tar xf frp_0.36.2_linux_amd64.tar.gz
mv frp_0.36.2_linux_amd64 frp
cd frp
vim frps.ini
[common]
bind_addr = 0.0.0.0
bind_port = 7000 # 公网服务器监听地址(此处测试使用的7000)
log_file = /usr/local/frps/frps.log # 此目录需要手动创建
log_level = info # 日志级别
log_max_days = 3 # 日志最大存储天书
token = 1619421062232795100 # 服务端配置同样的数值 才可以通过鉴权(可以通过 date+%s%N 创建)
allow_ports = 20000-30000 # 允许代理绑定的服务端端口
max_pool_count = 5 #最大连接池
max_ports_per_client = 0 # 不限制单个客户端最大使用代理数量
tcp_mux = true # 启用tcpmux代理
dashboard_port = 9755 # 是服务端仪表板的端口
token=xxxx# 是用于客户端和服务端连接的口令
dashboard_user = admin #dashboard 登陆用户密码
dashboard_pwd = admin
ln -sv /usr/local/frp/frps /usr/bin/frps
frps /usr/local/frps/frps.ini

vim frpc.ini
[common]
server_addr = xxx.xxx.xxx.xxx # 此处为公网服务器地址
server_port = 7000 # 公网服务器bind端口
log_file = /opt/frp/frpc.log # 日志路径
log_level = info # 日志等级
log_max_days = 3 # 日志存储
token = 1619421062232795100 # 和服务端配置的token相同
pool_count = 5 # 连接池大小
tcp_mux = true
login_fail_exit = true # 第一次登陆失败后是否退出
[ssh]
type = tcp # 代理 类型
local_ip = 127.0.0.1 # 本地服务 IP
local_port = 22 # 本地服务端口
bandwidth_limit = 1MB # 设置单个 proxy 的带宽限流
use_encryption = false # 是否启用加密功能
use_compression = true # 是否启用压缩功能
remote_port = 6000 # 代理端口
health_check_type = tcp # 健康检查
health_check_timeout_s = 3 # 超时时间(s)
health_check_max_failed = 3 # 可失败次数
health_check_interval_s = 10 # 健康检查频率(s)
ln -sv /usr/local/frp/frpc /usr/bin/frpc
frpc -c /usr/local/frp/frpc.ini

启动成功后可通过服务端的输出确认


此处6000 为自定义映射的端口 打码处为公网服务器地址 密码为内网服务器ssh 登陆密码
cd /usr/local/frp/system/vim frps.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /usr/local/frp/frps.ini
[Install]
WantedBy=multi-user.target
cp frps.service /usr/lib/systemd/system/
cd /usr/local/frp/system/vim frpc.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /usr/local/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /usr/local/frp/frpc.ini
[Install]
WantedBy=multi-user.target
cp frpc.service /usr/lib/systemd/system/
systemctl stop frps
systemctl start frps
systemctl enable frps
和服务端相似
原文作者:步步运维步步坑;如有侵权,请联系管理员删除。