如何使用 iproute2 仅删除 IPv6 地址?

如何使用 iproute2 仅删除 IPv6 地址?

我正在尝试编写一个可以更改本地计算机 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 地址?

答案1

您不必刷新接口上的所有 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 地址起作用。

相关内容