PREFIX 与 NETMASK

Clo*_*ldo 7 networking linux-networking

我确实在 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"
Run Code Online (Sandbox Code Playgroud)

在稳定版中,我刚刚添加了这一行:

NETMASK=255.255.255.0
Run Code Online (Sandbox Code Playgroud)

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 
Run Code Online (Sandbox Code Playgroud)

pol*_*ial 5

问题可能是您使用的 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 }
Run Code Online (Sandbox Code Playgroud)

因此,假设您使用的是技术上在 /8 中的 10.0.0.0 空间,如果您将其提供给 ipcalc:

# /bin/ipcalc --netmask 10.34.102.1 
NETMASK=255.0.0.0
Run Code Online (Sandbox Code Playgroud)

您可以通过将您的地址放在那里并查看它是否返回您希望看到的 NETMASK 值来测试这是否是问题。就个人而言,我认为这确实是 CentOS 中的一个错误,似乎如果 NETMASK 为空但指定了 PREFIX,则应该使用它来设置 NETMASK。