Estes são os bits relevantes do anúncio do roteador:
prefix info option (3), length 32 (4): p/64, Flags [onlink, auto], valid time 1138201s, pref. time 533401s
route info option (24), length 24 (3): p/64, pref=medium, lifetime=1143629s
A opção de informação de prefixo (PIO) diz que o prefixo p/64
está no link. A opção de informações de rota (RIO) diz que p/64
pode ser roteado pelo roteador.
Por padrão, o Linux ignora os RIOs:
$ sysctl -a 2>&1 | grep wlan0.accept_ra_rt_info_max_plen
net.ipv6.conf.wlan0.accept_ra_rt_info_max_plen = 0
Portanto, o comportamento do Debian Jessie é esperado: a opção de informações de rota é ignorada, o prefixo no link é respeitado e você obtém uma rota no link. Na outra máquina, algum software ou outro provavelmente está alterando o valor do sysconf - tente isto:
sysctl -a 2>&1 | grep rt_info_max_plen
Não consigo encontrar nada no RFC 4191 sobre se um RIO deve substituir um PIO ou não, então suponho que o comportamento seja compatível com o RFC. Eu concordo com você que é sub-ótimo.
All local subnet traffic is being forwarded via router which isn't very optimal.
Não é tão ruim assim. O primeiro pacote para cada destino será enviado para o roteador, que enviará um redirecionamento ao remetente, o que fará com que ele insira uma rota transitória / 128 para o destino e inicie o envio de pacotes diretamente para o destino. Sim, é um protocolo robusto.
How can I modify my config so traffic towards local subnet is not send via router?
Você deve consertar seu roteador para que ele não envie o RIO espúrio. Caso contrário, você deve descobrir qual parte do software está alterando o valor do sysconf mencionado acima e desativá-lo. Mas eu não me preocuparia muito com isso - o mecanismo de redirecionamento cuidará bem do assunto.