言小五折腾日记:IPv6从入门到“放弃”之前言篇
写在前面,博主IPv4和IPv6双栈需求如下:
1、设备1日常黑名单模式即gfw列表模式+强制代理域名列表上网,在名单中的走科学节点出口,不在名单中的走本地双栈出口。
2、设备2日常国内外分流模式即白名单模式上网,国内走本地双栈出口,国外走科学节点出口。
3、阻止外部IPv6访问路由器及内网除特定以外的任何端口。
以上需求均已达成,虽然不一定完美,但是至少博主没发现有啥问题。
博主是一个非常喜欢写前言的人,按照惯例,本文依旧是一篇前言文章。通篇都是啰嗦了博主有了相关需求,在解决需求的过程中遇到的各种问题但最终解决的相关过程,很无聊,可以无视,直接到本文末尾去查看相关文章的链接即可。
先说一下目前博主的网络拓扑:ESXi底层软路由,ESXi下虚拟一个iKuai作为主路由,虚拟N个OpenWrt作为旁路网关。iKuai主要负责PPPoE拨号、端口映射、DNS缓存加速、L2TP服务端、DDNS、防火墙等主路由该干的事情;OpenWrt用作旁路网关,主要负责一对一科学上网,比如OP1对应设备1,OP2对应设备2,根据不通需求以及设备来对应相应的OpenWrt。这样的好处就是,无论怎么折腾OpenWrt,家中其它设备不受影响。
博主家中是电信宽带,一直以来都是有公网动态IPv4没有IPv6(发文时是双栈),所以博主折腾家中网络拓扑结构的时候一直以IPv4链路来做一些相关设置,有时候甚至有点羡慕别家运营商宽带或别的地区的电信宽带有IPv6。iKuai版本自从更新到iKuai8_x32_3.6.13_Build202301131532之后,近两年时间没动过,稳的一匹,直到前不久发生了一件事而引发了博主此次的折腾事件。
博主玩PT已经多年,NAS上安装的Transmission(TR)3.0版本,在此次折腾事件以前从未关注过被PCDN吸血的问题(根本不知道被吸血)。2024年10月24日,月月站发了一条公告,说上线异常流量检测并提供一个页面查询异常种子以及流量,重点是异常种子不计入上传流量。博主是这个时候才关注到PCDN吸血问题,每日被PCDN刷流量还不计入上传,真是杯具(玩的其它站也有这个问题,但是只有月月站不计入上传)。起初是用月月站公告中的TR阻止清单来阻止被PCDN吸血,但是每日依旧被各种PCDN吸血,时间久了,发现TR的阻止清单会因为更新周期的问题防不住PCDN吸血,为此烦不胜烦,索性发现一个IP直接在iKuai的ACL规则里面将整个IPv4的B段全部拉黑(全部是温州电信的IPv4),两个多月以来,一直有关注被PCDN吸血的问题,截止发文时是拉黑了8个IPv4 B段(宁杀错不放过)之后,终于清净了(也不一定)。
在关注被PCDN吸血的这段时间里面,博主有空就在想怎么规避。某一天,博主突发奇想,既然PCDN都是IPv4,那么直接在NAS上不要IPv4只用IPv6不就好了?(这个想法是错误的,实际上玩PT的IPv4规模远远大于IPv6)
2024年10月某日,在iKuai开启DHCPv6客户端,发现根本没下发IPv6,放弃。
2024年11月某日,在iKuai开启DHCPv6客户端,发现根本没下发IPv6,放弃。
2024年12月某日,在iKuai开启DHCPv6客户端,发现下发了IPv6,但博主编译的自用OpenWrt固件为了精简就没配置过IPv6,放弃。
2024年12月19日,博主重新编译了OpenWrt固件,全面支持了IPv6,但博主测试发现IPv6是全部端口暴露在公网上的,之前在iKuai上设置的相关安全规则全部是用于IPv4的,在ACL规则中也没看到添加IPv6规则的页面,放弃。
2024年12月21日,博主在恩山论坛找到了一个帖子,是关于IPv6的ACL规则,博主这才醒悟过来,原来是iKuai版本问题,iKuai 3.7.0版本才开始支持IPv6的ACL规则(突然觉得自己是傻子)。博主才想起来当初将iKuai版本停留在iKuai8_x32_3.6.13_Build202301131532 就是因为iKuai8_3.7.0_Build202303201025的终端监控中多了IPv6,而博主由于宽带不下发IPv6,嫌看着碍眼,3.6.13版本又稳定,所以才在升级到3.7.0之后,又降级回3.6.13(博主的想法是主路由求稳不求新)。好了,知道问题所在就好解决了。但是,问题并没有解决,iKuai的IPv6 ACL规则配置之前,博主先在OpenWrt旁路网关上配置好IPv6,测试电脑也通过iKuai下发好IPv6,测试科学上网的时候发现问题了。博主主力电脑一对一的OpenWrt上科学上网插件是ShadowSocksR Plus+,IPv4节点,gfw列表即黑名单模式,电脑端获取到IPv6,访问网页是IPv6优先的。电脑访问国内网站是没问题的,测试IPv6的网站也能正常打开,但是在打开谷歌网页的时候提示连接已重置,为此百思不得其解,后来发现博主在ShadowSocksR Plus+访问控制中设置的某个强制走代理的IP测试网站,竟然直接显示了博主家的公网IPv4以及电脑获取到的IPv6,也就是说ShadowSocksR Plus+的科学上网分流失效了(并没有)。放弃(并没有)。博主在电脑上停用IPv6,ShadowSocksR Plus+就一切正常,该直接连接的网站都是直接连接,该科学的网站也是科学过去的,为此特意到ShadowSocksR Plus+的Issues上翻了半天,才知道ShadowSocksR Plus+自身不支持IPv6分流(不一定正确,因为博主的科学节点一般都是优化线路的IPv4入口,且以前博主本地宽带运营商不下发IPv6,所以博主截止到发文时都未曾研究过ShadowSocksR Plus+科学节点IPv6入口),如果要支持IPv6分流,就需要在ShadowSocksR Plus+中的DNS解析方式中使用chinadns-ng或MosDNS分流,而博主使用ShadowSocksR Plus+的DNS解析方式是DNS2TCP查询。好吧原因又找到了,可以着手解决了。这个时候在ShadowSocksR Plus+的issues中看到一个issue,说ShadowSocksR Plus+采用chinadns-ng分流,可以禁用国内IPv6,但是无法禁用国外IPv6,这个问题与博主遇到的情况不太一样,但是该issue下方大佬的回复给了我启发,就是在ShadowSocksR Plus+中改用MosDNS解析即可IPv6分流。于是问题又来了,博主编译的OpenWrt固件,ShadowSocksR Plus+中集成的是chinadns-ng(编译ShadowSocksR Plus+选项中最少需要在chinadns-ng和MosDNS中二选一,否则编译失败),需要重新编译OpenWrt固件,在OpenWrt编译选项中MosDNS有两种,一种是独立插件(可进行所有相关设置),一种是ShadowSocksR Plus+中集成(只能简单设置),这次博主学聪明了,编译选项中将两种都选了。
2024年12月22日,用上了新编译OpenWrt的固件,ShadowSocksR Plus+ DNS解析方式为使用本机端口为5335的DNS,MosDNS在5335端口提供DNS解析服务,在MosDNS基本选项中,选中远程DNS首选IPv4,搞定了博主的终极需求:根据ShadowSocksR Plus+中设置的科学规则来分流,国内域名和国外域名(不在gfw列表中)走本地宽带的IPv4和IPv6双栈出口,gfw列表以及强制走代理的域名走科学节点出口。
2024年12月23日,添加iKuai的IPv6相关ACL规则:1、阻止外部访问iKuai自身的IPv6;2、允许运营商前缀下发到iKuai;3、阻止外部访问内网设备的IPv6;4、允许外部访问NAS的IPv6 PT端口。
2025年01月05日:观察了两周时间,没发现有什么异常问题,发文。
系列文章0:言小五折腾日记:IPv6从入门到“放弃”之前言篇 (也就是本文了)
系列文章1:言小五折腾日记:iKuai 爱快 IPv6 ACL规则即防火墙设置篇
系列文章2:言小五折腾日记:OpenWrt旁路由(旁路网关)开启IPv6及科学上网IPv6相关
此次折腾事件参考资料如下:
ShadowSocksR Plus+相关issue:https://github.com/fw876/helloworld/issues/1470
恩山论坛iKuai IPv6 ACL规则相关:https://www.right.com.cn/forum/thread-8294542-1-1.html
博客园iKuai ACL规则相关:https://www.cnblogs.com/Yogile/p/17868347.html
iKuai官方ACL规则相关:https://www.ikuai8.com/index.php?option=com_content&view=article&id=192&Itemid=312
以上。