转:https://blog.csdn.net/xiewen99/article/details/54729112?utm_source=itdadao&utm_medium=referral

IP 别名(IP Alias),辅助ip地址(Secondary IP Address)

IP alias 是由 ifconfig 程序来创建和维护的,而 secondary IP address 则是由 ip 程序来创建和维护的。ip addr add 创建的 secondary IP address 不能在 ifconfig -a 中看到,反过来,ifconfig 创建的 ethX:Y 却能在 ip addr show 中看到。实际上 ifconfig 只是取到第一个匹配的 IP 地址,而 ip addr show 却是完全取。

multi-homing, IP aliasing, Primary address 与 Secondary address 概念辨析

host address: A unique address assigned to a communications device in a computer. If a computer has multiple communications devices (e.g., Ethernet cards or modems), each of these devices will have its own unique address. This means that a host (computer or router) can be multi-homed, i.e., have multiple IP addresses. This can also be artificially created by assigning different IP addresses to the same device (called IP aliasing).

Linux 中为同一个物理网卡增加多个 IP 地址,以前通过 ifconfig 命令来创建和维护 IP alias,而在新的 IPROUTE2 中通过 ip address 命令来创建和维护 Primary address 与 Secondary address。 
* 在每一个接口上可以配置多个 Primary 地址和多个 Secondary 地址。 
* 对一个特定的网络掩码(例子中的网络掩码为/24),只能有一个 Primary 地址。

在路由代码中对许多事件和条件作出响应依赖于 IP 地址为 Primary 地址还是 Secondary 地址。下面给一些例子: 
* Primary addresses contribute to the entropy of the CPU that happens to run the code that applies the configuration. 
* 当删除一个 Primary 地址时,所有相关的 Secondary 地址也被删除。但通过 /proc 可以配置一个选项(net.ipv4.conf.*.promote_secondaries),在当前 Primary 地址被删除时可以将 Secondary 地址提升为 Primary 地址。 
* 当主机为本地生成的流量选择源 IP 地址时,只考虑 Primary 地址。

原理

在 Linux 中,一个网卡可以有多个 IP,那么这多个 IP 有什么关系呢?其实这些 IP 组成了一个吊链结构,所谓吊链结构就是一些节点链接 成一条链,然后每个节点带有自己的一条链,如下图所示:

每个节点代表的 IP 地址标识一个网段,这个节点的 IP 就是这个网段的 Primary 地址,它下面所带的 IP 就是这个网段的 Secondary 地址,也就是说一个网卡可以带有各个节点所带链表长度之和个 IP 地址,而且这些 IP 不是线形的,而是上述的吊链结构。

配置多个 IP 地址时源 IP 的选择

如果一个主机绑定有多个 IP 地址,那么在被动响应和主动发起连接两种方式中,源 IP 地址的选择机制肯定是有所差异的。

主机在接收外部数据包,并发送响应数据包时,响应源地址显然就是客户端请求的地址,这是非常容易理解的,如客户端向主机的 1.1.2.3:80 发起请求,那么主机响应数据包的源 IP 地址一定是 1.1.2.3 。

那么当主机对外主动发起请求时,数据包的源 IP 地址如何选择?

当一个主机创建 IP 数据包时,必须选择正确的源IP地址,这是至关重要的,因为只有源地址正确,才能让接收者正确响应。如果源地址错误,则无法得到对端主机的任何回应。

Linux 2.2 选择源 IP 地址使用以下三种机制:

  1. 应用程序可以通过 bind(2) 系统调用,应用至 sendmsg(2) 调用上,并通过辅助数据对象 IP_PKTINFO ,从而显式指定源 IP 地址。在这种情况下,操作系统内核仅仅检查其源 IP 地址是否正确,否则产生相应的错误。
  2. 如果应用程序没有指定源 IP 地址,包含源 IP 的路由表将决定数据包源 IP 地址,通过设置 ip route 命令的 src 参数,从而指定源 IP 地址。如果路由表没有包含 src 属性,则使用主要 IP 地址。
  3. 其它情况下内核搜寻绑定定数据包路由接口上的 IP 地址, IPv6 选择第一个可用的 IP 地址。 IPv4 情况下,尽量选择与目标 IP 处于同一子网的源 IP ,如果目标 IP 与自己的所有 IP 没有处于同一子网,则使用第二种算法。

默认情况下,如果 Linux 的网卡有多个 IP 且位于不同的子网之中,如果数据包目标地址为某个子网中的 IP, 那么对应的与目标同子网的 IP 将会被使用。如果 eth0 有两个 IP 192.168.1.12/24、10.1.1.1/8,那么到 10.0.0.0 子网的数据包的源地址将使用 10.1.1.1。当然可以使用 ip route 的 src 属性指定源址。

如果绑定的几个 IP 处于同一个子网内,那么主要 IP 地址将被使用(如 eth0 接口上的 IP),也可以使用 iptables 修改数据包的源地址实现之,如:

iptables -t nat -I POSTROUTING -o eth0 -d 1.2.3.4/0 -s 192.168.100.1 -j SNAT --to-source 192.168.100.2
  • 1

Keepalived virtual_ipaddress 是否要配子网掩码

测试结果,添加 10.11.10.19/32 的类型是 Primary,添加 10.11.10.19/23 的类型是 Secondary。但是都没有影响到 Route 源地址。见后。

因此 Keepalived virtual_ipaddress 可不用配子网掩码。配置不带子网掩码的 IP 地址更简单。

测试:

IP Type Route
10.11.10.19/32 Primary None
10.11.10.19/23 Secondary None
10.11.10.19/24 Primary 10.11.10.0/24 dev eth0 proto kernel scope link src 10.11.10.19
# 原 IP 地址是 10.11.10.23/23
# ip -4 -o a s
33: eth0    inet 10.11.10.23/23 brd 10.11.10.1 scope global eth0 # ip route 10.11.10.0/23 dev eth0 proto kernel scope link src 10.11.10.23 169.254.0.0/16 dev eth0 scope link metric 1033 # 添加 IP 地址 10.11.10.19/32 # ip addr add 10.11.10.19 dev eth0 # ip -4 -o a s 33: eth0 inet 10.11.10.23/23 brd 10.11.10.1 scope global eth0 33: eth0 inet 10.11.10.19/32 scope global eth0 # ip route 10.11.10.0/23 dev eth0 proto kernel scope link src 10.11.10.23 # ip addr del 10.11.10.19/32 dev eth0 # 添加 IP 地址 10.11.10.19/24 # ip addr add 10.11.10.19/24 dev eth0 # ip -4 -o a s 33: eth0 inet 10.11.10.23/23 brd 10.11.10.1 scope global eth0 33: eth0 inet 10.11.10.19/24 scope global eth0 # ip route 10.11.10.0/24 dev eth0 proto kernel scope link src 10.11.10.19 10.11.10.0/23 dev eth0 proto kernel scope link src 10.11.10.23 # ip addr del 10.11.10.19/24 dev eth0 # 添加 IP 地址 10.11.10.19/23 # ip addr add 10.11.10.19/23 dev eth0 # ip -4 -o a s 33: eth0 inet 10.11.10.23/23 brd 10.11.10.1 scope global eth0 33: eth0 inet 10.11.10.19/23 scope global secondary eth0 # ip route 10.11.10.0/23 dev eth0 proto kernel scope link src 10.11.10.23 # ip addr del 10.11.10.19/23 dev eth0

转载于:https://www.cnblogs.com/newjiang/p/8757664.html

linux ip别名和辅助ip地址相关推荐

  1. IP 别名和辅助 IP 地址

    概述 IP 别名(IP Alias),辅助ip地址(Secondary IP Address) IP alias 是由 ifconfig 程序来创建和维护的,而 secondary IP addres ...

  2. Heartbeat VIP/IP 与 别名/辅助IP

    转载自:https://www.jianshu.com/p/d9a0a4d82047 真实IP 真实IP又被称为管理IP,一般是配置在物理网卡上的实际IP,这可以看作你本人的姓名,如:张三在负载均衡及 ...

  3. linux给网卡添加一个ip地址,linux网络配置中如何给一块网卡添加多个IP地址

    汤向峰每日一题-2017年3月16日: linux网络配置中如何给一块网卡添加多个IP地址 linux系统给网卡配置VIP的方法常见有两种:别名IP.以及辅助IP ================== ...

  4. Linux学习之CentOS(二十九)--Linux网卡高级命令、IP别名及多网卡绑定

    本篇随笔将详细讲解Linux系统的网卡高级命令.IP别名以及Linux下多网卡绑定的知识 一.网卡高级命令 在之前的一篇随笔里Linux学习之CentOS(九)--Linux系统的网络环境配置,详细讲 ...

  5. linux centos7怎么绑定多ip,003 Linux配置多ip绑定的方法 | ip别名(以CentOS7为例 )

    方式一: 缺点:每一个ip不知道对应那个网络名 1)  vi /etc/sysconfig/network-scripts/ifcfg-default # 有可能你的不是: ifcfg-default ...

  6. linux如何加辅助ip,如何在 Ubuntu 系统中添加一个辅助 IP 地址

    Linux 管理员应该意识到这一点,因为这是一项例行任务.很多人想知道为什么我们需要在服务器中添加多个 IP 地址,以及为什么我们需要将它添加到单块网卡中?我说的对吗? 你可能也会有类似的问题:在 L ...

  7. linux 辅助ip地址到文本,技术|如何在 Ubuntu 系统中添加一个辅助 IP 地址

    Linux 管理员应该意识到这一点,因为这是一项例行任务.很多人想知道为什么我们需要在服务器中添加多个 IP 地址,以及为什么我们需要将它添加到单块网卡中?我说的对吗? 你可能也会有类似的问题:在 L ...

  8. linux系统子接口配置文件,Linux网卡绑定、子接口-IP别名

    查看网卡线缆状态: mii-tool eth0 查看网卡底层信息: ethtool eth0 ethtool -i eth0   查看网卡驱动信息 ethtool -S eth0  查看网卡状态统计信 ...

  9. LINUX如何配置IP别名

    何谓ip别名? 用windows的话说,就是为一个网卡配置多个ip. 一.首先为服务器网卡配置静态ip地址 #ifconfig eth0 192.168.6.99 netmask 255.255.25 ...

最新文章

  1. 语义网所谓的“本体”的具体例子是什么?人工智能
  2. nodejs 改变全局前缀
  3. pop客户机程序流程图_基于.NET的在线考试系统的设计与实现
  4. vb检测html事件,VB代码VB小程序:捕获 WebBrowser 控件的鼠标事件
  5. opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别
  6. 《RabbitMQ 实战指南》第四章 RabbitMQ进阶(上)
  7. 用Python看蜜雪冰城店铺在哪个省份最多~
  8. java对unicode转码,Unicode编码和中文互转(JAVA实现)
  9. (九)洞悉linux下的Netfilteriptables:网络地址转换原理之DNAT
  10. Vue导出office模板文件(xdoc在Vue中的使用)
  11. 朗途职业规划之二 基本分析报告 (北森测评)
  12. JDK和JRE的区别和联系
  13. 限流算法: 漏桶算法和令牌桶算法
  14. Java服务器处理图片上传
  15. 晓之以理,不如动之以情——新书《以大致胜》解读(上篇)
  16. 鸿蒙系统的理解,我所理解的鸿蒙系统
  17. win7安全模式计算机管理在哪里,win7安全模式怎么进
  18. 以太坊链上的二层(layer2)扩容方案Matic(Polygon)
  19. 数据库同步利器 otter 双A同步配置
  20. 用Windows自带工具给U盘4k对齐

热门文章

  1. kmdjs api reference
  2. 一步一步教你写淡入淡出带注释的图片轮播插件(一)
  3. 如何零基础或者转行数据分析师?
  4. matlab kill
  5. Question for recommendation system, which is a baseline
  6. 2017苏州太湖国际马拉松 半程成绩单
  7. Redux之compose
  8. 【Java基本功】一文读懂String及其包装类的实现原理
  9. 简单案例:unittest+HTMLTestRunner实现生成测试报告
  10. linux下根据进程查找文件启动文件