我确实在 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
答案1
问题可能是您使用的 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 为空但指定了 PREFIX,它应该使用它来设置 NETMASK。