jon*_*rry 3 networking linux dhclient
我正在尝试编写一个可以更改本地机器 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
Run Code Online (Sandbox Code Playgroud)
请注意,刷新后,我丢失了 IPv4 和 IPv6 地址,但使用 续订后dhclient,我只重新初始化了我的 IPv4 地址。为什么是这样?我该怎么做才能自动重新分配我的 IPv6 地址?
您可以只刷新 IPv4 地址,而不是从接口刷新所有 ip 地址。这是一个示例,其中我有一个带有 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
Run Code Online (Sandbox Code Playgroud)
仅刷新 IPv4:
# ip -4 address flush qemu-br2
Run Code Online (Sandbox Code Playgroud)
看到 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
Run Code Online (Sandbox Code Playgroud)
一般来说,您可以分别添加-4或-6使iproute2命令仅作用于 IPv4 或 IPv6 地址。