/ default / 21浏览

想在外访问家里的电脑?来学!

#frp #内网穿透
前提:需要一个有公网 ip 的服务器


好吧,可能看完第一句就直接结束了。确实,大部分人都没有这样的服务器,所以本文是不适用于这种情况的。

先介绍下我的情况吧。之前租了一台云服务器,但是受限于服务器孱弱的性能,一直不知道拿来干什么,吃灰了相当长的时间。后来家里组了个 All in Boom 的小服务器,各方面都比那个云服务器强,所以在这个小服务器上装了很多服务。Nas、图床、博客、甚至 git 仓库都在上面,用着也挺舒服,唯一的缺点就是只能在家用,在外就用不了了。
后来在上面装了 1 panel,就随便逛了逛应用,发现有个内网穿透的应用 frp。了解了下,发现刚好可以适合。
FRP
原理就不讲了,就讲一下怎么使用吧。可以看到这个是客户端,既然有客户端就一定有服务端。使用方法的话就是在有公网 ip 的服务器上运行 frp 的服务端 frps,然后在你需要暴露出去的设备上运行客户端 frpc,做好端口映射,然后就可以通过访问 frps 的端口来访问客户端 frpc 的对应服务了。
FRP原理简介
拿个场景举例:在外访问 Windows 桌面。
服务端

  1. 在服务器启动 frps 服务,从 github 下载自己适合自己服务器的二进制文件https://github.com/fatedier/frp/releases
  2. 将下载好的压缩包上传到服务器上并解压,解压后可以看到 frps 和 frpc 的几个文件,服务端的话只需要 frps 的文件就行。
    frp解压后内容 1
    分别是 frpc 的可执行文件、frpc 的配置文件、frps 的可执行文件、frps 的配置文件还有 LICENSE 文件。
    把用不着的 frpc 文件都删掉,然后修改 frps 的配置文件 frps.toml
bindAddr = "0.0.0.0" // 绑定ip,这个就默认0.0.0.0

bindPort = 7080 // 绑定的端口号,也就是frps服务使用的端口

webServer.addr = "0.0.0.0" // 可选,web页面的访问地址

webServer.port = 7088 // web页面的访问端口

webServer.user = "alps" // web页面的访问用户

webServer.password = "alps" // web页面的用户密码

log.to = "/home/frp/log/frps.log" // 日志文件路径

log.level = "info" // 日志级别

log.maxDays = 3 // 日志天数

auth.method = "token" // 可选,认证方式,默认使用token,可选token或oidc

auth.token = "alps123"

其它配置参考 https://gofrp.org/zh-cn/docs/reference/server-configures/#authserverconfig
把文件移动到 /home/frp 目录。
mv frps* /home/frp/
3. 启动 frps 服务
执行 ./frps -c ./frps.toml 启动。
启动后可以通过访问 ip:7088 访问 frps 的监控面板。
Frps Web

  1. (可选,最好配上)配置为系统服务
    目前,我们的 frps 服务是直接运行的,如果关闭终端,服务就会停止。所以最好配置成服务项,并配置成开机自启,这样服务就比较稳定。
    我的服务器是 Ubuntu 系统,所以就以 Linux 的配置方式为例,Windows 版自行查找。
    先看下系统有没有安装 systemd,如没有安装需要先安装 systemd:apt install systemd
    然后在 /etc/systemd/system 目录下创建 frps.service 文件,需要管理员权限。
cd /etc/systemd/system
vim ./frps.service

将下面的配置写入:

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

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

[Install]
WantedBy = multi-user.target

输入 :wq 保存文件,然后就可以使用 systemd 命令管理 frps 服务了:

# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
# 设置开机自启动
sudo systemctl enable frps

服务端到此配置完毕,可以看下服务状态。
FRPS运行状态
active (running) 表示正在运行。
客户端

  1. 安装客户端
    我的客户端是 Windows 机器,所以简单一点直接使用 exe 安装包安装客户端程序。
    https://github.com/koho/frpmgr/releases
    下载最新的 exe 安装包,然后双击安装,这个简单就不讲了。
  2. 客户端配置
    安装完成后桌面看不到图标,需要到开始菜单,搜索就能看到
    FRPCApp
    打开程序,点击新建配置
    FRPC添加配置
    填入我们服务端的 ip 和端口,然后点上面的"认证"选项卡,填入 token,然后点击确定。

配置Token
添加配置后,点击刚添加的配置,然后点"快速添加"添加一个远程桌面。端口映射为 13389。
快速添加
添加远程桌面
添加好后点启动。
启动服务
看到这个就表示连上了。
启动成功
在服务端的监控页面也可以看到这个客户端上线了。
FRPC web

试一下通过 Windows 的远程桌面连接。我这边只有 Mac 所以用 Mac 连接了。
可以正常连上,并且速度也还行。
测试使用

其它
类似的,这种方式不仅可以做到在外访问家里的电脑,还能在家访问公司电脑。具体实现方式就不操作了。而且如果云服务器带宽不高的话,可以试试自己折腾一下把废旧电脑或手机装 Linux 系统,安装 frp 服务,然后使用 ipv 6 地址进行穿透。当然前提是可以使用 ipv 6。(不过都有公网 ipv 6 了,直接访问更方便,这只适用于被代理的设备有内网 ipv 6 地址但是没有没有公网 ipv 6 地址的情况)。

A阿尔不二