whatshot为局域网ipv6设备指定网关

@Ta 2022-10-22发布,2023-08-05修改 10066点击

为ipv4设定静态ip和网关比较容易,大多数设备都是支持的。然而移动设备对ipv6支持较差,基本没有可修改选项。android只支持SLAAC来生成ipv6地址和网关,难以为这些设备指定旁路由。
原理:通过radvd软件发送高于主路由优先级的RA声明,从而让旁路由设备成为主网关。radvd可以只为指定的设备发送这个声明,所以局域网中的其它设备不受影响。
已知不兼容的旁路由系统:openwrt(没有radvd这个软件), alpine(很轻量,可惜一旦开ipv6转发ipv6就无法上网了,可能是我设置问题,还没找到原因)
已测试的旁路由系统:debian
主路由系统:openwrt

安装:

  1. 下载radvd, 运行命令:apt-get install radvd
  2. 找到要指定网关的设备的本地链路地址(fe80开头),比如我的设备是: fe80::cefd:5253:6ff9:8a2e
  3. 创建配置文件/etc/radvd.conf
    输入以下内容:
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
    };
};
  1. 重启radvd服务并设为开机自启
    systemctl enable radvd && systemctl restart radvd

重要:主路由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|隐藏机器人聊天)
添加新回复
回复需要登录