qrasvasdf
分类: LINUX
2015-05-20 14:14:41
ifconfig 陷阱
1. 理解primary ip
某张网卡上第一次配置的ip叫做其primary ip。 如果primary ip被清空, 该网卡上面配置的其他ip也会被自动清空。
这里有几个关键点: a) 配置在ethX上的不一定是primary ip, 所以ifconfig ethX down 会把这个物理网卡的连接断掉, 但是其上的ip地址还是保留在内核上的。
b) 配置在ethX:n上的可以是primary ip, 如果是这种情况, ifconfig ethX:n down不但会把ethX:n 清空掉, ethX上的IP也会被清空掉, 但是ethX状态是连接的, ifconfig也会看到其是RUNNING和UP的。
c) 本机主动发起请求的数据包, 使用的源地址, 就是primary ip, 使用ip route get 58.63.236.28可以看到走出去的包是通过哪个网卡和使用的源地址(其中58.63.236.28是要访问的目的地址)
d) 如何知道网卡上的primary ip是哪个? 使用ip addr show! 因为eth0上的不一定是primary ip, 或者多哥ethX:n中, n最小的那个也不一定是primary ip。
牢记, 在上一次该网卡上的IP地址清空之后, 第一次配置在该网卡上的IP叫做该网卡的primary ip。 primary ip可以配置在ethX上, 也可以配置在ethX:n上, 跟ethX:n的数值顺序无关。
2. 清空某个网卡行绑定的IP
a) 如果primary ip是配置在ethX上, ethX:n有配置的其他IP地址, 这个时候使用ifconfig ethX down会把网卡同机器的连接断掉(ethtool ethX会看到连接状态为no),但是在内核中, ip的配置信息还是会存在(使用ipconfig -a看), 但是路由规则已经清空。 如果用ifconfig ethX up的话, 需要手动增加丢失的路由规则(比如说默认路由, 如果有的话)
b) 如果primary ip是配置在ethX上, ethX:n有配置的其他IP地址, 这个时候使用ifconfig ethX 0, 会把ethX/ethX:n的IP都清掉, 而且在内核中也不会保留相关的IP配置信息, 路由规则已经清空。 不过ethX同机器的连接状态还是yes, ifconfig看到ethX的状态还是UP和RUNNING的。
c) 如果primary ip是配置在ethX上, ethX:n有配置的其他IP地址, 这个时候使用ifconfig ethX 0 down, 会把ethX/ethX:n的IP都清掉, 而且在内核中也不会保留相关的IP配置信息, 路由规则已经清空。 ethX同机器的连接状态是no, ifconfig看到ethX的状态没有UP和RUNNING了。
b) 如果primary ip配置在ethX:n上, ethX上也有配置其他的IP, 使用ifconfig ethX:n down, 会把ethX/ethX:n上的其他IP也清掉(同时内核也不会保存之前配置好的IP信息了), 但是ethX还是RUNNING和UP的, ethX网卡跟机器的连接状态是yes
c) 如果primary ip配置在ethX:n上, ethX上也有配置其他的IP, 使用ifconfig ethX:n 0/ifconfig ethX:n 0 down会报错, 但是目的也会达到 — 会把ethX/ethX:n上的其他IP也清掉(同时内核也不会保存之前配置好的IP信息了), 但是ethX还是RUNNING和UP的, ethX网卡跟机器的连接状态是yes
3. 关于路由
a) 如果primary ip清空掉了, 相关网卡的路由也会在内核中被清空
b) IP配置好之后, 系统会自动添加一条相关IP所在子网的路由规则, 如果有其他需要, 要手工配置。 所以有时候ifconfig ethX up 了, 发现还是不能通信, 可能是路由规则的问题
4. 网卡是否up, 跟ethX:n无关, 只跟ethX有关。 如果网卡不是up的, 使用ifconfig ethX:n xxx.xxx.xxx.xxx up, 也不能把这个网卡up. 所以不打算在ethX上配置IP而在ethX:n上配置IP时, 要保证ethX是up的。 不然配上去了也没有用
5. 为什么说要用ip命令替代掉传统的ifconfig工具
实验:
场景1(eth0是在eth0:n之后被配置的):
/etc/init.d/network restart ; ifconfig eth0 119.147.14.133 netmask 255.255.255.128 ;
ifconfig eth0:0 down ;
表象: eth0上的IP被清空, 但是状态是up和running, 连接状态为yes; 路由表中关于eth0的被清空; eth0:0/eth0:1都被清掉了
ifconfig eth0:0 0 down;
表象: eth0上的IP被清空, 但是状态是up和running, 连接状态为yes; 路由表中关于eth0的被清空; eth0:0/eth0:1都被清掉了
ifconfig eth0:0 0
表象: eth0上的IP被清空, 但是状态是up和running, 连接状态为yes; 路由表中关于eth0的被清空; eth0:0/eth0:1都被清掉了
场景2(eth0是在eth0:n之后被配置的):
/etc/init.d/network restart ; ifconfig eth0 119.147.14.133 netmask 255.255.255.128 ;
ifconfig eth0:1 down ;
表象: eth0和eth0:0完好, 路由表正常。 eth0:1清掉了。
ifconfig eth0:1 0 down ;
表象: eth0和eth0:0完好, 路由表正常。 eth0:1清掉了。
ifconfig eth0:1 0 ;
表象: eth0和eth0:0完好, 路由表正常。 eth0:1清掉了。
场景3(eth0是在eth0:n之前被配置的):
/etc/init.d/network restart ; ifconfig eth0:0 down; ifconfig eth0 119.147.14.133 netmask 255.255.255.128 ; ifconfig eth0:0 119.147.14.164 netmask 255.255.255.128 ; ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128; route add default gw 119.147.14.129;
ifconfig eth0:0 down ;
表象: eth0和eth0:1都完好, 关于eth0口的路由表也都正常; eth0:0清掉了;
场景4(eth0是在eth0:n之前被配置的):
/etc/init.d/network restart ; ifconfig eth0:0 down; ifconfig eth0 119.147.14.133 netmask 255.255.255.128 ; ifconfig eth0:0 119.147.14.164 netmask 255.255.255.128 ; ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128; route add default gw 119.147.14.129;
ifconfig eth0:1 down ;
表象: eth0和eth0:0都完好, 关于eth0口的路由表也都正常; eth0:1清掉了;
场景5(eth0是在eth0:n之后被配置的):
/etc/init.d/network restart ; ifconfig eth0:0 down; ifconfig eth0:0 119.147.14.164 netmask 255.255.255.128 ; ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128; route add default gw 119.147.14.129; ifconfig eth0 119.147.14.133 netmask 255.255.255.128
ifconfig eth0:0 down;
表象: eth0上的IP被清空, 但是状态是up和running, 连接状态为yes; 路由表中关于eth0的被清空; eth0:0/eth0:1都被清掉了
场景6(eth0是在eth0:n之后被配置的):
/etc/init.d/network restart ; ifconfig eth0:0 down; ifconfig eth0:0 119.147.14.164 netmask 255.255.255.128 ; ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128; route add default gw 119.147.14.129; ifconfig eth0 119.147.14.133 netmask 255.255.255.128
ifconfig eth0:1 down;
表象: eth0和eth0:0都完好, 关于eth0口的路由表也都正常; eth0:1清掉了;
ifconfig在做别名的时候发现
ifconfig
eth0 无IP eth0:0/eth0:1有ip ifconfig eth0 down, 内核会保留eth0:0/eth0:1的ip, 下次ifconfig eth0 up, 这两个子网卡还存在, ip依旧
eth0 有IP eth0:0/eth0:1有ip ifconfig eth0 down, 内核会保留eth0/eth0:0/eth0:1的ip, 下次ifconfig eth0 up, 这两个子网卡还存在, ip依旧
eth0 有IP eth0:0/eth0:1有ip ifconfig eth0 0 down, 内核不会保留eth0/eth0:0/eth0:1的ip
eth0 有IP eth0:0/eth0:1有ip ifconfig eth0:0 down, 也会把eth0:1的ip干掉, 内核不会保留eth0:0/eth0:1的ip
ifconfig eth0 down
1. 网卡已经当掉(ethtool eth0看到连接状态为off)
2. ifconfig -a 可以看到ip配置信息(包括eth0:n上的)还是在的, 但是没有UP和RUNNING的标志。
3. 路由规则: 此时针对该网卡(eth0)的路由规则也已经冲掉了,
4. 再次ifconfig eth0 up的时候, 虽然ip信息已经添加到该网卡, 而且该网卡也是UP和RUNNING状态, 但是不能与外界通信, 因为没有对应的路由规则(会有一条针对该网段的路由规则自动添加)
5. 添加好路由规则, 能够通信了
ifconfig eth0 0 down
1. 这样会先把 eth0 及其子网卡上的ip都冲掉, 然后再当掉网卡(此时ethtool eth0看到的连接状态是off),
2. ifconfig -a 可以看到eth0的状态已经没有UP和RUNNING了, ip信息也不见了, eth0:n也不见了
3. 路由规则: 此时针对该网卡(eth0)的路由规则也已经冲掉了
4. 再次ifconfig eth0 up, eth0状态为UP, 但是木有RUNNING, 因为ip配置信息没有了。 eth0:n无, 对应的路由规则也无
5. ifconfig eth0 xxxx 配置上IP, 状态为RUNNING, 自动添加一条对应的该网段的路由规则。 手动添加默认路由规则
ifconfig eth0 0
1. eth0的ip信息没了, 但是状态连接状态为on(ethtool eth0), ifconfig可以看到其为RUNNING和UP。 子网卡信息全无
2. ifconfig -a 看到的信息同ifconfig
3. 路由规则: 此时针对该网卡(eth0)的路由规则也已经冲掉了
4. 再次ifconfig eth0 up, 各项信息不变
5. ifconfig eth0 xxxx 配置上IP, 状态为RUNNING, 自动添加一条对应的该网段的路由规则。 手动添加默认路由规则
ifconfig eth0:1 down
1. eth0的ip信息在, eth0:1的不在了, 路由规则正常, eth0的连接状态为on
2. ifconfig -a 看到的信息同上
3. 路由规则: 不变
4. ifconfig eth0:1 up 返回错误“SIOCSIFFLAGS: Cannot assign requested address”
5. ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128 成功, 不需要添加路由规则
ifconfig eth0:1 0 down
返回“SIOCSIFFLAGS: Cannot assign requested address
SIOCSIFFLAGS: Cannot assign requested address” 错误
1. eth0的ip信息在, eth0:1的不在了, 路由规则正常, eth0的连接状态为on
2. ifconfig -a 看到的信息同上
3. 路由规则: 不变
4. ifconfig eth0:1 up 返回错误“SIOCSIFFLAGS: Cannot assign requested address”
5. ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128 成功, 不需要添加路由规则
ifconfig eth0:1 0
返回“SIOCSIFFLAGS: Cannot assign requested address”
1. eth0的ip信息在, eth0:1的不在了, 路由规则正常, eth0的连接状态为on
2. ifconfig -a 看到的信息同上
3. 路由规则: 不变
4. ifconfig eth0:1 up 返回错误“SIOCSIFFLAGS: Cannot assign requested address”
5. ifconfig eth0:1 119.147.14.193 netmask 255.255.255.128 成功, 不需要添加路由规则