技术积累
日进一寸

omv中启用zfs后的一点感想

imajeason阅读(1710)

zfs,叫人又爱又恨。

优点自不用说,我就说说缺点。

1、需要ECC内存。

绝大部分人的nas设备都是普通内存,没有ecc校验机制,虽然也能用zfs,但是出现文件系统错误的概率高出来不是一点半点。

虽然有人说,没有ecc也没关系,但实际上,你仔细看下zfs的文件校验机制会发现,每当 ZFS 遇到错误时(不管是在清理时还是按需访问文件时),都会在内部记录该错误,以便您可以快速查看池中所有已知错误的概述。

仔细阅读这个描述就能发现,如果错误发生在校验过程中,这个错误也会被记录用于纠正文件错误(其实是正确的,但是校验错了),而这个校验过程发生在内存中,内存没有校验机制的结果就是内存级的错误导致zfs校验错误,从而进一步导致目标文件被错误的纠正,从而导致文件错误。

我不确定这个描述你看懂了没,如果没看懂就多看几次,总之结论就是,对zfs来说,ecc内存是必需的,否则会面临巨大的数据风险,尤其是文件读写量非常大的场景。

2、需要大量的内存

因为zfs会缓存大量文件在内存中,所以一般来说,zfs需要的内存是非常大的。同时这也是为什么zfs需要ecc内存,因为zfs太依赖内存了。

3、操作不是那么简单。

对于技术从业者来说,几条zfs命令不是什么难事,但是对于普通用户来说,如果nas的web界面无法提供足够多的zfs操作选项,当zfs发生异常需要修复或者替换硬盘时,那麻烦可就有点大了。

当然,这些对于有合适的设备的用户来说并不是很大的问题。问题在于很多人认为在普通硬件设备上也可以安全的使用zfs,这势必会带来很大的风险。

另,有不少人引用b站的一个所谓实测ecc内存对zfs影响的视频,简直是可笑。

首先,每个人使用zfs的环境不一致,配置不一样,内存型号不一样,硬盘不一样,你用一套硬件来验证一个结论,微软都不敢这么搞。

这个视频简直是可笑之极,也能被拿来证明zfs不需要ecc?!

内存的原理是什么,为什么linux服务器可以运行几年不关机,前提是什么?是ecc内存。

免费dns收费不要怕,自建AdGuardHome解君忧

imajeason阅读(1161)

最近阿里dns要收费了,”阿里云公共DNS免费版自9月30日开始限速 企业或商业场景需使用付费版“。

未来,免费的饭是越来越少,越来越难吃 ,自己埋锅造饭才是正道,于是就有了自建dns-adguardhome。

我还说怎么最近看网页经常很慢很慢的。

只要自建adghome了,直接在openwrt上启用AdGuard Home.

更新核心版本到最新版。

浏览器打开openwrt ip:3000,来到adguard home界面

第一次进入界面使用向导,设置web页面端口,从80修改为3000;设置监听端口从53修改为5335就可以了,其他都是下一步。

然后回到主页面,点击设置-dns设置,填写上游DNS服务器:

tls://dns.google
tls://dns.opendns.com
tls://[id].dns.nextdns.io

注意:tls://[id].dns.nextdns.io是去nextdns.io注册账号拿到的id,免费额度也够了。

红框部分,绑定的时候需要在你使用nextdns的网络中,也就是openwrt所在网络中,才能顺利绑定,还可以绑定ddns域名。

去主路由中,设置dhcp,把下发的dns1改为openwrt的地址,如果你的openwrt是主路由,那就是同一个ip

让AdGuardHome在局域网内生效,打开网络-dhcp/dns,填写127.0.0.1#5335到Dns转发中:

测试:

把局域网内的一台机器的dns手动设置为openwrt的地址 ,看看打开web网页的速度是不是起飞了。

回到3000端口web页面,查看是否有查询和过滤记录了,如果有了就是生效了。

测试没有问题后改回自动获取dns即可。

mysql备份脚本

imajeason阅读(681)

在omv等nas系统使用中,mysql数据库会通过docker安装使用,mysql数据库的备份通过备份容器文件来实现,而是通过mysqldump来备份,在omv中使用定时任务备份。

这个脚本需要安装mysqldump命令,如果你得系统不支持安装这个命令,最好是安装一个linux虚拟机来安装mysqldump命令。

在debian系列,

sudo apt-get install mysql-client 

在rhel系列,

duso yum -y install mysql-devel

脚本内容如下:

#!/bin/bash

# MySQL连接参数
DB_USER="root"
DB_PASSWORD="mysql password"
DB_HOST="192.168.199.9"
DB_PORT="3307"

# 备份目录

BACKUP_DIR="/backups/dbs/mysql"

# 要备份的数据库列表,以空格分隔,数据库的名字
DATABASES="db1 db2" # 

# 创建备份目录
mkdir -p $BACKUP_DIR

# 获取当前日期作为备份文件名前缀
DATE_PREFIX=$(date +"%Y%m%d%H%M%S")

# 备份每个数据库
for DB_NAME in $DATABASES; do
    BACKUP_FILE="$BACKUP_DIR/$DATE_PREFIX-$DB_NAME.sql.gz"

    echo "开始备份数据库: $DB_NAME"
    
    # 使用 mysqldump 导出数据库,并通过 gzip 进行压缩
    mysqldump -u$DB_USER -p$DB_PASSWORD -h$DB_HOST -P$DB_PORT $DB_NAME | gzip > $BACKUP_FILE

    if [ $? -eq 0 ]; then
        echo "备份完成: $BACKUP_FILE"
    else
        echo "备份失败: $DB_NAME"
    fi
done

echo "所有数据库备份完成"

omv7中的kvm详尽使用说明,安装openwrt/rockylinux

imajeason阅读(1813)

OMV7中最重要的功能之一是kvm虚拟机管理,横向对比来说,pve是专业的kvm管理工具,unraid也有很方便快的kvm管理功能,但实际上omv中的kvm用起来也不虚pve,毕竟大家一样都是基于原生debian,要用虚拟机可以全界面操作,要用lxc却都要命令里搞。

而且pve本身没有nas功能,没有docker,不能直接用来当nas,所有的功能都要在kvm/lxc中通过虚拟机和容器来实现,我看不少人都是在pve里虚拟一个omv出来,再把硬盘直通给omv。但我更喜欢直接搭建omv来用,因为结合命令行,它可以实现任意功能,如果你要抬杠那就是你对。

1、openwrt虚拟机安装

我是用旁路由的方式来用openwrt,当然如果你的nas主机是all in one,双网卡,也可以当主路由用,但是这样比较容易boom。

首先去下载openwrt的img镜像,或者自己编译一个,不过最近更新的最新的openwrt包有问题,编译需要修改,不然铁定报错,通不过。

下载StarWind Converter 虚拟磁盘格式转换

下载地址:https://www.onlinedown.net/soft/628777.htm

转换的时候local转local,img转换成qcow2即可,得到openwrt.qcow2,上传到omv的池目录中。

回到omv中,创建一个openwrt虚拟机,系统就选择位置,跟普通虚拟机创建流程的唯一区别就是存储卷不是新建,而是选择上传的openwrt.qcow2,注意网络使用mactap,桥接模式。

创建完成后启动虚拟机,打开控制台,修改host vnc port为非原端口,8081改成8091,点击开始,就启动了web的vnc页面。

在浏览器中打开http://nas ip:8091,然后点击vnc.html就可以打开控制台了。

修改openwrt ip,编辑 vi /etc/config/network

只需要修改ip为你得nas同网段的一个ip即可,重启网卡 /etc/init.d/network restart

现在浏览器里就可以打开openwrt的ip到openwrt界面了,默认密码一般是admin password

到网络选项卡,修改网卡的路由地址为你得网络的主流路由地址,现在openwrt的网络就通了,注意还要关闭旁路由的模式的dhcp,防止与主路由冲突。

剩下的openwrt相关的使用不在本次内容中。

2、安装普通的虚拟机,rockylinux9

上传iso到池目录中。

创建虚拟机,注意光驱选择上传的iso,网络选择mactap,卷是新建create。

启动虚拟机,再启动控制台,跟openwrt一致。

到控制台安装操作系统即可。

3、直通

omv中的直通也比较简单。

在虚拟机关闭的状态下,选择添加主机磁盘就是把nas的机器直通到虚拟机中。

还可以挂载usb和pci设备。

OMV7上手,基础设置以及docker与kvm虚拟机

imajeason阅读(6015)

omv7系统安装就不写了,全是默认安装。

1、存储器配置

磁盘:这里可以查看所有检测到的硬盘,新硬盘需要先擦除,如果是有数据的盘,此处不要有任何操作,直接到文件系统;

2、文件系统

有数据的硬盘,点挂载现有文件系统,原来的文件都会保留下来。

在存储器中擦除过的硬盘,需要建立文件系统,这里ext4与xfs均可。

3、共享文件夹

这里创建出来的是对应用可见的目录,包括容器使用的、虚拟机使用的、共享等的,许多配置的目录就是共享文件夹,所以这里的分类可以分的细一点,方便数据分类。

4、系统-插件

插件这里首先要做的是安装extras

wget -O - https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | bash

安装完毕后强制刷新浏览器,就可以看到omv-extras标签,里面只有一个Docker repo,很好,先不要操作。

5、安装docker支持

点开插件,找到compose,安装。

安装完毕后刷新,服务中就有compose了,

右下角点击安装docker,安装的就是docker-ce

6、安装kvm虚拟机支持

系统-插件中,找到kvm,安装。

安装完成后刷新,服务中就有了kvm,这就是虚拟机管理了

7、开启smb共享

服务-smb,勾选开启服务。

共享中,选择需要共享的目录即可。

8、nfs共享

服务-nfs,勾选开启服务。

共享中,选择需要共享的目录。

10、创建用户,设置权限

用户中创建用户,修改权限。

在局域网内访问nas,如无异常,使用用户的账号密码登录后就可以打开共享了。

至此,omv7的上手配置就完成了。

下一步就是docker工具compose与虚拟机工具kvm的使用了,因为除掉以上基础配置,我们搭建应用几乎都是基于docker与虚拟机的,不建议直接在omv中启用过多应用,一方面不便于管理,另一方面也不便于迁移。

首先是docker

docker配置用的是compose,首先要确保有3个共享文件夹。

appdata:存放docker容器的映射目录;

composes:存放compose里配置的容器docker-compose配置以及以及env环境变量;

dockers:存放docker的一些杂七杂八的文件,包括镜像,如果不单独设置这个目录,默认的目录是/var/lib/docker,容器多了,镜像文件就把系统分区占满了;

打开compose配置

参考我的配置进行配置,目录名是上面的3个目录,修改完毕保存配置后,记得要重启docker。

修改compose全局环境变量,方便后面使用:

我添加了以下内容

data1_root=/srv/dev-disk-by-uuid-93f73e5e-a31e-4f7c-9ed4-366576d70465
data2_root=/srv/dev-disk-by-uuid-7ffbe182-7361-4ed9-958f-18fd3c4fc673
data_root=/srv/dev-disk-by-uuid-360a1b2e-dc78-4f6c-9b0f-db096d0edb9b

在后面的docker-compose文件编写中,我就可以使用这3个变量,简化配置,因为这3个变量的值就是我的3个存储目录。

现在,我们来创建一个容器,aria2+ariang进行测试:

点加号,添加一个文件,注意,上面的环境变量,内容如下

version: "3.8"

services:

  Aria2-Pro:
    container_name: aria2-pro
    image: p3terx/aria2-pro
    environment:
      - PUID=65534
      - PGID=65534
      - UMASK_SET=022
      - RPC_SECRET=P3TERX
      - RPC_PORT=6800
      - LISTEN_PORT=6888
      - DISK_CACHE=64M
      - IPV6_MODE=false
      - UPDATE_TRACKERS=true
      - CUSTOM_TRACKER_URL=
      - TZ=Asia/Shanghai
    volumes:
      - ${data1_root}/appdata/aria2-config:/config
      - ${data1_root}/downloads/aria2-downloads:/downloads
# If you use host network mode, then no port mapping is required.
# This is the easiest way to use IPv6 networks.
    # network_mode: host
    network_mode: bridge
    ports:
      - 6800:6800
      - 6888:6888
      - 6888:6888/udp
    restart: unless-stopped
# Since Aria2 will continue to generate logs, limit the log size to 1M to prevent your hard disk from running out of space.
    logging:
      driver: json-file
      options:
        max-size: 1m

# AriaNg is just a static web page, usually you only need to deploy on a single host.
  AriaNg:
    container_name: ariang
    image: p3terx/ariang
    command: --port 6880 --ipv6
    #network_mode: host
    network_mode: bridge
    ports:
      - 6880:6880
    restart: unless-stopped
    logging:
      driver: json-file
      options:
        max-size: 1m

我在配置文件中使用了全局变量${data1_root},如果不使用这种方式,我们的目录映射会变得很丑陋。

保存配置。

选中刚写的文件,点击拉取按钮,等待拉取镜像完成,再次点击上线,如果没报错的话,容器就启动完成了。

我们可以在服务、统计、容器等选项中查看容器运行的情况,自行点击查看。

至此,omv7中管理容器就完成配置了,当然我们还可以安装portainer来进行容器管理,都是可以的。

下面是kvm虚拟机配置。

kvm使用的第一步是创建存储池。

存储池配置的路径里要存放的是iso镜像文件与kvm生成的虚拟机的虚拟磁盘文件,不要创建子目录,会检测不到文件。

配置kvm网络,创建mactap,绑定enp1s0,这样配置的目的是开启桥接模式,使用这个网卡建立的虚拟机获取到的ip地址跟nas是同一个网段的,方便后续的远程登陆和服务访问,如果你不需要桥接,可以使用默认的虚拟网卡。

然后记得启动这个网卡。

下载一个任意系统的iso安装文件,放到存储池中,如果是windows虚拟机还需要virtio-win.iso,这个点击下载就行。

现在就可以创建kvm虚拟机了。

保存后回到vms界面,就可以启动虚拟机,进行操作系统安装了。

启动虚拟机后,可以点击控制台,点击开始,会跳出连接方式。

这里提供的控制台,并不能直接打开操作系统界面,需要借助vnc工具,我给大家推荐的是vnc viewer:https://vnc-viewer.en.softonic.com/

连接进去即可。

至此为止,omv7中kvm虚拟机管理工具的配置完成,可以愉快的使用虚拟机了

尝试OMV7,取代OMV5

imajeason阅读(953)

前些日子把omv5上的docker容器和数据全部迁移到了unraid上。

至于原因,一方面是配置omv机器配置低,是j1900,另一方面是买了unraid正版,可以放心大胆的用起来,主要是跑应用和虚机,为了避开unraid性能的坑,没有使用校验盘。数据安全方面,打算通过rsync把重要数据全部同步到omv5机器上。

于是尝试升级omv5,结果发现系统各种问题,修改配置也无法保存生效。

于是索性重装了omv7,正在试用。过几天做个视频,把omv7的使用系统的讲一下。

openmediavault,作为最简单的开源nas系统,通过插件几乎可以实现所有市面上的nas需要的功能,如果不能就用容器,再不行就是kvm虚拟机。

无论是unraid开心版还是黑群当主力nas使用都要面临系统升级的问题,虽然一两年,甚至两三年都不需要升级系统,但是随着时间流逝,这些系统的内核都太低,导致一些应用无法安装,哪怕是容器。所以不得不升级,升级就是面临不小的风险,所以omv是个不错的选择,但是omv用久了,因为配置太多,许多还是命令行,也会存在升级异常的问题。但好在重装系统不需要格式化数据盘,可以 直接挂载原来的数据盘,把容器和虚拟机启动起来即可,这也是为什么我几乎将所有的应用创建在容器中。

请关注后续。

Cloudreve 个人网盘,支持离线下载与webdav的网盘,Cloudreve+aria2+airang三合一

imajeason阅读(811)

日常我使用的网盘是Nextcloud,但是nextcloud就是个网盘,cloudreve可以结合aria2搞个离线下载安装很简单,我写了个三合一的docker-compose.yml一键安装。

先创建cloudreve的容器主目录
mkdir /mnt/user/appdata/cloudreve
cd /mnt/user/appdata/cloudreve
mkdir {cloudreve,data}
cd cloudreve
mkdir {avatar,uploads}
touch {conf.ini,cloudreve.db}

创建docker-compose.yml
vim docker-compose.yml
内容如下:
version: "3.8"
services:
  cloudreve:
    container_name: cloudreve
    image: cloudreve/cloudreve:latest
    restart: unless-stopped
    ports:
      - "5212:5212"
    volumes:
      - temp_data:/data
      - ./uploads:/cloudreve/uploads
      - ./conf.ini:/cloudreve/conf.ini
      - ./cloudreve.db:/cloudreve/cloudreve.db
      - ./avatar:/cloudreve/avatar
    depends_on:
      - aria2
  aria2:
    container_name: aria2
    image: p3terx/aria2-pro
    restart: unless-stopped
    environment:
      - RPC_SECRET=your_aria_rpc_token
      - RPC_PORT=6800
    volumes:
      - ./aria2/config:/config
      - temp_data:/data
    ports:
      - "6800:6800"
      - "6888:6888"
      - "6888:6888/udp"
  ariang
    container_name: ariang
    image: p3terx/ariang
    restart: unless-stopped
    ports:
      - "16880:6880"
    depends_on:
      - aria2

volumes:
  temp_data:
    driver: local
    driver_opts:
      type: none
      device: $PWD/data
      o: bind

执行docker-compose up -d,创建容器完成后
cloudreve主页:http://ip:5212 账号密码查看容器运行log,已经自动生成了。
登陆后打开配置离线下载节点

没问题的话,就可以从cloudreve离线下载了,下载完成后在cloudreve首页就可以看到。
ariang 管理页面:http://ip:16880,配置rpc

配置完成后就可以独立管理aria2了,cloudreve中添加的任务也可以看到,至于为什么有了cloudreve管理aria2还要ariang是因为有时候cloudreve管理不方便。


内网服务穿透(中)|端口映射+ddns+nginx+实现免费https

imajeason阅读(1370)

上期内网服务映射需要一台独立ip得公网服务器搭建frp,本期直接通过在路由器上端口映射来开放内网服务到公网。

本期视频操作需要的条件:

1、以下操作几乎都是基于docker容器,建议安装portainer容器管理工具

2、家庭拨号成功后获得得ip是公网ip,判断方法:

在路由器中查看路由器拨号获取到的ip,对比访问ip138.com显示得ip,如果一致,则说明自己的环境是有独立公网ip得

获取自己的公网ip https://www.ip138.com

3、有域名,可以是自己购买的域名,也可以是免费多级域名。

提供免费域名服务的网站,自行申请:

https://www.duckdns.org

https://www.eu.org

本文以duckdns为例:匿名即可注册,eu这个需要实名,比较麻烦。

并域名解析到自己得独立ip上;

在docker中创建一个容器,进行ddns解析:

docker cli (click here for more info)

docker run -d \
  --name=duckdns \
  --net=host `#optional` \
  -e PUID=1000 `#optional` \
  -e PGID=1000 `#optional` \
  -e TZ=Etc/UTC `#optional` \
  -e SUBDOMAINS=subdomain1,subdomain2 \
  -e TOKEN=token \
  -e UPDATE_IP=ipv4 `#optional` \
  -e LOG_FILE=false `#optional` \
  -v /path/to/duckdns/config:/config `#optional` \
  --restart unless-stopped \
  lscr.io/linuxserver/duckdns:latest

注意:subdomains后面写的是自己申请到的域名,token是域名页面自动生成的。

如果是用其他域名,建议在openwrt中安装ddns插件,或者在容器中自行创建支持自己的域名的ddns容器;

如果是阿里域名,用阿里ddns,使用镜像 chenhw2/aliyun-ddns-cli:latest

4、内网搭建服务,我需要开放得服务是nextcloud,端口是8150;

这部分自行搭建,nextcloud搭建可以参考我得博文。

5、申请证书,任意linux虚拟机,debian/centos等均可,安装certbot工具,申请证书;

安装certbot

yum install epel-release
yum install certbot

申请证书。

certbot certonly --standalone -d pan.abc.com

6、容器中搭建nginx,将nextcloud服务https://192.168.199.100:8443代理到8444;

nginx的作用是代理,也就是把frp转发后的端口再做一次代理,代理到80/443端口,并且挂上证书。

证书路径:/mnt/user/appdata/nginx/conf/cert

这个证书是从linux中申请的,复制过来。

镜像名称:nginx:latest

修改nginx配置

cd /mnt/user/appdata/nginx

cat conf/conf.d/nextcloud.conf

server {
    listen 8180;
    server_name dytt.wjzmsj.com;
    rewrite ^(.*) https://$server_name:8444$1 permanent;
}

server {
    listen 8444 ssl;
    server_name dytt.wjzmsj.com;
    charset utf-8;

    ssl_certificate /etc/nginx/cert/dytt.wjzmsj.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/cert/dytt.wjzmsj.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    keepalive_timeout 70;

    index index.html index.php;
    root /html/dytt.wjzmsj.com;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / { # ¨® V2Ray ???¦Ìpath ¡!ê??
        #proxy_redirect on ;
        proxy_pass https://192.168.199.100:8443;
        proxy_ssl_session_reuse off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        # Show real IP in v2ray access.log
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

7、路由器上通过端口映射开放内网服务8444到公网端口8444;

8、在nextcloud中设置新增的域名支持;

完成后即可通过访问 https://域名:8444来访问内网服务了。

PC电脑通过vmware中安装openwrt.img镜像实现旁路由功能。

imajeason阅读(1309)

之前做的视频讲的是在nas等存储服务器上装openwrt,现实情况是很多朋友没有nas设备,又想使用openwrt搞一个旁路由

这个视频就是做一下在vmware虚拟机上安装openwrt,配置成旁路由使用。

我们需要首先下载或者自行编译一个openwrt镜像

下载https://openwrt.org/zh/downloads

自行编译的话,看我之前的文章:https://www.dongvps.com/2023-10-09/openwrt-origin-com/

下载解压得到img镜像压缩包。

如果是在nas上kvm是可以直接加载img为磁盘启动openwrt虚拟机的

但是vmware不可以直接加载img为磁盘,需要转换

https://www.starwindsoftware.com/starwind-v2v-converter

https://www.starwindsoftware.com/tmplink/starwindconverter.exe

这个工具会发送到邮箱里。

下载后把img转换为openwrt.vmdk

以下为软件操作图:

现在有了虚拟磁盘,就可以打开vmvare创建虚拟机了

这里注意,需要修改vmware的网络模式:nat模式与桥接模式,桥接模式的话可以通过openwrt为整个局域网的机器提供旁路由服务。

编辑虚拟机

修改网络类型,使用桥接模式

修改磁盘

删除以下几个vmdk文件

把我们之前生成的openwrt.vmdk放过来

现在就可以启动openwrt了

启动完成后,输入用户密码,登陆成功。

手动修改ip配置,lan:vi /etc/config/network

ip修改成物理机所在网段的一个

修改完毕,重启网络 /etc/init.d/network restart

此时就可以到openwrt的web界面了,默认账号密码 root password

至此为止已经完成了openwrt的旁路由设置,具体的openwrt配置暂时不写了。

Nextcloud在家庭Nas(非80/443)配置ssl证书实现https访问

imajeason阅读(2628)

概述

家庭环境,这里特指中国大陆家庭拨号上网环境,首先是80与443端口都是不通的,要想实现https,配置相对比较麻烦。

  • 1、如果拨号环境没有公网ip或要用443端口,也就是没法通过默认的https端口实现加密访问,就需要使用frp之类的服务将内网的nextcloud映射出去。
  • 2、如果有公网ip,可以端口映射使用非80/443端口,例如9988端口等映射出去。

关联视频1:https://youtu.be/deA0M1zedlI

考虑到网盘需要较高的安全性,毕竟是隐私数据,不能接受被入侵,就一定要开启ssl证书访问。

如果你已经在内网nas搭建好了nextcloud,就直接直接到frp中转部分或者端口映射部分。

如果没有搭建nextcloud,链接如下:

nextcloud搭建

要想实现https服务的前提是把nextcloud服务映射到公网:

一共有3个方案,分别是frp转发、ipv4独立ip端口映射、ipv6独立ip开放。

本视频后续操作是frp转发方案,如果做成一个视频,时长有点太长了。

其他方案后面会陆续出视频。

首先是第一个方案frp转发

这个方案的好处是,家庭网络不需要在路由器上做端口映射,这就意味着不需要独立ip,也不需要担心在家庭网络开放服务从而导致运营商以此为借口搞什么幺蛾子,比如警告停止提供服务等,毕竟在中国大陆,私自在家庭网络中提供服务是不被允许的,即使我们搭建这种服务的目的是自用,不会跟你讲道理的。

优点很明显,缺点当然也是有的,就是需要有一台有独立ip的服务器。同样因为国内vps价格高,带宽小。我的选择是购买cn2-gia网络的搬瓦工服务器,我在简介里放了个推荐链接,大家有需要的可以去挑选一台。

cn2与cn2-gia的区别还是很大的,gia是专用网络,任意时间段都可以有几十m的速度,基本上可以把家庭网络跑满,达到在路由器上开启端口映射直接提供服务的水平。

现在我已经准备好了一台机器,我们还需要一个域名,域名的选择比较多,有啥用啥,愿意花钱的可以考虑自行购买com域名,一年一百来块,次之是6位数xyz域名,一年10块左右,最后是不花钱的方案,去  申请一个4级域名,可是可以用的。

有了域名,把域名解析到服务器ip上,解析的做法是做一条A记录,填写一个子域名名称,例如  pan.888888.xyz,只需要填写pan,ip地址就填写自己的服务器ip。

现在准备工作已经做好了。

下一步要搭建frp了。看拓扑图。

FRP拓扑

下面我们先做服务器端,在frp服务器上操作。

1、安装nginx代理工具。

nginx的作用是代理,也就是把frp转发后的端口再做一次代理,代理到80/443端口,并且挂上证书。

sudo yum update
sudo yum install nginx

修改nginx配置

cd /etc/nginx/conf.d/

vi pan.conf

server {
    listen 80;
    server_name zhangdaqi.duckdns.org;
    rewrite ^(.*) https://$server_name:443$1 permanent;
}

server {
    listen 443 ssl;
    server_name zhangdaqi.duckdns.org;
    charset utf-8;

    ssl_certificate /etc/letsencrypt/live/zhangdaqi.duckdns.org/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/zhangdaqi.duckdns.org/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;
    keepalive_timeout 70;

    index index.html index.php;
    root /html/zhangdaqi.duckdns.org;
    #charset koi8-r;
    #access_log logs/host.access.log main;
    location / { 
        #proxy_redirect on ;
        proxy_pass http://127.0.0.1:7001;
        proxy_ssl_session_reuse off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        # Show real IP in v2ray access.log
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2、域名解析

在域名网站做一条解析
A记录   pan      ip地址

3、申请证书

我喜欢用certbot工具申请,这是Let’s Encrypt 的证书申请工具,申请到的证书有效期三个月,到期前可以进行证书更新。

安装certbot

yum install python-urllib3
yum install python-requests
yum install certbot

申请证书。

certbot certonly --standalone -d pan.abc.com

定时任务,自动更新证书。

修改nginx证书相关配置,完整配置类似下面,注意修改为自己的域名,以及frp端口。

现在重启nginx,就可以刷新web,实现了https。

4、搭建frp服务。

使用的操作系统是debian11

然后在我们的内网的一台机器上做frp服务,与服务器端进行数据交换。

5、openwrt配置frp

如果你有openwrt,主路由旁路由都没关系,安装frp内网穿透工具,也是可以的,配置如下。

配置nextcloud conf允许我们的域名和服务器访问。

重启服务后,理论上已经可以通过域名https访问你的nextcloud服务了,但是会报证书错误。

此为第一个方案,其他方法不久就会更新。