我有一个子接口的Centos 5盒子:
ifconfig eth0 10.1.1.1 255.255.255.255 ifconfig eth0:1 10.1.1.2 255.255.255.255
在这个服务器所在的环境中,networking掩码需要为32位。因此,为了指定默认路由,我们让服务器知道网关在哪里,然后默认路由到它:
Destination Gateway Genmask Flags MSS Window irtt Iface 10.1.1.10 0.0.0.0 255.255.255.255 UH 0 0 0 eth0 0.0.0.0 10.1.1.10 0.0.0.0 UG 0 0 0 eth0
因此,10.1.1.10是默认网关,它是出接口eth0
但是,所有离开服务器的数据包都具有与eth0:1相关联的IP地址。 他们需要在eth0上拥有IP。
路由在route-eth0中定义:
10.1.1.10/32 dev eth0 default via 10.1.1.10
我曾尝试在ifcfg-eth0中强制使用GATEWAY和SRCADDR:
DEVICE=eth0 BOOTPROTO=static ONBOOT=yes IPADDR=10.1.1.1 SRCADDR=10.1.1.1 NETMASK=255.255.255.255 GATEWAY=10.1.1.10
在ifcfg-eth0:1中没有定义网关:
DEVICE=eth0:1 IPADDR=10.1.1.2 NETMASK=
eth0 IP地址是用于/ etc / hosts中fqdn的地址。 如果我ping的fqdn,我得到eth0的IP地址。
有人可以让我知道如何强制传出数据包使用绑定到eth0的IP而不是绑定到eth0:1的IP作为源IP。
在ifcfg-eth0:1文件中没有设置networking掩码将使Linux默认为255.0.0.0,因为它是传统类A,并且能够到达该子接口上的网关。
对于eth0上的IP,您至less需要一个/ 28前缀掩码才能与默认网关位于同一个子网中(对于您使用.10网关描述的scheme)。 将eth0的networking掩码更改为255.255.255.240,查看是否可以ping默认网关,然后可以将任何其他IP地址添加到具有/ 32前缀(255.255.255.255)的设备,而没有任何问题。
正如问题所述,访问默认网关的方法不是通过广播域,每个IP地址应该只有主机,所以有一个32位掩码。
访问网关是通过两个静态路由条目。 第一个是描述网关不在的接口的主机路由,第二个是将缺省路由定义为该网关。
如果您明确了网关在路由表中的位置,则不需要less于32位的networking掩码。
这里的问题是没有为子接口指定networking掩码,因此默认为/ 24。 这意味着虽然eth0接口是32位,并且实际上没有连接到IPnetworking,但是eth0:1接口在10.1.1.0/24中,因此连接到网关IP驻留的networking的接口。 连接的接口路由优先于静态路由,因此被选为源IP地址。
正如问题所述,掩码需要是32位的行为是所需的,所以答案是将networking掩码更改为32位的子接口。 一旦发生这种情况,唯一可用的路由就是默认的路由,到自己定义的主机路由的网关。
对于那些不熟悉为什么使用这个设置的人来说,它被用于需要IP地址分配和保护的灵活性的地方。 没有必要用这种方法将地址空间分割成子网,尽pipe它带有pipe理开销。 如上所述,环境不在提问者的控制之下。