摘要:现有校园网ipv6地址一枚,前缀128,服务器搭建在实验室路由器下,在路由器上做ipv6nat,并设置端口转发到局域网服务器上,在服务器上搭建nextcloud,最终可以在外网通过ipv6访问网盘。
PART.1 在校园网IPV6中使用路由器。
校园网中拿到的IPV6的前缀为128,路由器拿到地址后,并不能给路由器下的设备分配全球单播的IPV6地址,因此不得使用类似IPV4的方法——NAT。这种方法在ipv6中是不推荐的,在这里也只是不得已而为之。
在openwrt中使用IPV6NAT的方法可以参考恩山论坛
https://www.right.com.cn/forum/thread-198647-1-1.html
PART.2 设置IPV6DDNS
IPV6ddns与IPV4的DDNS设置是一样的,只不过op官方的ddns-scripts 并不支持阿里的ddns,这里又要感谢伟大的恩山论坛,
https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=267501
https://github.com/sensec/ddns-scripts_aliyun
借助这位大佬的脚本,可以让官方的ddns-scripts支持阿里的ddns,官方ddns-scripts支持ipv6,非常好用。
opkg 安装ddns-scripts、luci-app-ddns、openssl-util、wget,再安装这位大佬的ipk
ddns中就可以设置阿里了
ddns设置过程就不说了,这里发现了一个问题,ddns-scrpts会莫名奇妙的甩出一个error,然后退出,不能正常重新启动,写个守护脚本守护它。脚本源码:
!/bin/sh
sleep 100
DATE=`date +%Y-%m-%d-%H:%M:%S`
line=`ps -w |grep dynami|grep -v grep|wc -l`
if [[ $line -ne 0 ]]
then
echo $line
exit 0
fi
echo $line
/etc/init.d/ddns start
echo $DATE --restrat >>/root/proddns.log
经过几天的测试,可以稳定运行。
PART.3 端口转发
在第一步的基础上,这一步就比较简单了,在openwrt路由器/etc/firewall.user开头加上ip6tables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to [ipv6addr]:80
ip6tables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE
ip6tables -t nat -I PREROUTING -p tcp --dport 443 -j DNAT --to [ipv6addr]:443
ip6tables -t nat -I POSTROUTING -p tcp --dport 443 -j MASQUERADE
ip6tables -t nat -I PREROUTING -i eth0.2 -p tcp --dport 80 -j DNAT --to [ipv6addr]:80
ip6tables -t nat -I POSTROUTING -o eth0.2 -p tcp --dport 80 -j MASQUERADE
ip6tables -t nat -I PREROUTING -i eth0.2 -p tcp --dport 443 -j DNAT --to [ipv6addr]:443
ip6tables -t nat -I POSTROUTING -o eth0.2 -p tcp --dport 443 -j MASQUERADE
将80和443端口转发到路由器下的服务器上,并给服务器配置上静态的内网ipv6地址。需要注意的是,一定要指定端口,加上 -i 和 -o参数,否则路由器下的其他设备访问ipv6外网时全都会被转发到服务器上,而且一定要加在开头,第一步中firewall.user已经添加一句话了,一定要添加到之前添加那句的前面。重启路由,端口转发就完成了。
PART.4 在服务器上安装nextcloud
使用lnmp一键包搭建环境,安装方法见https://lnmp.org/install.html
nextcloud14需要php7.1以上版本 mysql5.5以上版本。lnmp安装完成后 ,
添加虚拟主机,具体过程就不细说了,启用ssl,启用phpinfo。
添加ok之后照着https://docs.nextcloud.com/server/14/admin_manual/installation/nginx.html
在/usr/local/nginx/conf/vhost/域名.conf中配置。还需要删除lnmp自动生成的/home/wwwroot/域名/文件夹下的.user.ini,需要先chattr -i解锁,在php.ini中添加open_basedir = /home/wwwroot/域名/:/proc/:/tmp/:/dev/urandom/:/数据文件夹/。解压nextcloud到网站存放的路径。
添加 opcache缓存加速,打开lnmp的安装文件夹
./addons.sh install opcache
安装完成后按nextcloud的要求配置
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
以上内容添加到/usr/local/php/conf.d/004-opcache.ini
重启lnmp 打开浏览器输入网址开始安装nextcloud。
安装完成后就可以使用了。
2018-12-11:使用过程中发现,下载超过1G的文件,下载到1G时就会中断,APP也无法同步。解决方法:在/usr/local/nginx/conf/nginx.conf的http{}下添加fastcgi_max_temp_file_size并设置允许下载文件的最大大小,就可以下载超过1G的文件。