Назад | Перейти на главную страницу

CentOS, ifdown на виртуальном интерфейсе удаляет IPv6-адреса на физическом интерфейсе

В 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

Также существует несколько виртуальных интерфейсов, например ifcfg-eth0: 29 определены для дополнительных адресов IPv4:

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

Дополнительные IPv6 на eth0 удалены!

# 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-адреса на физическом интерфейсе?

Не используйте эти старые устаревшие интерфейсы псевдонимов. Вместо этого добавьте все IP-адреса в eth0.

редактировать /etc/sysconfig/network-scripts/ifcfg-eth0 и добавьте адреса:

IPADDR2="xx.x.xxx.202"
NETMASK2="255.255.255.192"
IPADDR3="..."

и так далее.