#frp #内网穿透
前提:需要一个有公网 ip 的服务器
好吧,可能看完第一句就直接结束了。确实,大部分人都没有这样的服务器,所以本文是不适用于这种情况的。
先介绍下我的情况吧。之前租了一台云服务器,但是受限于服务器孱弱的性能,一直不知道拿来干什么,吃灰了相当长的时间。后来家里组了个 All in Boom 的小服务器,各方面都比那个云服务器强,所以在这个小服务器上装了很多服务。Nas、图床、博客、甚至 git 仓库都在上面,用着也挺舒服,唯一的缺点就是只能在家用,在外就用不了了。
后来在上面装了 1 panel,就随便逛了逛应用,发现有个内网穿透的应用 frp。了解了下,发现刚好可以适合。
原理就不讲了,就讲一下怎么使用吧。可以看到这个是客户端,既然有客户端就一定有服务端。使用方法的话就是在有公网 ip 的服务器上运行 frp 的服务端 frps,然后在你需要暴露出去的设备上运行客户端 frpc,做好端口映射,然后就可以通过访问 frps 的端口来访问客户端 frpc 的对应服务了。
拿个场景举例:在外访问 Windows 桌面。
服务端
- 在服务器启动 frps 服务,从 github 下载自己适合自己服务器的二进制文件https://github.com/fatedier/frp/releases
- 将下载好的压缩包上传到服务器上并解压,解压后可以看到 frps 和 frpc 的几个文件,服务端的话只需要 frps 的文件就行。
分别是 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 服务是直接运行的,如果关闭终端,服务就会停止。所以最好配置成服务项,并配置成开机自启,这样服务就比较稳定。
我的服务器是 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
服务端到此配置完毕,可以看下服务状态。
active (running)
表示正在运行。
客户端
- 安装客户端
我的客户端是 Windows 机器,所以简单一点直接使用 exe 安装包安装客户端程序。
https://github.com/koho/frpmgr/releases
下载最新的 exe 安装包,然后双击安装,这个简单就不讲了。 - 客户端配置
安装完成后桌面看不到图标,需要到开始菜单,搜索就能看到
打开程序,点击新建配置
填入我们服务端的 ip 和端口,然后点上面的"认证"选项卡,填入 token,然后点击确定。
添加配置后,点击刚添加的配置,然后点"快速添加"添加一个远程桌面。端口映射为 13389。
添加好后点启动。
看到这个就表示连上了。
在服务端的监控页面也可以看到这个客户端上线了。
试一下通过 Windows 的远程桌面连接。我这边只有 Mac 所以用 Mac 连接了。
可以正常连上,并且速度也还行。
其它
类似的,这种方式不仅可以做到在外访问家里的电脑,还能在家访问公司电脑。具体实现方式就不操作了。而且如果云服务器带宽不高的话,可以试试自己折腾一下把废旧电脑或手机装 Linux 系统,安装 frp 服务,然后使用 ipv 6 地址进行穿透。当然前提是可以使用 ipv 6。(不过都有公网 ipv 6 了,直接访问更方便,这只适用于被代理的设备有内网 ipv 6 地址但是没有没有公网 ipv 6 地址的情况)。