背景
最近组了自己的NAS,搭建好了家庭影音库。由于运营商是移动的大内网,也没去动光猫改桥接(有时候不在家怕网络出问题家里人弄不了),所以没公网IPV4/IPV6。想找一个有网就能用的方案。
目录
- 各种内网穿透方案的优劣
- 使用的工具
- 配置Frp
- 配置Frps(服务端)
- 配置Frpc(客户端)
- 引用资料
1.各种内网穿透方案的优劣
方案一:zerotier和tailscale组网。优点:有插件,配置简单,教程多,稳定。缺点:服务器经常禁止。
方案二:免费域名dynv6配合ipv6。优点:简单,教程多。缺点:没有ipv6的设备不能访问,比如办公室环境里的电脑。
方案三:frp、ngrok、cloudflare tunnel。优点:方案成熟,教程多,网络环境不受限制,基本上有网就行。缺点:公共服务器一般都在国外,速度慢,不稳定,需要自建服务器。
方案四:n2n、vnt组网。优点:有插件,稳定。缺点:公共服务器随时可能跑路,都是私人用爱发电。
方案五:natmap( 体积很小)、natter(需要python环境)、lucky(大杂烩,体积大)打洞。优点:有插件,稳定,速度快,可控。缺点:需要网络类型为nat1,中国移动的网络大多都可以吧。
方案六:gop2ptunnel打洞。优点:安全,网络环境不限。缺点:太大,普通路由器无法运行,只能点对点。
方案七: wireguard 优点:配置简单,安全。缺点:需要公网ip。
而由于自己租有服务器,每月的流量根本用不完,所以选方案三的Frp来搭建内网穿透。
Frp工作原理其实就算利用公网上的服务器来中转数据。
2.使用的工具
- 一台云服务器(VPS),国内的最好,国外的要求高点,需要IP能通,且线路可以。
- SSH工具
- Xshell 8
- Xftp 8
3.配置Frp
1.配置Frps(服务端)
在服务器上下载Frp文件,以我这台X86的虚拟机和Frp的v0.61.0版本为例,将Frp下载到/root/目录下:
wget https://github.com/fatedier/frp/releases/download/v0.61.0/frp_0.61.0_linux_amd64.tar.gz
将Frp文件解压出来,得到Frp文件夹,里面包含了frps.toml(服务端)/frpc.toml(客户端)的配置文件:
tar -zxvf frp_0.61.0_linux_amd64.tar.gz
利用Xftp 8修改frps.toml配置文件:
直接点击Xshell 8界面的Xftp 8图标即可。
右键单击frps.toml文件,选择使用记事本编辑:
将配置内容粘贴并保存(这里的服务端配置只演示了基础配置,更复杂的配置请根据wiki自行配置):
# 服务端监听端口,默认值为 7000
bindPort = 7000
# 服务端监听 KCP 协议端口,用于接收配置了使用 KCP 协议的 frpc 连接。端口可和 bindPort 相同,未配置时默认禁用 KCP
kcpBindPort = 7000
# HTTP 类型代理监听的端口,启用后才能支持 HTTP 类型的代理。端口可和 bindPort 相同。
vhostHTTPPort = 80
# HTTPS 类型代理监听的端口,启用后才能支持 HTTPS 类型的代理。端口可和 bindPort 相同。
vhostHTTPSPort = 433
# HTTP 类型代理在服务端的 ResponseHeader 超时时间,默认为 60s。
vhostHTTPTimeout = 60
# tcpmux 类型且复用器为 httpconnect 的代理监听的端口。
tcpmuxHTTPConnectPort = 1337
# 对于 tcpmux 类型的代理是否透传 CONNECT 请求。
tcpmuxPassthrough = false
# 在 method 为 token 时生效,客户端需要设置一样的值才能鉴权通过。
auth.method = "token"
auth.token = "sdgerhgasdge" #根据需要填写自己的token
#配置管理界面
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "frp" #配置界面登录名,根据自己需要修改
webServer.password = "admin" #配置界面登录密码,根据自己需要修改
安装systemd
使用systemd 来管理 frps 服务,包括启动、停止、配置后台运行和设置开机自启动。
如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum
(适用于 CentOS/RHEL)或 apt
(适用于 Debian/Ubuntu)来安装它:
# 使用 yum 安装 systemd(CentOS/RHEL)
yum install systemd
# 使用 apt 安装 systemd(Debian/Ubuntu)
apt install systemd
创建 frps.service 文件:
使用文本编辑器 (如 vim或者Xftp 8,以下演示用的是vim) 在 /etc/systemd/system
目录下创建一个 frps.service
文件,用于配置 frps 服务。
$ sudo vim /etc/systemd/system/frps.service
写入内容并保存:
[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
使用 systemd 命令管理 frps 服务:
# 启动frp
sudo systemctl start frps
# 停止frp
sudo systemctl stop frps
# 重启frp
sudo systemctl restart frps
# 查看frp状态
sudo systemctl status frps
设置 frps 开机自启动
sudo systemctl enable frps
尝试使用http://*******:7500/端口登录Frp服务端管理界面:
2.配置Frpc服务端
2.1.Openwrt软路由设置
找到Frp服务,在常规设置中填上相应设置:
在代理设置中添加局域网里的客户端,如NAS里的jellyfin端口:
设置成功后frp服务端的管理界面会出现相应客户端:
2.2在黑群晖中配置Frpc
这里推荐直接使用矿神源在套件中心直接按照frpc客户端,当然如果你docker比较厉害的话可以自行配置。
在套件中心设置里添加矿神源:
https://spk7.imnks.com/ #DSM7.x
https://spk.imnks.com/ #DSM6.x
搜索frp,并安装frpc客户端:
填入客户端配置保存即可:
serverAddr = "服务器公网ip地址"
serverPort = 7000
[[proxies]]
name = "nas_jellyfin"
type = "tcp"
# 只有与此处设置的 secretKey 一致的用户才能访问此服务
secretKey = "" #服务端token
localIP = "127.0.0.1"
localPort = 8096
4.引用资料
组网方案:https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8369915&highlight=%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F
Frp项目:https://github.com/fatedier/frp?tab=readme-ov-file
FrpWiki:https://gofrp.org/zh-cn/docs/overview/