在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的IPv6流量进行“旁路牵引”

V2ex上有2人问这个问题,就专门写文章总结一下吧

前提条件

  1. 旁路需要支持 TPROXY,且你的 TPROXY 支持 IPv6 的流量
  2. 不需要OpenWRT,我自己是在N1上刷了个自编内核的CoreELEC,打开了一些 TPROXY 工作需要的内核模块,旁路和高清播放两不误
  3. 主要原理就是利用 IPv6 Router Preferences and More-Specific Routes (RFC 4191) 绝大多数系统默认打开,参考 https://linux.die.net/man/5/radvd.conf 的 AdvDefaultPreference 章节

具体做法

  1. 我们假设TRPOXY的配置都已经配置好,任何被牵引过来的IPv6流量都会被按照设定的规则“自动处理”,你明白自动甄别和处理的意思是什么(PREROUTING/MATCH,范围太广且每个人方案不同,不具体说明,只要能达到本条要求即可),我假设你这方面没问题。
  2. 旁路可以通过 SLAAC/DHCPv6 获取一个地址,同时内核也获取到了一个前缀,这个前缀感知是内核自动完成的,我自己选的 SLAAC  方式,简单且不用关闭主路由的 SLACC 这样其他设备可以直连国内 IPv6大网
  3. 对于需要牵引流量走旁路的设备,获取其IPv6的Link-local地址(苹果手机需要关闭随机MAC地址,否则可能造成Link-local地址也随机变化),我们假设设备的Link-local地址为 fe80::aabb:ccdd:eeff:gghh
  4. 修改旁路的RADVD的RA方式为单播,并填入需要接受单播RA的第二步获取到的那些设备的Link-local地址,并且在RA中声明我的路由优先级最高(未配置的情况下,默认网关的路由优先级一般不是最高的,所以如果你没改过主路由的配置,主路由的RA声明的默认网关的优先级无需调整)
  5. 设备默认会把发送RA广播的旁路的Link-local地址设置为DNS,如果你想要使用这方面的特性,你可以加以利用在旁路还配置一个DNS,否则请自行使用IPv4的DHCP给这些设备单独分配DNS解决特殊的DNS问题,我假设你这方面也没问题
  6. 采用高优先级默认路由旁路上RADVD的配置案例:

     
  7. 采用明细路由法:

实测手里的所有安卓都不支持,IOS未知,作为默认路由法的补充。

简单来说的话,就是把需要“牵引”流量的目的地址通过RA告诉客户端,相当于给客户端下发一些静态路由,你可以枚举所有的已经分配的公共单播IPv6地址前缀(数量也不是很多),也可以只声明你需要牵引的目的地址的前缀,这样做某些事情更加有针对性,这里给出一个示例

 

Author Info :
  • From:在不关闭主路由 SLAAC 的前提下对家庭内网指定设备的IPv6流量进行“旁路牵引”
  • URL:https://blog.ihipop.com/2022/09/5343.html
  • Please Reserve This Link,Thanks!
  • 发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注