在日常使用NAS时,相信大家通过外部网络访问NAS也是必备需求。但又苦于没有公网IP,向运营商申请又比较困难,所以在这里分享一个Nginx+Frp的内网穿透解决方案(网上也有很多介绍,这里详细写下个人的配置流程,尽量避免踩坑)
配置前准备:
必须:NAS、云服务器(这里示例华为云)、ssh工具(推荐finalshell)
非必须:域名(可以不用,这里未介绍,国内域名需要备案)
控制台操作,流程比较简单,不具体介绍
安装成功后通过finalshell工具ssh连接,端口22登录,用户名:root 密码:安装时输入的内容
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
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
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli [containerd.io](http://containerd.io)
sudo docker run hello-world
curl -fsSL [https://get.docker.com](https://get.docker.com) | bash -s docker --mirror Aliyun
sudo sh get-docker.sh
或
curl -fsSL [https://get.docker.com](https://get.docker.com) -o [get-docker.sh](http://get-docker.sh)
sudo sh get-docker.sh
systemctl enable docker # 设置开机自动启动
以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘
1 2 3 4 5 6 7 8 9 10 11 12 13 |
cat > /etc/docker/daemon.json < |
依次执行以下命令
a.
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.
chmod +x /usr/local/bin/docker-compose
c.
docker-compose --version
ssh连接到云服务器
sudo -i
mkdir -p /root/data/docker_data/npm
cd /root/data/docker_data/npm
vim docker-compose.yml(里面内容要对齐)
英文输入法下,按 i 输入如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
version: '3' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' # 冒号左边可以改成自己服务器未被占用的端口 - '81:81' # 冒号左边可以改成自己服务器未被占用的端口 - '443:443' # 冒号左边可以改成自己服务器未被占用的端口 volumes: - ./data:/data # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 data 文件夹中 - ./letsencrypt:/etc/letsencrypt # 冒号左边可以改路径,现在是表示把数据存放在在当前文件夹下的 letsencrypt 文件夹中 |
按一下 esc,然后:wq 保存退出
进入云服务器→安全组→配置规则
跳转后入方向规则→添加规则→优先级1,端口81
回到服务器:lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
注:由于后续会用到很多端口,一一打开有点麻烦,可以全部开启端口
cd /root/data/docker_data/npm # 来到 dockercompose 文件所在的文件夹下
docker-compose up -d
理论上我们就可以输入 http://ip:81 访问了
默认登陆名和密码:
Email:[email protected]
Password: changeme
注意:
1、不知道服务器 IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的 IP。
2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和华为云的后台防火墙是否打开对应了端口。
cd /root/data/docker_data/npm
docker-compose down
cp -r /root/data/docker_data/npm /root/data/docker_data/npm.archive # 万事先备份,以防万一
docker-compose pull
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
cd /root/data/docker_data/npm
docker-compose down
rm -rf /root/data/docker_data/npm # 完全删除映射到本地的数据
可以卸载得很干净。
创建一下安装的目录:
sudo -i
mkdir -p /root/data/docker_data/frps
cd /root/data/docker_data/frps
简单起见,直接用docker命令安装
Docker方法安装:
cd /root/data/docker_data/frps
touch frps.ini
vim docker-compose.yml
1 2 3 4 5 6 7 8 9 |
version: '3.3' services: frps: restart: always network_mode: host volumes: - './frps.ini:/etc/frp/frps.ini' container_name: frps image: snowdreamtech/frps |
docker-compose up -d
这样我们就搭建好了frp的服务端了,不过,现在我们frps.ini
里面啥也没有,需要我们来配置一下,这边贴一个配置文件给大家参考,满足基本使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[common] #frp 监听端口,与客户端绑定端口 bind_port= 5443 kcp_bind_port = 5443 #dashboard用户名 dashboard_user= xxxx #dashboard密码 dashboard_pwd= xxxx #dashboard端口,启动成功后可通过浏览器访问如http://ip:9527 dashboard_port= 9527 #设置客户端token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端 token = 8ad3d1x429a2d |
重启容器
docker-compose restart
云服务器添加9527与5443端口
http://ip:9527 可以访问frp网址,账号:xxxx 密码:xxxx
接下来要去云服务器,打开防火墙。
cd /root/data/docker_data/frps
docker-compose down
cp -r /root/data/docker_data/frps /root/data/docker_data/frps.archive # 其实就是备份一下frps.ini这个文件
docker-compose pull
docker-compose up -d
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
docker stop frps
docker rm -f frps # 停止容器,此时不会删除映射到本地的数据
rm -rf /root/data/docker_data/frps # 完全删除映射到本地的数据
可以卸载得很干净。
ssh登录NAS,进入root模式
sudo -i
mkdir /root/data/docker_data/frpc
a.下载frp安装包(官网下载)
frp官网:https://github.com/fatedier/frp/releases
b.命令下载frp安装包
1 |
wget http://www.kaixinit.com/wp-content/uploads/2019/04/frp_0.36.2_linux_amd64.tar.gz |
tar -zxvf frp_0.36.2_linux_amd64.tar.gz #解压
cd frp_0.36.2_linux_amd64 #进入目录
rm -f frps frps_full.ini frps.ini frpc_full.ini #删除无关文件
配置frpc.ini
vim frpc.ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# frpc.ini [common] server_addr = 43.132.202.152 server_port = 5443 token = 8ad3d1x429a2d [ssh] type = tcp local_ip = 127.0.0.1 local_port = 222 # 这个自定义,之后再ssh连接的时候要用 remote_port = 6000 [qb] type = tcp local_ip = 127.0.0.1 local_port = 8092 remote_port = 6001 [jellyfin] type = tcp local_ip = 127.0.0.1 local_port = 32771 remote_port = 6002 [NAS] type = tcp local_ip = 127.0.0.1 local_port = 5000 remote_port = 6003 [nextcloud] type = tcp local_ip = 127.0.0.1 local_port = 4433 remote_port = 6004 [RDP] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 7001 [vnc] type = tcp local_ip = 127.0.0.1 local_port = 5900 remote_port = 5900 use_encryption = true use_compression = true |
cd ..
mv frp_0.36.2_linux_amd64 frpc
nohup ./frpc -c ./frpc.ini & frpc.ini #后台启动
这时已经可以通过外网访问NAS了,http://IP:6003
vi /usr/syno/etc.defaults/rc.sysv/frpc.sh
英文输入法下,按 i 输入如下内容
1 2 3 4 |
#/bin/bash sudo su cd /root/data/docker_data/frpc/frpc nohup ./frpc -c ./frpc.ini & |
按一下 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
到这里内网穿透功能基本基本就实现啦,祝大家玩得开心。
NAS设置内网穿透 | Nginx反向代理 | 外网访问 | 配置华为云服务器 | 山不在高
【好玩儿的Docker项目】家里没有公网IP?FRP+NPM+VPS = 随时随地用域名访问家里的任何设备!内网穿透,从未如此简单! | 我不是咕咕鸽