<br />
<br />
README:
本教程适合包括且不限于OpenWrt(小米、华硕)与飞牛OS(群晖)等.
本方案主要解决ipv4打洞受限于路由器CPU转发能力不足、发热,lucky占用内存大,ipv4打洞端口随机,内网访问速度受限于宽带带宽.外出设备无ipv6网络,ipv6防火墙受阻等问题.
环境:
路由 OpenWrt
Nas 飞牛
网络 无ipv4公网,ipv6 80/443端口受阻
域名 一个(xyz域名5块一年,非必须)
一.ipv4打洞
与lucky stun打洞原理一致,但使用natmap进行打洞.优点是占用内存更小,仅2-3Mb运行内存,使用防火墙转发(目前主流路由CPU转发带宽约400Mbps左右,长时间高负载可能导致丢包延迟发热).
(1).安装NATMap
登陆openwrt后台后,依次点击系统-软件包,先更新软件包列表,搜索natmap,依次安装 natmap
,luci-app-natmap
,luci-i18n-natmap-zh-cn
.
NATMap :Releases · heiher/natmap · GitHub,小米等路由可以下载官方二进制文件,通过SSH命令操作,不做过多介绍
(2).添加穿透规则
打开 系统-软件包-NATMap,添加或编辑一条规则.按如下填写,端口按自己喜好(不影响穿透后端口号),低位端口或80/443可能受阻.
保存并应用后,等待1-2min,出现外部ip与外部端口即为打洞成功.
(3).添加防火墙转发规则
打开 网络-防火墙-端口转发,添加一条规则.按如下填写.名称随意,外部端口为上文填写端口,内部ip地址与内部端口对应Nas的ipv4内网地址与端口.
(4).成功打洞并访问
保存并应用后,即可通过IP+端口在任意设备访问,速度取决于你宽带上行最高带宽.
二.ipv6配置防火墙 访问
相信很多小伙伴在IPV6与DDNS设置正确的情况下,通过ipv6可在内网正常访问,但换到手机数据流量等外网设备下无响应,这种情况下属于ipv6防火墙未正常设置.
而论坛帖子并没有任何一篇解决这问题,无非关闭所有Ipv6防火墙,或者设置ipv6转发.但在安全性和性能上并不是最优解.
飞牛OS的ipv6地址为默认的 [stable-privacy]
模式,即完全随机.而在官方Debian系统中为[UEI-64]模式,即ipv6前四段为运营商分配,后4段地址固定,根据设备mac地址生成.
我们可以设置为 [UEI-64]
模式,实现路由的分流,以及更加精细的端口防火墙.完善网络安全.
(1).开启SSH
请确保当前用户拥有管理员权限
(2).链接终端
输入 ssh [用户名]@[IP]
,回车
输入 yes
确认,回车
输入密码(此时密码不可见),回车
(3).固定ipv6后缀
键入 sudo -i
切换到root用户.
键入 cd /etc/NetworkManager/system-connections
进入指定目录,此时输入 ls
可以看到目录下'Wired connection 1.nmconnection'文件.
键入 vi 'Wired connection 1.nmconnection
'编辑配置文件
键入[i]进入编辑模式,修改指定行为eui64
键入[:wq]保存.
重启Nas后
如果控制面板中,mac尾缀与ipv6尾缀相似,那么恭喜你成功固定了Nas的ipv6地址.
(4).配置Ipv6防火墙
访问OpenWrt-网络-防火墙-通信规则.
如图下配置.源区域务必填写任意区域(此选项影响内网访问速度),目标区域Lan,目标地址为::[设备ipv6四段尾缀]/-64. 高级设置 地址族限制 为 仅ip6
此时通过ipv6访问Nas,内网访问速度通常可达1000Mbps乃至2.5g. 外网网速速度为宽带上传带宽.
三.双栈访问并'隐藏'端口
此部分需拥有域名,并已托管CloudFlare.
问:我已经可实时访问Nas,为什么要配置双栈访问?
答:
1.虽然你已经成功打洞,并且内网访问Nas延迟低至1ms.但想必小伙伴已经发现,直接打洞的速度,取决于网络带宽,即使在内网ipv4访问,速度可能也仅仅8-9Mb/s,严重影响内网文件处理.
但如果你的设备支持ipv6,我们就可以无感切换到ipv6实现千兆乃至万兆的内网访问.
2.避免外出时,所持有设备未拥有ipv6网络,无法访问Nas
3.隐藏端口,方便记忆
(1).注册cloudflare,并托管域名
略...请魔法使用某谷搜索相关教程.
(2).配置密钥
登录cloudflare,访问右上角个人资料.点击API身份令牌.
创建拥有DNS访问权限的令牌(建议保存此令牌,后期无法查询)
(3).配置DDNS
Nas-设置-DDNS,服务商选择cloudflare,输入账号密钥,地址为自动
(4).添加代理
添加额外一条CNAME解析,名称可以使用www,目标任意,请务必勾选代理状态.
(5).配置双栈规则
创建如上两条规则
此时如果检测到设备支持ipv6,则会重定向到ipv6:端口,支持网址附带参数
如果不支持ipv6,则会重定向到ipv4:端口,同样支持域名参数
(6).脚本自动化更新规则
1.抓取参数
#!/bin/sh
Port4=${2}
Port6=${4}while true; do
curl -L -k -s "https://api.cloudflare.com/client/v4/zones/AAAAA/rulesets/BBBBB/rules/CCCCC" -X 'PATCH' -H "Authorization: Bearer DDDDD" -H "Content-Type:application/json" --data '{"description":"v6","expression":"(ip.src in {::/0})","action":"redirect","action_parameters":{"from_value":{"status_code":302,"preserve_query_string":true,"target_url":{"expression":"concat(\"https://EEEEE.xyz:'$Port6'\", http.request.uri.path)"}}},"enabled":true}' > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
break
fi
donewhile true; do
curl -L -k -s "https://api.cloudflare.com/client/v4/zones/AAAAA/rulesets/BBBBB/rules/CCCCC"
-X 'PATCH'
-H "Authorization: Bearer DDDDD"
-H "Content-Type:application/json"
--data '{"description":"v4","expression":"(ip.src in {0.0.0.0/0})","action":"redirect","action_parameters":{"from_value":{"status_code":302,"preserve_query_string":true,"target_url":{"expression":"concat(\"https://EEEEE.xyz:'$Port4'\", http.request.uri.path)"}}},"enabled":true}' > /dev/null 2> /dev/null
if [ $? -eq 0 ]; then
break
fi
done
其中 AAAAA BBBBB CCCCC DDDDD EEEEEE请根据账户自行替换
浏览器F12启用调试,在编辑或保存规则后抓取日志,框中数据即为有效数据
2.配置脚本
编辑完善脚本后,将脚本上传到路由器指定位置.并赋予可执行权限
MATMap面板配置 通知脚本[位置]
后言
当你成功完善上述教程后.此时你就可以使用www.[域名].xyz随时访问你的Nas,cloudflare会根据你当前的网络环境自动分配最佳地址与端口.实现无感ipv4/6双栈 隐藏端口.
本教程主要为OpenWrt+fnOS配置,其他设备或系统,配置方法类似.请自行某谷.
[未经允许不得转载或引用]