Я настроил виртуальный сетевой интерфейс в Centos 6, скопировав ifcfg-eth0 в ifcfg-eth0: 1 и изменив соответствующие переменные. Но связь была нестабильной. Хотя одна из ранее существовавших переменных была PREFIX=24
Мне пришлось добавить NETMASK=255.255.255.0
в скрипт виртуального интерфейса, чтобы соединение было стабильным. Разве эти переменные не должны иметь одинаковый эффект?
РЕДАКТИРОВАТЬ:
Это нестабильная версия ifcfg-eth0: 1:
DEVICE="eth0:1"
NM_CONTROLLED="yes"
ONBOOT=yes
HWADDR=00:26:18:24:4D:xx
TYPE=Ethernet
BOOTPROTO=none
IPADDR=69.64.93.x
PREFIX=24
GATEWAY=64.150.183.1
DNS1=69.64.66.11
DNS2=69.64.66.10
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0:1"
В стабильной я просто добавил эту строку:
NETMASK=255.255.255.0
ifconfig
вывод с нестабильным первым и стабильным после:
eth0:1 Link encap:Ethernet HWaddr 00:26:18:24:4D:xx
inet addr:69.64.93.x Bcast:69.255.255.255 Mask:255.0.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28 Base address:0x6000
eth0:1 Link encap:Ethernet HWaddr 00:26:18:24:4D:xx
inet addr:69.64.93.x Bcast:69.64.93.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Interrupt:28 Base address:0x6000
Проблема, вероятно, в том, что используемый вами IP-адрес сбивает с толку ipcalc, когда он пытается определить NETMASK. Смотрим на сетевые скрипты:
/etc/sysconfig/network-scripts/network-functions:
133 expand_config ()
134 {
135 if [ -z "${NETMASK}" ]; then
136 eval `/bin/ipcalc --netmask ${IPADDR}`
137 fi
138
139 if [ -z "${PREFIX}" ]; then
140 eval `/bin/ipcalc --prefix ${IPADDR} ${NETMASK}`
141 fi
142
143 if [ -z "${BROADCAST}" ]; then
144 eval `/bin/ipcalc --broadcast ${IPADDR} ${NETMASK}`
145 fi
146
147 if [ -z "${NETWORK}" ]; then
148 eval `/bin/ipcalc --network ${IPADDR} ${NETMASK}`
149 fi
150 }
Скажем, вы используете пространство 10.0.0.0, которое технически находится в / 8, если вы передадите это ipcalc:
# /bin/ipcalc --netmask 10.34.102.1
NETMASK=255.0.0.0
Вы можете проверить, была ли это проблема, указав там свой адрес и посмотрев, возвращает ли он значение, которое вы ожидали увидеть как NETMASK. Лично я думаю, что это действительно ошибка в CentOS, кажется, что если NETMASK имеет значение null, но указан PREFIX, он должен использовать это для установки NETMASK.