Não há mapeamento direto entre os endereços IPv4 e IPv6. A maneira mais confiável que posso imaginar (que exige que você esteja na mesma rede que o nó IPv4) é obter o endereço MAC para o IP e construir um endereço baseado em EUI-64 de link-local a partir dele. Ou seja, os nós IPv6 quase sempre configuram automaticamente um endereço de link local baseado em MAC, portanto, isso deve funcionar na maioria dos casos.
O seguinte exemplo de script rápido e sujo funciona no Ubuntu Xenial (16.04) desde que o pacote python3-netaddr
esteja instalado. Não parece funcionar em Trusty (14.04) uma vez que a biblioteca netaddr está faltando algumas das funcionalidades necessárias.
#!/bin/bash -e
IP=$1
ping -c 1 $1 > /dev/null 2> /dev/null
MAC=$(arp -an $1 | awk '{ print $4 }')
IFACE=$(arp -an $1 | awk '{ print $7 }')
python3 -c "
from netaddr import IPAddress
from netaddr.eui import EUI
mac = EUI(\"$MAC\")
ip = mac.ipv6(IPAddress('fe80::'))
print('{ip}%{iface}'.format(ip=ip, iface=\"$IFACE\"))"
Exemplo de uso (supondo que você colou o conteúdo em ipv4-to-ipv6.sh
e fez um chmod +x ipv4-to-ipv6.sh
):
./ipv4-to-ipv6.sh 192.168.0.1
fe80::224:b4ff:fe9c:1329%eth0
Observe que esse é um endereço de link local que precisa ter o escopo definido para um determinado link para ser útil, portanto, exige que o %<interface>
seja utilizável na maioria dos aplicativos. Se seus hosts também tiverem um prefixo global de difusão ponto a ponto, provavelmente eles também poderão ser acessados usando o endereço baseado em MAC. (você pode, por exemplo, alterar a linha ip = mac.ipv6(...)
para usar seu prefixo global e isso deve funcionar.)