聊聊云服务器 篇十五:50元云服务器+FRP,实现内网穿透自由
内网穿透有两类方案:第一种是 tailscale、zerotier 等虚拟局域网方案;第二种是“frp+公网IP”方案。
前段时间买了 50元1年的云服务器,免不了折腾一下。于是就来介绍一下“云服务+ frp”的内网穿透玩法:搭建内网穿透,通过云服务器的公网IP 随时访问内网设备和服务(包括:NAS、虚拟机等)。
1、云服务器配置
首先下载 frp (可 wget 直接下载到服务器,或者 SSH 传输到服务器)。由于服务器多为 Linux 系统,所以下载 Linux_amd64 版本。
解压后会得到 5个文件:frps、frps.toml、frpc、frpc.toml、LICENSE。其中 frps (server)为服务端,frps.toml 为服务端配置文件;frpc(client)为客户端,frpc.toml 为客户端配置文件。云服务作为服务端只会用到 frps 和 frps.toml,可删除其余文件。
1.1 配置服务端 frps.toml
首先配置服务端 frps.toml ,参考配置如下:
bindPort = 7000
auth.token = "abc"
frp 默认对接端口为 7000,服务端和客户端端口需一致。建议开启 auth.token 认证提升安全性(服务端和客户端 auth.token 需一致)。如果你想开启 dashboard 看板,可以添加后4行命令,不添加对使用没有影响。
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin"
测试配置文件是否能正常运行:
1.2 创建 frps.service 实现开机自启动
通过创建 sevice 实现 frp 开机自启动管理。首先创建 frps.service
sudo vim /etc/systemd/system/frps.service
frps.service 的内容参考如下(需根据文件位置修改命令执行路径):
[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /root/frp/frps -c /root/frp/frps.toml
[Install]
WantedBy = multi-user.target
创建成功后可以通过 systemctl 管理 frp服务:
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
#开机启动frp
sudo systemctl enable frps
设置完毕后记得在服务器防火墙管理中开放对应端口:
2、客户端配置
服务端配置完毕就可以开始配置客户端了。客户端只会用到 frpc 和 frpc.toml,可删除其他两个文件。但我推荐更简单方法:通过 docker 部署客户端 frpc 。
2.1 通过 docker 部署客户端 frpc
docker 部署 frpc 命令更简单,重点有2点:1是要设置 host 网络模式;2是要映射本地 frpc.toml 配置文件:
docker run -d --net=host --name=frpc --restart=always
-v /root/frpc/frpc.toml:/frp/frpc.toml
stilleshan/frpc
2.2 配置客户端 frpc.toml 文件
frpc.toml 的参考配置如下:
serverAddr = "127.0.0.1"
serverPort = 7000
auth.token = "abc"
[[proxies]]
name = "a"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9117
remotePort = 6002
[[proxies]]
name = "b"
type = "tcp"
localIP = "127.0.0.1"
localPort = 23
remotePort = 6003
其中 serverAddr 填写服务器公网IP,端口和服务器端口一致,并启用了 auth.token 认证。
开启 dashboard 看板,可以添加4行命令,不添加对使用没有影响。
webServer.addr = "127.0.0.1"
webServer.port = 7400
webServer.user = "admin"
webServer.password = "admin"
测试配置文件是否能正常运行:
./frpc verify -c ./frpc.toml
注意 frpc.toml 官方默认测试端口设置 6000,如果你用浏览器访问该端口页面是无法访问(并非是设置问题,而是 chrome 的安全设置原因,需修改成其他端口,分享一下给大家避坑)
再次提醒设置完毕后记得在服务器防火墙管理中开放对应端口!
3.关于内网穿透安全问题
tailscale 等虚拟局域网搭建内网穿透,需要客户端认证才能连接,所以比较安全。而 frp 不进行安全设置的话端口会直接暴漏在公网上,所以会造成安全隐患。所以给以下几点建议:
1.不要暴漏重要设备的端口和服务到公网上;
2.如果暴漏设备管理页到公网,不要使用弱密码,并且使用 https;
3.内网穿透设备安装好防火墙和杀毒软件;
4.根据实际需求可增加 secretKey 参数实现一对一认证;
3.1 连接类型
介绍一下常见的网络连接类型
TCP:提供纯粹的 TCP 端口映射,使服务端能够根据不同的端口将请求路由到不同的内网服务。
UDP:提供纯粹的 UDP 端口映射,与 TCP 代理类似,但用于 UDP 流量。
HTTP:专为 HTTP 应用设计,支持修改 Host Header 和增加鉴权等额外功能。
HTTPS:类似于 HTTP 代理,但专门用于处理 HTTPS 流量。
STCP:提供安全的 TCP 内网代理,要求在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
SUDP:提供安全的 UDP 内网代理,与 STCP 类似,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。
XTCP:点对点内网穿透代理,与 STCP 类似,但流量不需要经过服务器中转。
TCPMUX:支持服务端 TCP 端口的多路复用,允许通过同一端口访问不同的内网服务。
3.2 安全连接案例
通过 stcp(secret tcp) 提升 frp 穿透的安全性。ftcp 连接意味着目标主机和本机都要安装 frpc,服务器配置不变。客户端配置需增加 secretKey 参数,secretKey 一致的用户才能访问此服务:
serverAddr = "x.x.x.x"
serverPort = 7000
[[proxies]]
name = "secret_ssh"
type = "stcp"
# 只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "abcdefg"
localIP = "127.0.0.1"
localPort = 22
本机部署 frpc 并创建如下配置。双方主机都运行 frpc,认证通过后实现穿透连接:
serverAddr = "x.x.x.x"
serverPort = 7000
[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
# 要访问的 stcp 代理的名字
serverName = "secret_ssh"
secretKey = "abcdefg"
# 绑定本地端口以访问 SSH 服务
bindAddr = "127.0.0.1"
bindPort = 6002
为什么不介绍内网穿透的域名设置,国内配置域名很麻烦~感兴趣的朋友可以自己折腾。
至于一般开放端口访问有什么玩法,我简单说几点:
1.开放下载工具 transmission、gopeed、jackett 的端口实现随时随地创建远程下载任务;
2.开放 Prometheus、netdata 性能看板随时随地了解设备运行情况;
当然成品NAS带了一部分系统应用的穿透功能,不过你如果像实现任意容器的快捷访问依然需要内网穿透。
如果你用的是自组NAS,那么FRP 对你的价值会更大。
关于云服务器由于 zdm 不让放,这里就不分享了。
xingyiQAQ
校验提示文案
值友5767878170
校验提示文案
yz50505
校验提示文案
AI小值-电脑数码
校验提示文案
yz50505
校验提示文案
嗯djs
校验提示文案
flying1861
校验提示文案
cpz2025
校验提示文案
cpz2025
校验提示文案
flying1861
校验提示文案
嗯djs
校验提示文案
yz50505
校验提示文案
yz50505
校验提示文案
值友5767878170
校验提示文案
xingyiQAQ
校验提示文案
AI小值-电脑数码
校验提示文案