admin 管理员组

文章数量: 887021

家庭宽带搭建ipv6私人网盘

起:本人穷,只能购买1核2G1M的云服务器,访问大一点的图片就很吃力,于是乎想着将家中1000M的宽带拿来做服务器网络,访问服务器理论上行100MB/s,下行30MB/s(取决于宽带速率)。正好自己有一台闲置电脑,然后就开始了折磨历程,本人具备一点网络知识,不多但是够用。在最后运行起来,服务器8核4G1000M上行30M下行,结果还是令本人满意,除去域名有时候寻址慢点,访问设备有限制外(需具备公网ipv6地址,手机用流量或连接具有ipv6属性的无线网),其他都还在可接受范围内。

准备:一台可以安装虚拟机的电脑或直接上服务器,一条移动宽带(本人用的移动的宽带)。

搭建平台:物理机(Windows11),虚拟机(Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-56-generic x86_64))。

框架1:Apache承载 + NextCloud本体 + PHP执行语言 + MySQL数据存储 + DDNS-GO域名自动映射。

框架2:PHP-fmp + Nginx + NextCloud + MySQL + Redis + DDNS-GO。前3者搭建与配置可参考此文章:Ubuntu安装nginx+php+nextcloud

更注重云盘属性的方案:Cloudreve搭建私人云盘

1. 安装虚拟机

Windows11下载安装VMware,在清华源、阿里源或官方网站下载Ubuntu 22.04.1系统文件:阿里源,不懂的可自行百度一下,没有难度。然后在VMware中安装Ubuntu,可参考:VMware虚拟机安装Ubuntu22.04 详细教程。

2. 虚拟机网络模式

物理机直连光猫LAN接口(1000Mbps),虚拟机在 Vmware 虚拟机设置–硬件中设置网络为桥接模式:直连物理网络。宿主机须具有ipv6功能->光猫需要开启ipv6地址,这样宿主机ipv6地址是公网,桥接之后虚拟机也是公网ipv6地址,移动2409:** 电信240e:** 联调2400:**

修改虚拟机网卡速率:关闭虚拟机,找到虚拟机*.vmx 文件修改 ethernet0.virtualDev = "e1000"/"vmxnet3",开启虚拟机即为1000M/10Gbps网卡。

外网通过ipv6访问服务器步骤

访问设备须具有ipv6地址,测试地址:ipv6-test.com

由于没有公网ipv4只有使用ipv6,可能需要光猫的超管密码设置参数,这个需要找宽带运维人员获取。进入光猫管理界面192.168.1.1(网线直连),在防火墙-攻击保护设置-关闭Ipv6Spi即可在公网访问内网具有公网ipv6地址的设备。

检查是否连通,可在具有公网地址的PC上WIN+R输入cmd,然后ping -6 ipv6地址(虚拟机命令ifconfig查看)

3. 安装必要软件

3.1 准备

由于万米高墙的阻拦,国内使用外网资源速度十分有限,所以我们首先需要更换软件源。这里本人是直接使用的软件更新进行的换源,换的是清华源,如果手动换的,请参考网上众博主的文章。

有些操作需要root权限,可使用(sudo su)后输入用户密码后进入到root模式,操作便可以不加sudo。

系统源位置:/etc/apt/sources.list

养成好习惯,先备份:cp /etc/apt/sources.list /etc/apt/sources.list.bak

操作修改文件:vim sources.list

换好源后进行软件更新:apt-get upgrade

3.2 ssh

远程连接。

安装:apt-get install openssh openssh-server

systemctl start ssh #启动ssh

sytemctl stop ssh #停止ssh

systemctl enable ssh #开机自启动

systemctl status ssh #查看ssh运行状态

#配置允许root用户连接,默认端口22

设置root用户密码:sudo passwd  然后输入两次新密码

设置ssh的文件:cd etc/ssh -- vim sshd_config

找到文件里的: PermitRootLogin prohibit-password 修改为:PermitRootLogin yes

保存修改,重启ssh

这样一来就可以通过网络远程管理(如果不具备公网地址只能在局域网管理,有公网地址便可以进行公网管理,但是由于网络环境是ipv6,所以公网管理设备需要具有公网ipv6地址。或者使用后续的frp进行内网穿透端口做转发,这样便可以在任何公网设备对服务器进行远程管理)。

3.3 集成环境LAMP

推荐:不推荐集成LAMP环境,推荐更简便搭建NextCloud需要的集成环境(PHP+Apache2)参考:Apche2整合PHP 。

版本:8.1.12,本人需要集成的环境软件Xampp为搭建个人云盘做准备,需要PHP、Apache、数据库,去Xampp官网选择对应Linux的.run文件,上传到Ubuntu中。

上传目录(自定义)/opt/xampp-linux-x64-8.1.12-0-installer.run

进入opt目录:cd /opt/

执行安装等待安装完成:./xampp-linux-x64-8.1.12-0-installer.run

进入安装目录(以下操作均基于这个目录):cd /opt/lampp

操作:./lampp start/stop/restart 启动/关闭/重启所有程序,Apache MySQL等

单独某个程序操作:./lampp start/stop/restartapache

单独启动apache:./lampp startapache

提示端口占用,修改httpd.conf文件(http):vim /etc/httpd.conf 80->8099

修改httpd-ssl.conf文件(https):vim /etc/extra/httpd-ssl.conf 443->16443

修改完成后同样报错无法启动:vim /lampp 将里面的testport 80修改为testport8099(自定义), testport 443修改为testport 16443(自定义)

Apache日志目录:/opt/lampp/logs

配置 Apache(如果不使用80和443端口建议不开启端口强制重写https,浏览器默认会将一次跳转的域名记录,下次使用http访问会直接跳转https,然后不是使用的443端口就会无法访问的问题)。

httpd.conf: /opt/lampp/etc/httpd.conf
DocumentRoot "/opt/nextcloud"
<Directory "/opt/nextcloud">
    #RewriteEngine on
    AllowOverride All
    Require all granted
    #Order allow,deny
    #Allow from all
    Options Indexes FollowSymLinks ExecCGI Includes
    #RewriteCond %{HTTP_HOST} ^yougos.asia$ [NC]
    #RewriteCond %{SERVER_PORT} !^443$
    #RewriteRule ^(.*)?$ https://www.example.com:443
</Directory>


httpd-ssl.conf: /opt/lampp/etc/extra/httpd-ssl.conf
<VirtualHost _default_:443>
    DocumentRoot "/opt/nextcloud"
    ServerName www.example.com
    ServerAlias *
    ServerAdmin 207239****@qq
    ErrorLog "/opt/lampp/logs/error_log"
    TransferLog "/opt/lampp/logs/access_log"
    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
    </IfModule>
    # 开启ssl
    SSLEngine on
    # 证书
    SSLCertificateFile "/opt/webapps/ssl-docs/example/example.crt"
    # 证书密钥
    SSLCertificateKeyFile "/opt/webapps/ssl-docs/example/example.key"
    # 证书链文件
    SSLCertificateChainFile "/opt/webapps/ssl-docs/example/root_bundle.crt"
    # 以下默认配置
    <FilesMatch "\.(cgi|shtml|phtml|php)$">
        SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory "/opt/lampp/cgi-bin">
        SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch "MSIE [2-5]" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0
    CustomLog "/opt/lampp/logs/ssl_request_log" \
        "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

可参考:1.Linux安装Xampp

2.Linux下Lampp启动失败解决方法

3.4 Nginx

访问接入,版本1.18.0。

安装nginx:apt-get install nginx

配置文件:/etc/nginx/sites-enabled/default

日志文件:/var/log/nginx/

systemctl start nginx #启动nginx

sytemctl stop nginx #停止nginx

systemctl enable nginx #开机自启动nginx

systemctl status nginx #查看nginx运行状态

配置样例443-https端口,ssl证书是腾讯云免费证书nginx版本

server {
    listen 443 ssl;
        listen [::]:443 ssl;
        server_name example.com;

    #隐藏nginx版本号
    server_tokens off;
    #ssl证书文件--example.com
    ssl_certificate /opt/webapps/ssl-docs/example.com/example.com_bundle.pem;
    ssl_certificate_key /opt/webapps/ssl-docs/example.com/example.com.key;
    #服务端要支持 协议配置
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    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:1m;
    ssl_session_timeout  5m;

    index index.html;
    root /opt/webapps/web-root-docs/...;
    if ($scheme = http) {
        	return 301 https://$host$request_uri;
    }

    location /nextcloud {
        proxy_pass https://example.com;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host:$server_port;
        proxy_set_header Remote_Addr $remote_addr;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

}

3.5 MySQL

数据库,版本8.0.31,高版本并不是所有命令都适用低版本,比如低版本password函数,高版本没有。

配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf

日志文件:/var/log/mysql/

安装mysql:apt-get install mysql-server

初始用户名和密码文件:/etc/mysql/debian.cnf

进入mysql:mysql -u 初始用户名 -p 初始用户名密码

创建新用户:CREATE USER 'admin'@'%' IDENTIFIED BY 'password';

修改用户密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';

赋予权限:grant all privileges on *.* to 'admin'@'%' with grant option;

刷新权限:flush privileges;

3.6 Redis

缓存,版本6.0.16。

安装redis:apt-get install redis

检查版本:redis-cli --version

配置文件:/etc/redis/redis.conf

日志文件:/var/log/redis/

配置--守护线程:daemonize=yes

配置--远程访问:bind 0.0.0.0

配置--开启密码:equirepass foobared -> equirepass password

systemctl start redis #启动redis

sytemctl stop redis #停止redis

systemctl enable redis #开机自启动redis

systemctl status redis #查看redis运行状态

参考链接:Redis安装使用

3.7 frp

版本:0.45.0,公网代理实现内网穿透(需要一台具有公网IP的服务器),经测试,代理速度取决于公网服务器带宽速率。

下载frp release版本:https://github.com/fatedier/frp/releases 选择 amd64.tar.gz版本

解压缩:其中frpc frpc.ini是客户端文件,frps frps.ini是服务端文件

运行服务:/opt/frp/frpc -c /opt/frp/frpc.ini

将frps运行在服务器上(具有公网地址的服务器)注意放行端口,默认端口是7500,还需放行代理的服务端口。在内网机器上运行frpc,这样就可以通过公网IP+端口访问内网服务。

frps配置:公网服务器做服务端,代理所有公网请求到内网服务器上。

[common]
tcp_mux = false #解除速度限制
bind_port = 7000 #代理服务端口,通过这端口转发
dashboard_port = 7500
token = 自己设置的密钥
vhost_http_port = 6010
vhost_https_port = 6020
dashboard_user = username #7500端口访问用户名
dashboard_pwd = password #7500端口访问密码
tls_enable = true #加密访问
log_file = /var/log/frp/frps.log #日志文件,不指定日志信息默认输出到控制台,需要设置文件夹777权限 chmod -R 777 /var/log/frp/
log_level = info #日志等级,可用等级“trace, debug, info, warn, error”
log_max_days = 3 #日志保存最大保存时间

frpc配置

[common]
server_addr = 公网地址
server_port = 7000 #对接转发端口
token = 服务端(代理端设置)
tcp_mux = false
log_file = /var/log/frp/frpc.log #日志文件,不指定日志信息默认输出到控制台,需要设置文件夹777权限 chmod -R 777 /var/log/frp/
log_level = info #日志等级,可用等级“trace, debug, info, warn, error”
log_max_days = 3 #日志保存最大保存时间

[ssh] #每个服务名字不一样
type = tcp #代理类型
local_ip = 127.0.0.1
local_port = 22 #本地端口
remote_port = 6000 #公网服务器远程端口,使用公网IP+端口访问这个服务

[web]
type = http
local_ip = 127.0.0.1
local_port = 9137
custom_domains = 域名
bandwidth_limit = 1000MB

创建系统服务

系统服务路径:/usr/lib/systemd/system

创建文件并写入如下内容:vim frp.server

[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/opt/frp/frpc -c /opt/frp/frpc.ini
ExecReload=/opt/frp/frpc reload -c /opt/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

保存后即可使用systemctl进行管理

3.8 DDNS-GO

版本:4.4.0,自动推送本地ipv4/ipv6地址到域名服务商将域名映射到推送的地址上。

下载:https://github.com/jeessy2/ddns-go/release 选择 Linux_X86_64.tar.gz 下载

进入上传文件夹创建文件夹:>cd /opt/ >mkdir ddns-go

解压到对应文件夹:tar -zxvf ddns-go_4.4.0_Linux_x86_64.tar.gz -C /opt/ddns-go

进入文件夹:cd /ddns-go

安装服务:./ddns-go -s install 卸载:./ddns-go -s uninstall

安装服务后自动注册了系统服务功能,可使用systemctl进行操作

进入ip:9876进行配置保存,生成配置文件地址:/root/.ddns_go_config.yaml 也可以对配置文件进行编辑保存,同网页设置一致

DDNS-GO进阶:在同一台服务器多个端口运行DDNS服务

在ddns-go下载源码:https://github.com/jeessy2/ddns-go/release

在本地对源码进行编辑修改,查找所有的9876,修改为想要的端口*。

修改util--user.go中:所有../.ddns_go_config.yaml -> ../.ddns_go_config_one.yaml(不同文件名即可,后缀需相同)。

主目录main.go下:
svcConfig := &service.Config{
	Name:        "ddns-go", #修改为ddns-go-one 为了解决启动时与原服务冲突
	DisplayName: "ddns-go", #修改为ddns-go-one 为了解决启动时与原服务冲突
	...
}

修改完保存文件,进入Linux服务器,由于作者使用golang1.19编写,需要在服务器安装go环境。

获取压缩包:https://dl.google.com/go/go1.19.4.linux-amd64.tar.gz

解压到对应文件夹:tar -zxvf ...tar.gz -C /opt/builder/go

编辑环境文件:vim /etc/profile

加上:export PATH=$PATH:/opt/builder/go/bin(对应自己地址) 保存退出

刷新一下环境配置:source /etc/profile

使用:go -version 查看是否安装成功

进入到自定义ddns-go编译,作者提供了Makefile文件编译ddns-go

进入到上传ddns-go源码地址,使用make build进行编译

如果报错timeout,使用以下两句命令

$ go env -w GO111MODULE=on
$ go env -w GOPROXY=https://goproxy.cn,direct

然后将生成的ddns-go可执行文件像之前那么操作即可

3.9 Nextcloud

网盘软件,版本25.0.0。

下载软件包:https://download.nextcloud.com/server/releases/nextcloud-25.0.0.zip

解压到对应地址:unzip nextcloud-25.0.0.zip -d /opt/nextcloud

赋予权限:chmod —R 777 /opt/nextcloud

配置文件:/opt/nextcloud/config/config.php

将用来访问的域名地址添加至配置文件中,不然显示从不被信任的站点访问,在网页中访问地址(前面Apache配置已经指向了NextCloud文件路径)即可进行对网盘的初始配置和安装,注意要配置数据库。

为解决NextCloud检查中的错误,需要在Xampp中PHP安装扩展,高版本不存在的扩展可以在低版本中找到,如/php-7.4.21/ext/下很多扩展。

首先找到对应的插件包,解压到对应目录,如:/opt/php-extension/extension1

进入解压文件夹:cd /opt/php-extension/extension1

利用PHP的phpize创建configure文件:/opt/lampp/bin/phpize

然后:export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig #不明所以

然后:echo $PKG_CONFIG_PATH #查看是否配置成功

然后将配置文件指定到PHP配置文件:./configure --with-php-config=/opt/lampp/bin/php-config

然后使用make

最后使用make install输出Installing shared extensions: /opt/lampp/lib/php/extensions/no-debug-non-zts-20210902/(对应自己目录)即可

然后去/opt/lampp/etc下编辑php.ini:vim php.ini 增加extension="extension.so"

重启apache:./lampp restartapache

3.10 邮件服务器

域名解析到服务器地址,mail@example

ubuntu安装postfix:apt-get install mailutils

自定义安装,测试邮件发送sendmail -F Luod -f admin -t name@163
Subject: zhuti
neirong
.(结束标志)

检查邮件,收件箱和垃圾邮箱

报错1:SMTPUTF8 is required, but was not offered by host(服务端未提供SMTPUTF8)
解决:在服务器/etc/postfix/main.cf文件下增加:smtputf8_enable = no,然后重启postfix(systemctl重启方法)

报错2550 Domain may not exist or DNS check failed
解决:似乎是关于域名解析和注册的问题

家庭宽带基本是会被系统拦截的,使用各邮箱的SMTP服务代发服务即可,发向QQ邮件需要域名可连通。

4. 启动服务

开启所有服务,使用域名即可访问自己的网盘和服务,速度取决于家庭宽带速度和服务器处理速度,Enjoy it。

5. 其他

为解决服务器长时间运行(笔记本垃圾)压力,可以定时重启释放资源,重启后配置的服务均可自动重启,唯一未找到自动重启的是Xampp下的Apache,但是可以在重启后使用定时任务启动。

1.创建定时任务:crontab -e

0 2 * * * /sbin/reboot #凌晨两点重启服务器

5 2 * * * /opt/lampp/lampp startapache #凌晨两点5分重启Apache

2.php安装扩展报错:Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

apt-get install autoconf

3.php安装扩展报错:configure: error: no acceptable C compiler found in $PATH

apt-get install gcc

4.configure: error: The pkg-config script could not be found or is too old.  Make sure it

apt-get install pkg-config

5.Please provide a path to MagickWand-config or Wand-config program.

apt install libmagick++-dev

6.No package 'oniguruma' found

apt-get install libonig-dev

7.sodium安装

先安装libsodium-stable
wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.18-stable.tar.gz
tar -zxf libsodium-1.0.18-stable.tar.gz
cd libsodium-stable
./configure --with-php-config=/opt/lampp/bin/php-config
make
make install

再安装sodium,操作和安装php扩展一致

本文标签: 私人 家庭