对于家庭宽带,如果宽带服务商有提供公网 ip,那直接使用 DDNS 然后路由器设置好端口映射即可访问内网计算机。由于现在宽带服务商一般不提供公网 ip 地址了,就需要使用 frp、Ngrok 等内网穿透技术来达到访问内网计算机的目的。
frp、Ngrok 等需要服务器中转流量,不是点对点的连接,所以速度取决于 frps 服务器网络的带宽。点对点的可以使用 ZeroTier。
frp 和 Zerotier 优缺点比较:
- frp:需要有一个具有公网的服务器做中转,速度不太理想,需要针对每个应用做端口转发。稳定,适应性强
- Zerotier:点对点连接,不需要服务器中转,速度相对理想,相当于在一个局域网内,不需要针对每个应用做端口转发。不稳定,适应性差,比如 4G 网络下很大可能不能穿透
我的环境
- 处于内网中的黑群晖 DS3615xs(安装 frp 客户端)
- 安装 CentOS 6 x64 系统的拥有外网 ip 地址的 Vultr vps(安装 frp 服务端)
frp 版本选择
SSH 进服务器,运行以下命令查看操作系统和 CPU 版本以选择对应的 frp 版本(一般是选择 linux_amd64 版本)
frp 服务端的搭建
这里以 frp 官方原始程序为例。也可以使用 frps 服务端一键配置脚本,更简单和方便,并且搭好以后开机自动启动 frps,不需要自行设置开机启动,适合小白。
下载 frp 程序
先 SSH 进入服务器
04 |
wget --no-check-certificate https: //github .com /fatedier/frp/releases/download/v0 .26.0 /frp_0 .26.0_linux_amd64. tar .gz |
06 |
tar -xzvf frp_0.26.0_linux_amd64. tar .gz |
08 |
mv frp_0.26.0_linux_amd64 frps |
然后试着运行一下 frps help
正常情况下会输出一串帮助信息,那么就说明你下载了正确架构的版本。如果提示-bash: ./frps: cannot execute binary file: Exec format error 就说明你下错版本了
配置服务端
用 vi 打开配置文件(vi 的具体使用方法 google 搜索)
配置文件内容解释
13 |
authentication_timeout = 900 |
16 |
dashboard_port = 27500 |
19 |
dashboard_user = admin |
24 |
vhost_http_port = 20080 |
25 |
vhost_https_port = 20443 |
30 |
subdomain_host = example.com |
启动 frps
提示 Start frps success,这表示服务端启动成功
frp 客户端的搭建
群晖中可以使用 Docker 版的 frpc,更方便,推荐 leonismoe/frpc
写好相应的 frpc.ini 配置文件后,放置于群晖中。卷中 “添加文件”,“文件” 选 frpc.ini 文件,“装载路径”/etc/frpc.ini
,其他默认即可
下面是普通方式搭建 frpc 客户端的方法
下载 frp 程序
04 |
wget --no-check-certificate https: //github .com /fatedier/frp/releases/download/v0 .26.0 /frp_0 .26.0_linux_amd64. tar .gz |
06 |
tar -xzvf frp_0.26.0_linux_amd64. tar .gz |
08 |
mv frp_0.26.0_linux_amd64 frpc |
然后试着运行一下 frpc help
正常情况下会输出一串帮助信息,那么就说明你下载了正确架构的版本。如果提示-bash: ./frpc: cannot execute binary file: Exec format error 就说明你下错版本了
配置客户端
用 vi 打开配置文件(vi 的具体使用方法 google 搜索)
配置文件内容解释
11 |
admin_addr = 127.0.0.1 |
24 |
custom_domains = xxx.com |
启动 frpc
提示 Start frpc success,这表示客户端启动成功
重启 frpc 的命令
1 |
. /frpc reload -c . /frpc .ini |
浏览器输入 https://xxx.com:20088 应该就可以进入 NAS 的 DSM 界面了
设置 frp 开机启动
服务端(Linux)
如果使用 frps 服务端一键配置脚本,安装后会自动设置开机启动,不需要再做以下设置。
SSH 进入根目录
打开/etc/rc.local 文件
添加一行命令
1 |
/root/frps/frps -c /root/frps/frps .ini |
客户端(群晖)
如果使用 Docker 方式运行 frp 客户端,勾选 “启用自动重新启动” 即可,不需要做以下设置
NAS 里我们修改启动文件来设置开机自动启动 ftpc(网上也有说用 “任务计划” 来开机启动,但我没有设置成功)
SSH 进去,新建脚本文件
1 |
vi /usr/syno/etc .defaults /rc .sysv /frpcautostartup .sh |
编辑脚本文件内容如下
2 |
nohup /root/frpc/frpc -c /root/frpc/frpc .ini & |
设置文件权限
1 |
chmod +x /usr/syno/etc .defaults /rc .sysv /frpcautostartup .sh |
编辑群晖的启动文件,将脚本文件路径写入启动文件中
在文件的倒数第二行(exit 0 前面)添加脚本文件路径/usr/syno/etc.defaults/rc.sysv/frpcautostartup.sh
保存后重启系统
其他
关于 Vultr 里的端口注意
Vultr 里有坑(主要还是个人对防火墙规则不熟悉):我刚开始使用 8081 等四位数的端口,客户端始终无法和服务端通信,提示 no route to host,vps 控制面板里设置了防火墙规则还是一样
查看防火墙规则,发现仅开放了几个常用端口以及 20000-30000 的端口,把相应 remote_port 改为 20000-30000 之间的就好了
frp 命令
官方的 frp 程序服务端没有停止和重启命令,客户端没有停止命令,均没有卸载和更新命令。
使用 frps 服务端一键配置脚本安装的服务端的命令
- 卸载:./install-frps.sh uninstall
- 更新:./install-frps.sh update
- 服务管理:/etc/init.d/frps {start|stop|restart|status|config|version}
故障及解决
外部无法访问,或者出现 “SSL 通信出现问题” 的提示。同时查看 Docker 中 frpc 容器日志,有出现连接拒绝的提示信息
解决方法:frpc.ini 文件中的 local_ip 值由 127.0.0.1 改成实际的内网 ip 后解决(这个比较奇怪,我以前用 127.0.0.1 是可以的)
参考链接
RIPRO主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
尖刀资源网 »
搭建frp内网穿透以访问内网NAS(或其他内网服务)