1. 程式人生 > >配置多個ip地址時源ip的選擇

配置多個ip地址時源ip的選擇

原文連結:http://zhangxugg-163-com.iteye.com/blog/1669810

如果一個主機繫結有多個 IP地址,那麼在被動響應和主動發起連線兩種方式中,源 IP 地址的選擇機制肯定是有所差異的。

主機在接收外部資料包,併發送響應資料包時,響應源地址顯然就是客戶端的目標地址,這是非常容易理解的,如客戶端向主機的1.1.2.3:80 發起請求,那麼主機響應資料包的源 IP 地址一定是 1.1.2.3 。

那麼當主機對外主動發起請求時,資料包的源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 沒有處於同一子網,則使用第二種演算法。

相應的參照文章:

http://linux-ip.net/gl/ip-cref/node155.html

http://serverfault.com/questions/12285/when-ip-aliasing-how-does-the-os-determine-which-ip-address-will-be-used-as-sour

預設情況下,如果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

原理分析及處理辦法我們已經分析完畢,接下來使用實際的例子展示

Linux 主機繫結有以處幾個 IP (閘道器為 192.168.0.1 ) eth0 192.168.0.250/24,  eth0: 1  192.168.0.22/24,   eth0:2 192.168.0.23/24

另外,繫結多個IP 可使用 ip addr add 命令,不產生子介面。

在上述案例中192.168.0.250 將成為預設主要 IP 。

目標:當此主機對外發起新連線時,源IP 地址使用 192.168.0.22,  不使用預設的 192.168.0.250 。

方法:修改路由表的源IP 屬性 一.  檢視系統的 ip 地址及路由表詳細資訊 ( 加粗字型是輸入的內容 ) [[email protected] ~]#  ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet 192.168.100.250/32 scope global lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000

    link/ether f4:6d:04:76:ca:98 brd ff:ff:ff:ff:ff:ff

    inet 192.168.0.250/24 brd 192.168.0.255 scope global eth0

    inet 172.16.25.1/24 scope global eth0

    inet 192.168.0.22/24 scope global secondary eth0

    inet 192.168.0.23/24 scope global secondary eth0

請注意 192.168.0.250 是 global 狀態,而其它地址是 secondary 狀態。

[[email protected] ~]#  ip route

192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.250 

172.16.25.0/24 dev eth0  proto kernel  scope link  src 172.16.25.1 

169.254.0.0/16 dev eth0  scope link 

default via 192.168.0.1 dev eth0 

注意以上輸出,會發現到同一子網的路由的源IP 地址會使用主要 IP 地址。而到預設閘道器的路由沒有指定源 IP(實際上會用與網關同一子網的主要 IP )。

修改路由表,讓系統使用指定IP(192.168.0.22) 作為源址: [[email protected] ~]#  ip route change default dev eth0 src 192.168.0.22

[[email protected] ~]#  ip route change to 192.168.0.0/24 dev eth0 src 192.168.0.22

[[email protected] ~]#  ip route

192.168.0.0/24 dev eth0  scope link  src 192.168.0.22 

172.16.25.0/24 dev eth0  proto kernel  scope link  src 172.16.25.1 

169.254.0.0/16 dev eth0  scope link 

default dev eth0  scope link  src 192.168.0.22 

通過最後的輸出,我們發現修改生效,然後使用其它主機實際測試一下。如果有任何疑惑,請聯絡[email protected] 。

另外還有一種方式,使用iptables 修改源 IP 地址:

iptables -t nat -I POSTROUTING -o eth0 -d  0.0.0.0 /0 -s 192.168.0. 250  -j SNAT --to-source 192.168. 0.22

經過實驗,測試也通過,顯然修改路由表的方式要更好一些。

相關推薦

配置ip地址ip選擇

原文連結:http://zhangxugg-163-com.iteye.com/blog/1669810 如果一個主機繫結有多個 IP地址,那麼在被動響應和主動發起連線兩種方式中,源 IP 地址的選擇機制肯定是有所差異的。 主機在接收外部資料包,併發送響應資料包時

centos 7 配置IP地址

centos 7 配置多個IP地址 #開啟網路配置檔案 cd /etc/sysconfig/network-scripts/ vim ifcfg-eno167 找到IPADDR的位置,在下面再增加需要的地址(紅色部分): IPADDR="192.168.8.4" PREFIX="24"

linux 作業系統配置IP地址的方法

前提:系統已具有一個IP地址。 切換到root使用者。 切換目錄: cd /etc/sysconfig/network-scripts/  使用cp命令複製一個ifcfg-eth0的檔案,新的檔名為ifcfg-eth0:0 ,然後用vi編輯此檔案。具體操作如圖所示:

linux環境下單網絡卡配置IP地址

即時生效: ifconfig eth0 192.168.1.102 netmask 255.255.255.0 啟動生效: vim /etc/sysconfig/network-scripts/ifcfg-eth0 加入 IPADDR=192.168.1.102 NETMASK=255.255.255.0 修

在linux下面虛擬塊網絡卡,在一塊物理網絡卡上配置IP地址

1.首先,我們來配置多塊虛擬網絡卡 將一個物理網絡卡,虛擬多個網絡卡使用方法,在這塊網絡卡上配置同一個段的ip地址: 比如將em2這塊物理網絡卡(該網絡卡的ip地址192.168.100.10/24)配置成多塊網絡卡的命令:  ifconfig em2:1 192.16

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

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

redis 配置ip 解決方案

配置ip 我想 外網 password In fire firewall 訪問 all 因為在 redis 中bind 指定的ip 其實為同一網段或localhost 監聽ip,在這裏配置 內網其他網段或者外網多個ip 後 重啟 redis 是不會成功的,

Nginx-一個IP配置站點

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Nginx 單IP配置server https 啟示錄

今天重新整合https時,出現在瀏覽器用  htttp能訪問  https訪問不了的情況 nginx的配置如下:     #其他服務匹配     server {         listen       4080;listen       443 ssl;        

linux下一個網絡卡配置ip【虛擬ip

Linux下配置網絡卡ip別名何謂ip別名?用windows的話說,就是為一個網絡卡配置多個ip。什麼場合增加ip別名能派上用場?佈網需要、多ip訪問測試、特定軟體對多ip的需要...and so on.下面通過幾個例子簡單介紹一下如何使用ifconfig命令給網絡卡配置

連線windows系統的IP地址選擇策略

原文地址:http://blogs.technet.com/b/networking/archive/2009/04/24/source-ip-address-selection-on-a-multi-homed-windows-computer.aspx 下面只是其中翻譯

關於linux Centos 7一個網絡卡配置IP的方法

[[email protected]5201351 ~]# ip addr show eno16777736 2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP ql

單網絡卡配置IP

使用一個網絡卡配置多個IP地址 一、Linux作業系統 1、永久配置 [[email protected]_web network-scripts]# cd /etc/sysconfig/network-scripts [[email protected]_web network-

Tomcat下配置javaWeb,一個IP繫結域名

本文以繫結3個javaWeb專案為例,講述一個IP地址繫結3個個域名: (1)首先準備好3個javaWeb的war包; (2)在Tomcat下建立3個不同名稱的資料夾,如webapps、webapps

linux下一個網絡卡配置IP

文字控制檯下面有netconfig,還有ifconfig工具,netconfig圖形化的稍微方便些,但是沒有文件,配置一個ip還能應付,但是如果配置多個IP就搞不定了,只能使用ifconfig   #ifconfig eth0 192.168.0.1 netmask 255.

DNS反射放大攻擊分析——DNS反射放大攻擊主要是利用DNS回復包比請求包大的特點,放大流量,偽造請求包的IP地址為受害者IP,將應答包的流量引入受害的服務器

返回結果 關閉 class 肉雞 使用 dns服務 能夠 設置 .org DNS反射放大攻擊分析 摘自:http://www.shaojike.com/2016/08/19/DNS%E6%94%BE%E5%A4%A7%E6%94%BB%E5%87%BB%E7%AE%80%E

WebStrom配置項目的Dweployment,設置默認的啟動配置

有時 style -a 技術分享 p s center mage 界面 配置 有時候,我們在WebStrom中打開多個項目,但是每個項目可能的Deployment的配置不同,所以每次在項目中時,可能打開的網頁並不對。所以需要設置默認的啟動的Deployment。下面的

使用一個公網地址配置Horizon安全服務器與連接服務器的方法

proc 均衡器 融合 -o 案例 瀏覽器 更新 dmi 字符 在企業應用中,將Horizon虛擬桌面發布到Internet時,需要在路由器或防火墻將TCP的443、4172、8443與UDP的4172等4個端口映射給Horizon安全服務器,才可將處於內網的虛擬桌面發布到

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

java學習筆記——spring之aop、切面類中五種通知的使用、存在切面類切面通知的執行順序、註釋的方式定義切面類與通知、xml配置的方式定義切面類與通知

3、AOP AOP:(Aspect Oriented Programming)面向切面程式設計; OOP:(Object Oriented Programming )面向物件程式設計; 面向切面程式設計:基於OOP基礎之上新的程式設計思想; 指在程式執行期間,