在日常使用NAS时,相信大家通过外部网络访问NAS也是必备需求。但又苦于没有公网IP,向运营商申请又比较困难,所以在这里分享一个Nginx+Frp的内网穿透解决方案(网上也有很多介绍,这里详细写下个人的配置流程,尽量避免踩坑)
配置前准备:
必须:NAS、云服务器(这里示例华为云云曜云服务器)、ssh工具(推荐finalshell)
非必须:域名(可以不用,这里未介绍,国内域名需要备案)
1. 华为云服务器装系统ubuntu1804或Debian(这里使用ubuntu1804)
购买云耀云服务器后打开控制台操作
首次登陆会有安装系统选项,这里我已经安装过,点击重装系统
选择的系统镜像是ubuntu18.04,输入密码,确定,就可以开始安装了
云服务器安装ubuntu系统成功后通过finalshell工具ssh连接,端口22登录,用户名:root 密码:安装时输入的内容
2. 在华为云服务器安装docker(手动安装和脚本安装两种方式)
2.1 手动安装:
2.1.1 更新软件包
sudo apt-get update
2.1.2 安装依赖
1 | sudo apt-get install \ |
2.1.3 添加Docker官方GPG密钥
1 | curl -fsSL [https://download.docker.com/linux/ubuntu/gpg](https://download.docker.com/linux/ubuntu/gpg) | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg |
2.1.4 添加Docker软件源
1 | echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] [https://download.docker.com/linux/debian](https://download.docker.com/linux/debian) $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null |
2.1.5 安装docker
1 | sudo apt-get update |
2.1.6 测试安装是否成功
sudo docker run hello-world
2.2 脚本安装:
1 | curl -fsSL [https://get.docker.com](https://get.docker.com) | bash -s docker --mirror Aliyun |
或
1 | curl -fsSL [https://get.docker.com](https://get.docker.com) -o [get-docker.sh](http://get-docker.sh) |
2.3 设置docker开机自动启动
1 | systemctl enable docker # 设置开机自动启动 |
2.4 修改 Docker 配置(可选)
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘
1 | cat > /etc/docker/daemon.json <<EOF |
3. 安装docker-compose(直接用github的,避免出问题)
依次执行以下命令
a.
1 | curl -L "[https://github.com/docker/compose/releases/download/1.29.2/docker-compose-](https://github.com/docker/compose/releases/download/1.29.2/docker-compose-)$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
b.
1 | chmod +x /usr/local/bin/docker-compose |
c.
1 | docker-compose --version |
4. 安装Nginx Proxy Manager
4.1 Nginx配置
ssh连接到华为云服务器
1 | sudo -i |
英文输入法下,按 i 输入如下内容
1 | version: '3' |
按一下 esc,然后:wq 保存退出
4.2 打开华为云服务器防火墙的端口 81
进入云服务器→安全组→配置规则
跳转新页面后点击入方向规则→添加规则→优先级1,端口81
回到云服务器控制台:lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
注:由于后续会用到很多端口,一一打开有点麻烦,可以全部开启端口
4.3 运行并访问 Nginx Proxy Manager
1 | cd /root/data/docker_data/npm # 来到 dockercompose 文件所在的文件夹下 |
理论上我们就可以输入 http://ip:81 访问了
默认登陆名和密码:
1 | Email:admin@example.com |
注意:
1、不知道服务器 IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的 IP。
2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和华为云的后台防火墙是否打开对应了端口。
4.4 更新 Nginx Proxy Manager:(扩展)
1 | cd /root/data/docker_data/npm |
4.5 卸载 Nginx Proxy Manager
1 | cd /root/data/docker_data/npm |
可以卸载得很干净。
5. 在华为云服务器端安装frps
5.1 安装frps
创建一下安装的目录:
1 | sudo -i |
简单起见,直接用docker命令安装
Docker方法安装:
1 | cd /root/data/docker_data/frps |
1 | version: '3.3' |
docker-compose up -d
这样我们就搭建好了frp的服务端了,不过,现在我们frps.ini
里面啥也没有,需要我们来配置一下,这边贴一个配置文件给大家参考,满足基本使用。
1 | [common] |
重启容器
docker-compose restart
云服务器添加9527与5443端口
http://ip:9527 可以访问frp网址,账号:xxxx 密码:xxxx
接下来要去云服务器,打开防火墙。
5.2 docker-compose更新(扩展)
1 | cd /root/data/docker_data/frps |
5.3 卸载
1 | docker stop frps |
可以卸载得很干净。
6. 在NAS端安装frpc(这里用docker-compose安装失败,选择安装包下载)
6.1 配置frpc
ssh登录NAS,进入root模式
1 | sudo -i |
a.下载frp安装包(官网下载)
frp官网:https://github.com/fatedier/frp/releases
b.命令下载frp安装包
wget http://www.kaixinit.com/wp-content/uploads/2019/04/frp_0.36.2_linux_amd64.tar.gz
配置frpc.ini
vim frpc.ini
1 | # frpc.ini |
这时已经可以通过外网访问NAS了,http://IP:6003
6.2 配置frpc在NAS开机时自启动(可选)
vi /usr/syno/etc.defaults/rc.sysv/frpc.sh
英文输入法下,按 i 输入如下内容
1 | #/bin/bash |
按一下 esc,然后:wq 保存退出
增加脚本文件执行权限
chmod +x [frpc.sh]
查看进程
ps -aux|grep frpc|grep -v grep
接下来将脚本文件关联到开机自启动,在NAS中打开 控制面板–>任务计划–>新增–>触发的任务–>用户定义的脚本
创建任务→常规→任务名称:frpc,勾选√已启动,如下图:
创建任务→用户定义的脚本:
/usr/syno/etc.defaults/rc.sysv/frpc.sh
配置完成后可重启群晖系统一次,判断脚本文件是否启动成功。
重启系统命令:
reboot
查看进程是否正常启动:
ps -aux|grep frpc|grep -v grep
7. 结尾
到这里内网穿透功能基本基本就实现啦,祝大家玩得开心。
参考资料
【好玩儿的Docker项目】家里没有公网IP?FRP+NPM+VPS = 随时随地用域名访问家里的任何设备!内网穿透,从未如此简单! | 我不是咕咕鸽