Я пытаюсь написать приложение, которое может изменить 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 соответственно.