标题: [精]为局域网ipv6设备指定网关
时间: 2022-10-22发布,2023-08-05修改
为ipv4设定静态ip和网关比较容易,大多数设备都是支持的。然而移动设备对ipv6支持较差,基本没有可修改选项。android只支持SLAAC来生成ipv6地址和网关,难以为这些设备指定旁路由。
原理:通过radvd软件发送高于主路由优先级的RA声明,从而让旁路由设备成为主网关。radvd可以只为指定的设备发送这个声明,所以局域网中的其它设备不受影响。
已知不兼容的旁路由系统:openwrt(没有radvd这个软件), alpine(很轻量,可惜一旦开ipv6转发ipv6就无法上网了,可能是我设置问题,还没找到原因)
已测试的旁路由系统:debian
主路由系统:openwrt
安装:
interface eth0 { ## 定义有IPv6的那个接口的名称,也就是旁路LAN口的名称
IgnoreIfMissing on;
AdvSendAdvert on;
MaxRtrAdvInterval 600;
AdvReachableTime 0;
AdvDefaultPreference high; ########重要
prefix ::/64 { ### SLAAC模式下获取的前缀都是/64
AdvAutonomous on;
AdvPreferredLifetime 14400;
AdvValidLifetime 86400;
AdvOnLink on;
};
clients { ### 在此枚举需要进行流量牵引的设备的Link local地址
#DEVICE 1
fe80::cefd:5253:6ff9:8a2e
};
};
重要:主路由openwrt需要确保【接口】->【LAN】->【DHCP服务器】->【IPv6 设置】->【本地IPV6 DNS服务器】这个选项没有勾选,否则dns会指向主路由导致一些奇怪的问题。
2023-08-05 更新:
上述配置在某些系统下有时ipv6网关会跳到默认网关,导致旁路由失效。以及prefix配置无实际作用,因为主路由会下发prefix相关配置,旁路由不需要配置prefix。
interface eth0 { ## 定义有IPv6的那个接口的名称,也就是旁路LAN口的名称
IgnoreIfMissing on;
AdvSendAdvert on;
MaxRtrAdvInterval 600;
AdvReachableTime 0;
AdvDefaultPreference high;
route 2000::/3 {
AdvRouteLifetime 1800;
AdvRoutePreference high;
};
clients {
#DEVICE 1
fe80::cefd:5253:6ff9:8a2e
};
};
2000::/3为ipv6全球单播地址范围,也就是互联网地址范围。route 2000::/3 会在指定设备中添加2000::/3的路由到路由表中,路由表中前缀越长的优先级更高,也就会比默认路由优先级更高,避免了流量直接发给主路由。
参考: https://blog.ihipop.com/2022/09/5343.html
小米20定制版
『回复列表(1|隐藏机器人聊天)』