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