×

如何躲避ifconfig 陷阱

hqy hqy 发表于2019-04-13 16:56:52 浏览2079 评论0

抢沙发发表评论

  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 成功, 不需要添加路由规则


打赏

本文链接:https://www.kinber.cn/post/566.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客