Descrição da pergunta
Como configurar o IPv6 SEM delegação de prefixo?
Estou tentando configurar acesso dual-stack (IPv4/IPv6) para minha interface br-lan em um sistema Debian (arm64) com kernel versão 5.15. Minha conexão upstream é por meio de um modem wwan0, e quero fornecer acesso dual-stack para clientes downstream conectados a br0 (br-lan).
Configurei o NetworkManager, ndppd, radvd e wide-dhcp6, e configurei os arquivos de configuração e scripts necessários. Os clientes conectados ao br-lan podem fazer ping em endereços dentro da rede br-lan e receber endereços DHCPv6 e informações de DNS. No entanto, eles não podem se conectar à internet.
Qualquer assistência e solução de problemas seriam muito apreciadas.
Pilha de software
- Núcleo : 5.15
- SO : Debian (arm64)
- Ferramentas de gerenciamento de rede : NetworkManager, ndppd, radvd, wide-dhcp6
Meta
Forneça acesso de pilha dupla para br-lan
.
Configuração de rede
Rio acima
Dispositivo :
wwan0
Conexão : modem
Acesso dual-stack : sem delegação de prefixo
Configuração :
wwan0: flags=81<UP,POINTOPOINT,RUNNING> mtu 1500 inet 100.84.235.248 netmask 255.255.255.240 destination 100.84.235.248 inet6 240e:473:620:140c:10f8:8d5a:c303:7640 prefixlen 64 scopeid 0x0<global> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 1000 (UNSPEC) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
A jusante
Dispositivo :
br0
Conexão :
br-lan
Configurações do NetworkManager :
ipv4 shared
,ipv6 ignore
Configuração :
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.42.0.1 netmask 255.255.255.0 broadcast 10.42.0.255 inet6 240e:473:620:140c:2333::1 prefixlen 80 scopeid 0x0<global> inet6 fe80::2045:34ff:fe79:4865 prefixlen 64 scopeid 0x20<link> ether 22:45:34:79:48:65 txqueuelen 1000 (Ethernet) RX packets 4097 bytes 423481 (413.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2184 bytes 239531 (233.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Arquivos de configuração
/etc/sysctl.conf
net.ipv6.conf.all.forwarding=1
/etc/ndppd.conf
proxy wwan0 {
router yes
timeout 500
ttl 30000
rule 240e:473:620:140c:2333::/80 {
iface br0
static
}
}
/etc/radvd.conf
interface br0 {
AdvSendAdvert on;
AdvOtherConfigFlag on;
AdvManagedFlag on;
MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;
prefix 240e:473:620:140c:2333::/64 {
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr off;
};
}
/etc/wide-dhcpv6/dhcp6s.conf
option domain-name-servers 2a09::;
option domain-name-servers 2a11::;
interface br0 {
address-pool pool1 3600;
};
pool pool1 {
range 240e:473:620:140c:2333::2000 to 240e:473:620:140c:2333::3000 ;
}
Rota IPv6
::1 dev lo proto kernel metric 256 pref medium
240e:473:620:140c:2333::/80 dev br0 proto kernel metric 256 pref medium
240e:473:620:140c::/64 dev wwan0 proto kernel metric 700 pref medium
240e:473:620:140c::/64 dev br0 metric 1024 pref medium
fe80::/64 dev docker0 proto kernel metric 256 pref medium
fe80::/64 dev br0 proto kernel metric 256 pref medium
fe80::/64 dev veth9aa835b proto kernel metric 256 pref medium
fe80::/64 dev wlan0 proto kernel metric 600 pref medium
default via 240e:473:620:140c:54cb:5bf7:3c38:2da5 dev wwan0 proto static metric 700 pref medium
Script de configuração: /etc/NetworkManager/dispatcher.d/ipv6-conf.sh
#!/usr/bin/env bash
interface=$1
event=$2
if [ "$interface" == "wwan0" ]; then
prefix=$(ip -6 addr show dev wwan0| sed -e's/^.*inet6 \([^ ]*\)\/.*$//;t;d'|head -n 1|cut -f'1-4' -d':')
# just assume prefix length /64 here
echo "get prefix $prefix::/64"|systemd-cat -t ipv6_conf
cp /etc/ndppd.conf.bak /etc/ndppd.conf
sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/80/g" /etc/ndppd.conf
cp /etc/radvd.conf.bak /etc/radvd.conf
sed -i "s/REPLACE_PREFIX_HERE/$prefix:2333::\/64/g" /etc/radvd.conf
cp /etc/wide-dhcpv6/dhcp6s.conf.bak /etc/wide-dhcpv6/dhcp6s.conf
sed -i "s/PREFIX_MIN/$prefix:2333::2000/g" /etc/wide-dhcpv6/dhcp6s.conf
sed -i "s/PREFIX_MAX/$prefix:2333::3000/g" /etc/wide-dhcpv6/dhcp6s.conf
systemctl restart radvd
systemctl restart ndppd
systemctl stop wide-dhcpv6-server
systemctl start wide-dhcpv6-server
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
echo 1 > /proc/sys/net/ipv6/conf/all/proxy_ndp
sleep 30
echo "setting route" |systemd-cat -t ipv6_conf
ip -6 addr add $prefix:2333::1/80 dev br0
#ip -6 route add $prefix::/80 dev br0
ip -6 route add $prefix:2333::/64 dev br0
ip -6 route |systemd-cat -t ipv6_conf
fi
Problema
Os clientes conectados br-lan
podem fazer ping em todos os endereços br-lan
e receber endereços de transmissão DHCP6 e DNS, mas não podem se conectar à Internet.
Exemplo de um cliente Windows
- Endereço IPv4 : 10.42.0.86
- Máscara de sub-rede IPv4 : 255.255.255.0
- Servidor DHCP IPv4 : 10.42.0.1
- Servidor DNS IPv4 : 10.42.0.1
- Servidor IPv4 WINS : 10.42.0.1
- Endereços IPv6 :
- 240e:473:620:140c:1413:a3cb:57ec:f26
- 240e:473:620:140c:2333::2000
- Endereço IPv6 temporário : 240e:473:620:140c:3177:43e1:6ebc:550f
- Endereço IPv6 local de link : fe80:1413:a3cb:57ec:f26%10
- Gateway padrão IPv6 : fe80::2045:34ff:fe79:4865%10
- Servidores DNS IPv6 :
- 2a09::
- 2a11::
- Resultados do teste de ping :
ping -6 fe80::2045:34ff:fe79:4865
ou240e:473:620:140c:2333::1
: Sucessonslookup AAAA microsoft.com
ouping -6 2603:1030:20e:3::23c
: Falha
Parece-me que minhas rotas IPv6 têm algum problema. Tentei ajustar a seguinte parte do script de despacho, mas sem sorte.
echo "setting route" |systemd-cat -t ipv6_conf
ip -6 addr add $prefix:2333::1/80 dev br0
#ip -6 route add $prefix::/80 dev br0
ip -6 route add $prefix:2333::/64 dev br0
ip -6 route |systemd-cat -t ipv6_conf