NAS设置内网穿透 | Nginx反向代理 | 外网访问 | 配置华为云服务器

在日常使用NAS时,相信大家通过外部网络访问NAS也是必备需求。但又苦于没有公网IP,向运营商申请又比较困难,所以在这里分享一个Nginx+Frp的内网穿透解决方案(网上也有很多介绍,这里详细写下个人的配置流程,尽量避免踩坑)

配置前准备:
必须:NAS、云服务器(这里示例华为云云曜云服务器)、ssh工具(推荐finalshell)
非必须:域名(可以不用,这里未介绍,国内域名需要备案)

1. 华为云装系统ubuntu1804或Debian(这里使用ubuntu1804)

购买云服务器后打开控制台操作(由于我购买时间较早,这里示例使用的是云耀云服务器HECS)

首次登陆会有安装系统选项,这里我已经安装过,点击重装系统

选择的系统镜像是ubuntu18.04,输入密码,确定,就可以开始安装了

云服务器安装ubuntu系统成功后通过finalshell工具ssh连接,端口22登录,用户名:root 密码:安装时输入的内容

2. 在华为云服务器的ubuntu系统安装docker(手动安装和脚本安装两种方式)

2.1 手动安装:
2.1.1 更新软件包
 sudo apt-get update
2.1.2 安装依赖
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
2.1.3 添加Docker官方GPG密钥
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软件源
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
2.1.5 安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli [containerd.io](http://containerd.io)
2.1.6 测试安装是否成功
  sudo docker run hello-world
2.2 脚本安装:
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
2.3 设置docker开机自动启动
systemctl enable docker  # 设置开机自动启动
2.4 修改 Docker 配置(可选)

以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /etc/docker/daemon.json <<EOF
{
    "log-driver": "json-file",
    "log-opts": {
        "max-size": "20m",
        "max-file": "3"
    },
    "ipv6": true,
    "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
    "experimental":true,
    "ip6tables":true
}
EOF

3. 安装docker-compose(直接用github的,避免出问题)

依次执行以下命令

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

4. 安装Nginx Proxy Manager

4.1 Nginx配置

ssh连接到华为云服务器的ubuntu系统

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 保存退出

4.2 打开华为云服务器的防火墙的端口 81

进入控制台,点击华为云服务器的名字

跳转到新页面,点击安全组→配置规则

跳转新页面后点击入方向规则→添加规则→优先级1,端口81

upload successful

回到云服务器控制台:lsof -i:81 #查看 81 端口是否被占用,如果被占用,重新自定义一个端口

如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~

注:由于后续会用到很多端口,一一打开有点麻烦,可以用添加81端口的方法全部开启端口

4.3 运行并访问 Nginx Proxy Manager
  cd /root/data/docker_data/npm   # 来到 dockercompose 文件所在的文件夹下  

  docker-compose up -d

理论上我们就可以输入 http://ip:81 访问了

默认登陆名和密码:

Email:admin@example.com

Password: changeme

注意:

1、不知道服务器 IP,可以直接在命令行输入:curl ip.sb,会显示当前服务器的 IP。

2、遇到访问不了的情况,请再次检查在宝塔面板的防火墙和华为云的后台防火墙是否打开对应了端口。

4.4 更新 Nginx Proxy Manager:(扩展)
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 标记和未被容器使用的镜像
4.5 卸载 Nginx Proxy Manager
cd /root/data/docker_data/npm  

docker-compose down   

rm -rf /root/data/docker_data/npm  # 完全删除映射到本地的数据  

可以卸载得很干净。

5. 在华为云服务器端ubuntu系统安装frps

5.1 安装frps

创建一下安装的目录:

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

接下来要去云服务器,打开防火墙。

5.2 docker-compose更新(扩展)
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 标记和未被容器使用的镜像
5.3 卸载
docker stop frps

docker rm -f frps  # 停止容器,此时不会删除映射到本地的数据

rm -rf /root/data/docker_data/frps  # 完全删除映射到本地的数据

可以卸载得很干净。

6. 在NAS端安装frpc(这里用docker-compose安装失败,选择安装包下载)

6.1 配置frpc

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

6.2 配置frpc在NAS开机时自启动(可选)
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中打开 控制面板–>任务计划–>新增–>触发的任务–>用户定义的脚本

upload successful

创建任务→常规→任务名称:frpc,勾选√已启动,如下图:

upload successful

创建任务→用户定义的脚本:

/usr/syno/etc.defaults/rc.sysv/frpc.sh

upload successful

配置完成后可重启群晖系统一次,判断脚本文件是否启动成功。

重启系统命令:

reboot

查看进程是否正常启动:

ps -aux|grep frpc|grep -v grep

7. 结尾

到这里内网穿透功能基本基本就实现啦,祝大家玩得开心。

参考资料

NAS设置内网穿透 | Nginx反向代理 | 外网访问 | 配置华为云服务器 | 山不在高 (shanbuzaigao.cn)

【好玩儿的Docker项目】家里没有公网IP?FRP+NPM+VPS = 随时随地用域名访问家里的任何设备!内网穿透,从未如此简单! | 我不是咕咕鸽

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。 Nginx的特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginxNginx 可以在大多数 Unix like OS 上编译运行,并有 Windows 移植版。目前 Nginx 的1.0.0稳定版已发布,开发版本为0.9.x,稳定版为 0.8.x,历史稳定版为 0.7.x,建议使用 0.8系列作为生产版本。 Nginx 的源代码使用 2-clause BSD-like license。 Nginx 是一个很牛的高性能Web和反向代理服务器,它具有很多非常优越的特性: 在高连接并发的情况下,Nginx是Apache服务器不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。 Nginx作为负载均衡服务器Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。 作为邮件代理服务器Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。 Nginx 是一个安装非常的简单,配置文件非常简洁(还能够支持perl语法),Bugs非常少的服务器Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值