前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过frp反向代理实现公网远程访问家里设备

通过frp反向代理实现公网远程访问家里设备

作者头像
用户1160092
发布2024-11-12 10:41:25
990
发布2024-11-12 10:41:25
举报
文章被收录于专栏:MUM笔记

相信玩NAS、软路由一类的同学都有这样一个诉求,就是随时随地地访问到家里的设备。大家听到的异地组网VPN方案内网穿透反向代理等说法,都是实现这个诉求的,当时每一种也有一定的差异,感兴趣的可以自行查阅这些说法背后的原理和依赖的技术工具。

家庭网络一般只有公网v6地址,这个时候,可以使用动态DNS来实现远程访问,参考之前的文章 OpenWrt配置和使用DDNS-GO。今天说只有v4的情况下,采用frp怎么来实现外网访问家里的设备。

frp方案的优势和缺点

主要优点

  1. 开源的。相比采用商业的平台,如花生壳,cpolar平台等,采用frp,不用额外购买商业组件,不用依赖特定厂商,被厂商绑定。
  2. 灵活性高,自主配置,frp可以灵活把握自己需要暴露的端口。支持端口复用,也支持TCP、UDP、HTTP、HTTPS等协议。
  3. 小巧精简,性能出众。frp在git上的软件包,一共才12M,包括服务端和客户端。
  4. 跨平台方便。frp 采用 Go 语言编写,支持跨平台(比如家里有arm架构的设备),只需下载适用于您平台的二进制文件即可执行,无需额外依赖。家里可能软路由等是arm架构,

缺点:

  1. 需要有一台有公网ip的机器。这个需要额外花钱投入,可以购买云服务器或者一些免费的vps。
  2. 配置需要一点点的系统基础。

机器说明

A机器:内网机器,可以上外网 。即你家里的软路由或者nas设备

B机器:拥有公网ip,一般是云主机,或者vps

配置指导

frp分为客户端和服务端,根据你的cpu和系统的情况,从github上可以直接拉取安装包,客户端和服务端的包都一样:

代码语言:javascript
复制
# x86 64位架构
wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz

服务端配置(B机器上操作)

代码语言:javascript
复制
tar xvf frp_0.59.0_linux_amd64.tar.gz
cd frp_0.59.0_linux_amd64

# 修改服务端监听端口
cat frps.toml 
bindPort = 7000  #根据需要修改端口

# 以下命令启动服务器:
./frps -c ./frps.toml

使用systemd来管理服务,便于启动,停止等。

前提是需要系统安装systemd

代码语言:javascript
复制
# 查看是否安装systemd
system -h

# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd

# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd

编辑服务文件 vim /etc/systemd/system/frps.service 填入如下内容:

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

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

[Install]
WantedBy = multi-user.target

常见的命令

代码语言:javascript
复制
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 配置开机启动
sudo systemctl enable frps

客户端配置(A机器操作)

部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:

代码语言:javascript
复制
serverAddr = "x.x.x.x"  # 这里是B机器的公网ip
serverPort = 7000     # 这个是B机器上frps开启的服务端口

# proxies部分,可以配置多个,根据不同的服务配置
[[proxies]]         
name = "ssh"
type = "tcp"
localIP = "127.0.0.1" # 配置为需要从公网访问的内网服务的地址和端口。
localPort = 22      # 本地服务的端口
remotePort = 6000   # remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。不是frps监听的服务端口


[[proxies]]         
name = "xxwebservice"
type = "tcp"
localIP = "127.0.0.1" # 配置为需要从公网访问的内网服务的地址和端口。
localPort = 8080     # 本地服务的端口
remotePort = 6001   # remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。不是frps监听的服务端口

同样的,客户端也可以使用systemd来管理,

vim /etc/systemd/system/frpc.service

代码语言:javascript
复制

[Unit]
# 服务名称,可自定义
Description = frp client
After = network.target syslog.target
Wants = network.target

[Service]
Type = simplec
# 启动frpc的命令,需修改为您的frps的安装路径
ExecStart = /path/to/frpc -c /path/to/frpc.toml

[Install]
WantedBy = multi-user.target

常见日常命令

代码语言:javascript
复制
# 启动frp
sudo systemctl start frpc
# 停止frp
sudo systemctl stop frpc
# 重启frp
sudo systemctl restart frpc
# 查看frp状态
sudo systemctl status frpc
# 配置开机启动
sudo systemctl enable frpc

至此, 配置完成。可以通过你的公网ip,跳转访问内网服务了。

启动frps和frpc,通过如下命令,访问内网机器,假设用户名是test

代码语言:javascript
复制
ssh -o Port=6000 test@x.x.x.x

frp 将请求发送到 x.x.x.x:6000 的流量转发到内网机器的 22 端口。

参考

其他管理以及应用配置,参考官方文档和以及git的仓库。

frp官网帮助文档

frp官方github仓库

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MUM笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • frp方案的优势和缺点
  • 机器说明
  • 配置指导
    • 服务端配置(B机器上操作)
      • 客户端配置(A机器操作)
      • 参考
      相关产品与服务
      云服务器
      云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档