在 CentOS 6.4 中,在虚拟接口上使用“ifdown”时,物理接口上配置的 IPv6 地址也会被删除。我希望只有虚拟接口会被更改。
如何防止虚拟接口上的“ifdown”影响物理接口上的 IPv6 地址?
我们运行 CentOS 6.4 服务器,该服务器具有一个物理网卡和多个虚拟接口。此外,我们还将多个 IPv6 地址绑定到物理接口。
例如,/etc/sysconfig/network-scripts/ifcfg-eth0 是:
DEVICE=eth0
IPV6_DEFAULTGW="AAAA:BBBB:CCCC:D::1"
IPV6INIT="yes"
USERCTL="no"
DNS2="8.8.4.4"
DNS1="8.8.8.8"
IPADDR="xx.x.xxx.201"
PRIMARY="yes"
NETMASK="255.255.255.192"
BOOTPROTO="static"
IPV6ADDR_SECONDARIES="AAAA:BBBB:CCCC:D::202 AAAA:BBBB:CCCC:D::203"
IPV6ADDR="AAAA:BBBB:CCCC:D::201"
ONBOOT="yes"
ifconfig 的输出如下:
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr D4:AE:52:B4:AF:8C
inet addr:xx.x.xxx.201 Bcast:xx.x.xxx.255 Mask:255.255.255.192
inet6 addr: AAAA:BBBB:CCCC:D::201/64 Scope:Global
inet6 addr: AAAA:BBBB:CCCC:D::202/64 Scope:Global
inet6 addr: AAAA:BBBB:CCCC:D::203/64 Scope:Global
inet6 addr: fe80::d6ae:52ff:feb4:af8c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:607986 errors:0 dropped:0 overruns:0 frame:0
TX packets:244764 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:99225727 (94.6 MiB) TX bytes:40528574 (38.6 MiB)
Interrupt:36 Memory:da000000-da012800
还有多个虚拟接口,例如为额外的 IPv4 地址定义了 ifcfg-eth0:29:
DEVICE=eth0:29
USERCTL="no"
IPADDR="xx.x.xxx.202"
NETMASK="255.255.255.192"
BOOTPROTO="static"
ONBOOT="yes"
ifconfig 输出:
# ifconfig eth0:29
eth0:29 Link encap:Ethernet HWaddr D4:AE:52:B4:AF:8C
inet addr:xx.x.xxx.202 Bcast:xx.x.xxx.255 Mask:255.255.255.192
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:36 Memory:da000000-da012800
当所有接口都处于开启状态时,配置工作正常。但是,当我关闭其中一个虚拟接口时:
/sbin/ifdown eth0:29
eth0 上的 IPv6 次要设备已被删除!
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr D4:AE:52:B4:AF:8C
inet addr:xx.x.xxx.201 Bcast:xx.x.xxx.255 Mask:255.255.255.192
inet6 addr: fe80::d6ae:52ff:feb4:af8c/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:617867 errors:0 dropped:0 overruns:0 frame:0
TX packets:249076 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:100506865 (95.8 MiB) TX bytes:41031979 (39.1 MiB)
Interrupt:36 Memory:da000000-da012800
经过一番调查,我发现在 /etc/sysconfig/network-scripts/ifdown-ipv6 中,给定的设备名称 (eth0:29) 被缩短(为 eth0),并且在脚本末尾调用“ipv6_cleanup_device”,它会从物理接口中删除所有 ipv6 地址,而不是虚拟接口(没有任何地址)。
如何防止“ifdown eth0:29”修改物理接口上的 IPv6 地址?
答案1
不要使用这些旧的已弃用的别名接口。相反,将所有 IP 地址添加到eth0
。
编辑/etc/sysconfig/network-scripts/ifcfg-eth0
并添加地址:
IPADDR2="xx.x.xxx.202"
NETMASK2="255.255.255.192"
IPADDR3="..."
等等。