Como remover apenas endereços IPv6 com o iproute2?

2

Estou tentando escrever um aplicativo que possa alterar o endereço IP da máquina local. Ao fazer alguma experimentação, percebi que, se eu me conecto recentemente a uma rede sem fio, me é atribuído um endereço IPv6 que é uma função do endereço MAC. Considere a seguinte sequência de comandos:

<disconnect wireless and reconnect>
$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:7d:7c:42  
          inet addr:192.168.2.98  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe7d:7c42/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST...
$ sudo ip addr flush dev eth0
$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:7d:7c:42  
          UP BROADCAST RUNNING MULTICAST...
$ sudo dhclient eth0
$ ifconfig 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:7d:7c:42  
          inet addr:192.168.2.98  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST

Observe que, após o flushing, eu perdi os endereços IPv4 e IPv6, mas depois de renovar com dhclient , apenas reinitializei meu endereço IPv4. Por que é isso? O que posso fazer para reatribuir meu endereço IPv6 automaticamente?

    
por jonderry 09.06.2014 / 23:52

1 resposta

3

Em vez de liberar todos os endereços IP de uma interface, você pode liberar somente endereços IPv4. Aqui está um exemplo em que tenho uma interface com um endereço IPv4 e um IPv6:

# ip address show qemu-br2
5: qemu-br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether ca:b8:97:12:0a:30 brd ff:ff:ff:ff:ff:ff
inet 192.168.20.1/24 scope global qemu-br2
   valid_lft forever preferred_lft forever
inet6 fe80::c8b8:97ff:fe12:a30/64 scope link
   valid_lft forever preferred_lft forever

Para liberar apenas o IPv4:

# ip -4 address flush qemu-br2

Veja que o IPv6 ainda está lá:

# ip address show qemu-br2
5: qemu-br2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether ca:b8:97:12:0a:30 brd ff:ff:ff:ff:ff:ff
inet6 fe80::c8b8:97ff:fe12:a30/64 scope link
   valid_lft forever preferred_lft forever

De um modo geral, você pode adicionar -4 ou -6 para fazer com que um comando iproute2 atue apenas nos endereços IPv4 ou IPv6, respectivamente.

    
por 30.01.2017 / 20:44