1. 程式人生 > >IP 別名和輔助 IP 地址

IP 別名和輔助 IP 地址

概述

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 地址標識一個網段,這個節點的 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

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

參考

.eof.

相關推薦

IP 別名輔助 IP 地址

概述 IP 別名(IP Alias),輔助ip地址(Secondary IP Address) IP alias 是由 ifconfig 程式來建立和維護的,而 secondary IP address 則是由 ip 程式來建立和維護的。ip addr ad

根據計算機名獲得IP根據IP獲得主機名(轉)

Option Explicit'// define constantsPrivate Const IP_SUCCESS As Long = 0Private Const SOCKET_ERROR As Long = -1Private Const MAX_WSADescrip

Ubuntu配置修改IP地址

ren from var address can gen pen -name get http://blog.csdn.net/readiay/article/details/50866709 Ubuntu配置和修改IP地址 1、修改配置文件/etc/network/i

python判斷合法IP並區分內網外網地址

內網 xtran 3.4 for imp app lse -s mat import redef legit_ip(_ip): compile_ip = re.compile(‘^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5

Windows如何設定動態靜態ip地址

開啟控制面板,一般在電腦的選單欄能找到,win8和win10可以使用快捷鍵(win鍵+X鍵),找不到的朋友可以搜尋一下。   進入到網路和共享中心,點選更改介面卡設定。

DEVOPS 運維開發系列八:高效管控網際網路頻寬公網IP地址資源的新姿勢

事件背景 無論我們使用IDC資料中心、私有云或公有云,網際網路頻寬無疑都是我們會使用到的一類重要資源。一般來說,每段頻寬資源還會附帶提供若干公網IP地址資源,當然了“朱門(美國)酒肉臭,路有凍死骨”呀!咱們國內在使用公網IP時是按個算的,有錢人家是按段算的,曾見過有人在美國拉了一條網際網

DHCP動態配置ip地址指定ip地址

實驗準備及目標 1.兩臺虛擬機器 2.服務端IP:192.168.1.1 3.客戶端IP:動態+指定IP:192.168.1.88 服務端 1.DHCP軟體安裝 在軟體安裝包下: rpm -ivh dhcp-4.1.1-38.P1.el6.x86_64.rpm

35.3 Ubuntu配置修改IP地址

1、修改配置檔案/etc/network/interfaces[email protected]:~# sudo gedit /etc/network/interfaces 新增以下內容:auto eth0                  #設定自動啟動

SSG5簡易配置命令及忘記登入密碼裝置ip地址 的方法

2、  ssg5-serial-> set admin name                XXX            //設定登入使用者名稱 3、  ssg5-serial-> set admin password  ***    //設定登入密碼 4、  ssg5-serial-

USG5500 配置地址easy-ip雙出口NAT

一、組網需求: 1、某公司購買了兩個運營商的公網IP,使公司內部使用者能夠通過NAT訪問網際網路。但是向A運營商只購買一個公網IP,所以想配置為easy-ip的NAT模式。向B運營商購買了6公網IP(202.202.202.1-202.202.202.6),所有想配置為NAT地址池模式。

centos7 臨時修改,增加刪除ip地址的方式

1.臨時修改ip地址,ifconfig 網絡卡名稱 ip地址(重啟失效) 命令: ifconfig ens33 192.168.1.110 2.多個臨時ip,ifconfig 網絡卡名:0 第一個ip 命令: ifconfig ens33:

如何計算一個網段的子網掩碼,網路ID,廣播地址可用IP地址

1.判斷兩個IP在不在一個網段,主要看這兩個IP的網路ID,如果網路ID相同則這兩個IP在同一網段示例:判斷192.168.0.11/26 和 192.168.0.111/26在不在同一網段首先計算兩個IP的網路ID:192.168.0.11/26  子網掩碼(2進製表示):

iOS開發 獲取公網IP區域網IP地址

//獲取公網IP非區域網IP 直接訪問此網址 NSString *url = @"http://ip.taobao.com/service/getIpInfo.php?ip=myip"; 網址返回的J

【方法】lwip-2.0.2配置DHCP自動從路由器獲取IP地址DNS伺服器地址, 並設定NetBIOS計算機名

本文使用是STM32F107VC微控制器的有線乙太網外設ETH和DP83848外部PHY收發器。 如果使用的是Keil uVision5的編譯器,需要檢查一下lwip/include/arch/cc.h裡面是否有下面這一行: #define PACK_STRUCT_BE

【基本網路概念之三】IP、TCPUDP IP地址域名 埠

IP、TCP和UDP   java支援的協議只有TCP和UDP,以及建立在TCP和UDP之上的應用層協議。所有其他傳輸層、網際層和更底層的協議,如ICMP、IGMP、ARP和其他協議在java程式中都只能通過連結到原生程式碼來實現。 IP地址和域名   I

MFC檢測網路連線ping IP地址

/****************************************************************** * 函式介紹:執行程式 * 輸入引數: * 輸出引數: * 返回

一篇講組播MAC各類IP地址的文章

MAC地址是乙太網二層使用的一個48bit(6位元組十六進位制數)的地址,用來標識裝置位置。MAC地址分成兩部分,前24位是組織唯一識別符號(OUI, Organizationally unique identifier),後24位由廠商自行分配。     MAC地址有單播、組播、廣播之分。單播地址(uni

【TCP/IPIP地址分類特殊IP地址

IP地址是因特網技術中的一個非常重要的概念,IP地址在IP層實現了底層網路地址的統一,使因特網的網路層地址具有全域性唯一性和一致性。IP地址含有位置資訊,反映了主機的網路連線,使因特網進行定址和路由選擇的依據。IP地址概述地址是標識物件所處位置的識別符號。傳輸中的資訊帶有源地

組播MAC地址各類IP地址

MAC地址是乙太網二層使用的一個48bit(6位元組十六進位制數)的地址,用來標識裝置位置。MAC地址分成兩部分,前24位是組織唯一識別符號(OUI, Organizationally unique identifier),後24位由廠商自行分配。     MAC地址有單

vue+axios 開發環境與生產環境配置請求介面,本地開發線上開發有多個請求地址怎麼處理?上線後自動獲取ip,不需改請求地址可運用多個專案中

1. 配置本地開發環境介面: 進入到專案目錄config檔案中index.js ;當頁面有多個不同地址時此可以重定向,下圖中會出現報錯的就是路徑問題, 建立所有httpUrl介面請求。舉例後臺請求地址為:192.168.11.12:80/omc/login  ,第一個