起因是我在宿舍部署了一台NAS,定期对我的个人数据进行备份,同时在NAS上搭建了文件服务器、工作站、个人多媒体中心以及git等服务,但是因为校园网ipv4无法给上级路由配置端口转发,IPv6只能获取到128位的单设备地址,因此无法实现内网穿透,虽然有像远程组网、反向代理等内网穿透方案,但是需要通过第三方服务器中继,无法保证数据安全并且访问速度严重受限,经过一个多月的摸索,最终找到一套目前为止非常完美的解决方案,能够实现路由器后的设备正常访问IPv6,并且通过使用DNSPod域名解析服务实现单域名双栈访问,同时支持使用TLS/SSL协议,实现了随时随地不限速加密访问
概况
-
网络使用的是西工大校园网,PPPoE拨号,千兆网速,支持IPv6,IPv4和IPv6均使用的DHCP地址分配机制
-
NAS使用的是威联通QNAP的TS-462C,系统是QTS 5.0.1.2277
-
软路由使用的是GL-iNet MT1300,自带OpenWrt系统,固件版本19.07.8,内核版本4.14.241
方案分析
-
QNAP DDNS:威联通提供的DDNS直接获取的是校园网流量出口的公网IPv4地址,基本没有任何用处,使用路由器或者直接PPPoE拨号在校园网环境下均无法直接获得IPv6地址,DDNS形同虚设
-
myQNAPcloud Link:其运行机制实际上是使用的阿里云的服务器实现FRP反向代理,速度极慢并且只支持使用特定的app访问,同样我们也可以搭建自己的FRP服务器实现内网穿透,但是大带宽服务器费用很高,并不划算
-
花生壳、NKN、DDNSTO、Link、ZeroTier等内网穿透方案:均需要第三方服务器进行中继,访问速度慢,并且数据安全难以保证
-
校园网IPv4进行内网穿透的可行性:通过QNAP自带的DDNS服务能够获取到校园网IPv4出口的公网地址,路由器WAN口获得是校园网内上级路由分配的内网地址,如果需要内网穿透,需要对上级路由逐级配置端口转发,这条路行不通
-
校园网IPv6进行内网穿透的可行性:目前校园网已经全面普及ipv6,但是西工大的校园网IPv6使用的是DHCPv6的地址分配机制,并且只给每个拨号设备分配一个128位的IPv6地址,只允许一个设备连接,不能划分子网,这种情况下如果使用路由器进行PPPoE拨号,只有路由器能够获取到IPv6地址,无法继续划分子网为路由器后设备进行IPv6的地址分配,如果使用NAS直接进行PPPoE进行拨号则获取不到IPv6地址(此问题应该是QNAP中的PPPoE缺少对于IPv6的支持),这条路也行不通
-
软路由OpenWrt:校园网的局限性太大没有操作空间,所以上软路由,在接入校园网端口前对内网进行配置,在OpenWrt中进行NAT地址转换,IPv4无法穿透只能校内访问,所以只能使用NAT6,NAT是IPv4时代的产物,原理是将公网IPv4+公网端口号转换为内网IPv4+内网端口号,后来有人提出了NAT66和NAT64,之前我一直觉得NAT66是一个很鸡肋的东西,最初提出NAT是因为IPv4地址有限,利用端口号不仅能进行进程寻址还实现了主机寻址,从而实现了IP复用,但是对于IPv6来讲每个设备都有全球唯一的IPv6地址为什么还要进行地址转换,但当看到校园网奇葩的IPv6网段时好像明白了NAT66存在的意义,通过IPv6是可以在互联网定位到路由器的,因为路由器已经分配到了全球唯一的IPv6地址,但是路由器后的设备分配不到IPv6地址因此可以通过NAT转换实现公网IPv6到内网的转换,至于NAT66和NAT64的选择我个人更倾向于NAT64,因为在校园网环境下个人局域网部署IPv6没有任何意义反而需要配置复杂的防火墙,因此选择使用NAT64实现公网到内网的转换
方案思路
-
OpenWrt进行PPPoE拨号,校园网分配的IPv6地址比较特殊,不能使用OpenWrt内置的IPv6管理,需要手动配置网络接口才能获取到地址,需要注意LAN口同样需要配置,否则会因为LAN口无法分配子网地址造成地址冲突系统循环重启
-
路由器WAN端口获取到IPv6之后OpenWrt的IPv6 Ping测试以及IPv6路由追踪能够跑通,此时说明可以通过IPv6在定位到路由器
-
在OpenWrt中配置NAT64,需要注意OpenWrt的IPv6本身并没有NAT转发,建议使用socat或者lucky插件,比较推荐使用OpenWrt大佬古大羊写的lucky脚本,实现公网IPv6到内网IPv4的转换
-
动态域名解析,推荐从腾讯云购买域名,可以直接使用DNSPod进行域名解析,在添加域名解析时在同一域名下同时配置A和AAAA的解析记录,同时申请免费的SSL证书,DNSPod的免费SSL证书实际上是TLS证书,安全性很高
-
将SSL证书导入QNAP NAS,便可以利用SSL协议通过https加密访问,其加密原理是当终端与服务器建立通信时,服务器首先向终端发送经过CA机构认证的公钥,终端利用服务器公钥对自己的秘钥进行加密发送给服务器,服务器通过私钥解密获得终端秘钥,从而建立加密通信
-
利用lucky或者直接在OpenWrt建立域名解析服务,首先将WAN口的IPv4地址推送到DNSPod域名解析的A记录,同时将路由器获取到的IPv6地址推送到同一域名下的AAAA记录,WAN口的IPv4地址实际上是校园网内网地址,IPv6地址是全球唯一的公网地址
-
NAS固定内网IP,这样才能在实现静态的端口转发,使用lucky脚本建立端口转发,将公网IPv6的数据转发到NAS固定的IPv4内网地址,lucky的防火墙是自动配置的,不需要额外配置IPv6的防火墙,但是需要在OpenWrt的防火墙中配置IPv4的端口转发,以实现IPv4+IPv6的双栈访问
-
此时便能够实现NAS的远程访问,访问机制是如果终端在校园网内网,可以利用解析到的IPv4内网地址直接访问到路由器,OpenWrt利用NAT对IPv4端口进行转发实现内网快速访问(校园网内网IPv4的子网掩码是255.255.0.0,但是经过测试发现校园网内不同网段也可以互相访问,应该是校园网内网服务器对不同网段做了互连),如果终端不在校园网,则会通过公网IPv6地址定位到路由器,路由器通过lucky脚本监听IPv6端口进行NAT64端口转发实现远程访问,因为IPv4和IPv6使用的是同一域名,因此不需要考虑终端的IP地址类型(如果在外网访问必须通过IPv6,目前所有运营商的4G、5G网络均支持IPv6),访问速度约等于校园网网速,速度极快且安全性高
本文先讲解方案分析和方案思路,校园网环境比较特殊走了不少弯路,期间翻阅了很多资料扒了很多教程,最终总结出一个目前为止校园网环境下实现NAS远程访问的完整方案,本文先提供一个基本思路,工作量很大,以上方案思路的每一条都足够写一篇教程专门讲解,之后有时间会详细讲解方案思路中每一条的实施过程,对计算机网络比较了解的可以按照这个思路自行配置
原文链接:https://blog.csdn.net/qq_29688717/article/details/129506914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168476299816800215031479%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168476299816800215031479&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-4-129506914-null-null.blog_rank_default&utm_term=NAS%E3%80%81%E7%BE%A4%E6%99%96%E3%80%81%E9%98%BF%E9%87%8C%E4%BA%91%E3%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90%E3%80%81%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E3%80%81ipv6%E3%80%81ddns%E3%80%81%E8%BD%BB%E9%87%8F%E7%BA%A7%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E9%93%81%E5%A8%81%E9%A9%AC%E3%80%81%E5%A8%81%E8%81%94%E9%80%9A%E3%80%81DSM%E3%80%81DSM6.0%E3%80%81%E7%BE%A4%E6%99%96nas%E3%80%81%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E3%80%81%E8%9C%97%E7%89%9B%E6%98%9F%E9%99%85%E3%80%81%E9%BB%91%E7%BE%A4%E6%99%96%E3%80%81docker%E3%80%81%E5%AE%B9%E5%99%A8%E9%95%9C%E5%83%8F%E3%80%81%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E3%80%81%E5%AE%9D%E5%A1%94%E3%80%81%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E3%80%81nginx%E3%80%81frp%E3%80%81%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90