热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ifconfig陷阱

primaryip的定义也可以在这个地方看下:http:blog.chinaunix.netu32831showart_1824133.htmlM:1.某张网卡上第一
primary ip的定义也可以在这个地方看下:

http://blog.chinaunix.net/u/32831/showart_1824133.html





M:
1. 某张网卡上第一次配置的ip叫做其primary ip 。   这个定义有点不准确, 更准确的说法是: 某张网卡上第一次配置的某个子网的ip 是这张网卡的primary ip(后面在这张网卡上再配置相同子网的另外的ip, 就都是secondary ip了).  这也意味着一张网卡可以有多个primary ip。  
2. down掉所属某个子网的primary ip的时候, 所有相关的secondary ip也会down掉。  这个可以通过设置一个内核参数, 当primary ip宕掉时可以将secondary ip提升为primary ip。
echo "1" > /proc/sys/net/ipv4/conf/ethX/promote_secondaries


Q:
1、primary 与 secondary定义范围。这两个词语专门是指同一机器上同一网络接口上同一网段IP之间关系叫做primary 和 secondary。 
2、一个接口上面统一网段多个IP,第一个起来的IP一般设置为primary ip;同一网络接口可以存在多个primary ip。
3、同一接口配置多个IP处理binary这里提到的可能遇到的问题之外;还有可能出现机器在主动对外访问时候,请求的源IP就是primary IP,这里在内网上同一接口多IP这样可能对监控上面会造成影响。
4、关于iproute 和 net-tools工具。
    4.1、大部分场合对我们运维操作是没有区别的,iproute本来就是net-tools的下一代;
    4.2、iproute使用的netlink接口,net-tools使用的ioctl系统调用;
    4.3、primary 和 secondary 可以直接使用ip addr list看到,ifconfig是不能的;(另外Linux的策略路由是只有iproute工具才支持的)
5、一般我们不建议是用 ifconfig X down命令,其实使用ifconfig X 0大部分可以保证我们的需求


M: 
既然提到了, 再发一个这方面的问题: 假如本机为客户端, 本机的eth0上有一个primary ip 和 secondary ip, 一般情况下, 请求的src ip使用的是primary ip, 但是如果请求数过多(超过了/proc/sys/net/ipv4/ip_local_port_range的范围), 这个src ip会使用secondary ip么?  或者是报错: 本地端口不足? 
另外, 对于
3、同一接口配置多个IP处理binary这里提到的可能遇到的问题之外;还有可能出现机器在主动对外访问时候,请求的源IP就是primary IP,这里在内网上同一接口多IP这样可能对监控上面会造成影响。
可以使用 ip命令的src选项, 来强制内核使用某个secondary ip来作为src ip。 如
ip route add default via 209.100.100.254 src 209.100.100.3 dev eth0,  其中209.100.100.254为网关, src 209.100.100.3为secondary ip。

5、一般我们不建议是用 ifconfig X down命令,其实使用ifconfig X 0大部分可以保证我们的需求。
Ifconfig X down  / ifconfig X 0的区别, 从字面上其实就可以看出, 第一个是把这个X网卡down掉, 亦即用ethtool看到的这个网卡的连接状态为no, 但是实际上在内核中配置在该网卡上的ip信息还是存在, 所以用这个命令之后在本机ping 这个网卡配置的ip地址, 还是能ping通。  Ifconfig X 0, 是把这个网卡配置的ip信息“清零”, 但是这个网卡的连接状态还是为yes, 既然ip已经清零, 当然ping不通。  至于到底用哪个, 各取所需吧,关键还是要牢记primary ip宕掉(包括ifconfig ethx down/ifconfig ethx 0)之后, 其对应的secondary ip也会宕掉。

Q: 
既然提到了, 再发一个这方面的问题: 假如本机为客户端, 本机的eth0上有一个primary ip 和 secondary ip, 一般情况下, 请求的src ip使用的是primary ip, 但是如果请求数过多(超过了/proc/sys/net/ipv4/ip_local_port_range的范围), 这个src ip会使用secondary ip么?  或者是报错: 本地端口不足? 
关于这个问题我是这么分析。端口分配是应用层请求建立socket过程中需要使用的,src ip是在ip选路过程中决定的;两者关联不大,应该报错本地端口不足。(建议可以测试一下)
 
ip route add default via 209.100.100.254 src 209.100.100.3 dev eth0,  其中209.100.100.254为网关, src 209.100.100.3为secondary ip。 
这个命令就是一个策略路由。(策略路由与一般路由的区别的就是路由计算的时候加入了源IP的信息。)





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

推荐阅读
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在配置Nginx的SSL证书后,虽然HTTPS访问能够正常工作,但HTTP请求却会遇到400错误。本文详细解析了这一问题,并提供了Nginx配置的具体示例。此外,还深入探讨了DNS服务器证书、SSL证书的申请与安装流程,以及域名注册、查询方法和CDN加速技术的应用,帮助读者全面了解相关技术细节。 ... [详细]
  • 基于Linux系统的Kickstart自动化服务器部署方案
    本文针对企业需求,提出了一种基于Linux系统的Kickstart自动化服务器部署方案。该方案旨在通过无盘批量安装操作系统,提高企业IT基础设施的部署效率。Kickstart是一种利用Anaconda工具实现服务器自动化安装的技术,能够显著简化和加速操作系统的安装过程。通过详细的实施规划,本文介绍了Kickstart的工作原理及其在实际部署中的应用,为企业提供了高效的自动化部署解决方案。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
author-avatar
殇者残雪_270
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有