Назад | Перейти на главную страницу

Как удалить только адреса IPv6 с помощью iproute2?

Я пытаюсь написать приложение, которое может изменить IP-адрес локальной машины. Поэкспериментируя, я заметил, что если я только что подключаюсь к беспроводной сети, мне назначается IPv6-адрес, который является функцией MAC-адреса. Рассмотрим следующую последовательность команд:

<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

Обратите внимание, что после промывки я теряю адреса IPv4 и IPv6, но после обновления с dhclient, Я повторно инициализирую только свой IPv4-адрес. Почему это? Что я могу сделать для автоматического переназначения моего IPv6-адреса?

Вместо того, чтобы сбрасывать все IP-адреса из интерфейса, вы можете сбрасывать только IPv4-адреса. Вот пример, в котором у меня есть интерфейс с IPv4 и 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

Чтобы очистить только IPv4:

# ip -4 address flush qemu-br2

Посмотрите, что 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
inet6 fe80::c8b8:97ff:fe12:a30/64 scope link
   valid_lft forever preferred_lft forever

Вообще говоря, вы можете добавить -4 или -6 сделать iproute2 команда действует только на адреса IPv4 или IPv6 соответственно.