前言
上一篇文章地址:
【深入淺出Linux】LVS的DR模式的關(guān)鍵點:http://www.reibang.com/p/e9a2a5af2ec1
之前我們在VMWare中配置虛擬主機术裸,使用LVS做負載均衡倘是,模式采用的是最常見的DR模式,在DR模式配置中有個關(guān)鍵點是將真實主機上的VIP配置在環(huán)回接口上袭艺,且掩碼必須配置成4個255搀崭。
那么為什么要這樣配置呢,下面我們來深度探究一下...
正文
首先要明白一件事猾编,虛擬機和主機的IP在同一網(wǎng)段內(nèi)瘤睹,不會走NAT服務(wù)器去訪問外網(wǎng)升敲,只會走交換機查詢MAC地址,因此之前的沒有配置LVS之前轰传,我們ping自己的虛擬網(wǎng)卡驴党,網(wǎng)關(guān)等,通過eth0網(wǎng)卡向外發(fā)送數(shù)據(jù)包也是走的是交換機获茬,現(xiàn)在我們將VIP配置在lo環(huán)回網(wǎng)卡上港庄,因此想要正常發(fā)送數(shù)據(jù)包也是要走交換機才行。
關(guān)于為什么不會走NAT服務(wù)器去訪問外網(wǎng)锦茁,推薦大家看一篇文章攘轩。
深入理解VMware虛擬機的上網(wǎng)模式_NAT模式:https://blog.51cto.com/xpleaf/1900870
之前發(fā)送數(shù)據(jù)包通過eth0網(wǎng)卡走交換機,只需要在當前網(wǎng)段內(nèi)廣播尋找目標IP地址的MAC地址就行了码俩。
所以VIP地址發(fā)送消息也應(yīng)該是這個過程。現(xiàn)在我們來反推一下歼捏,如果掩碼為255.255.255.0會怎么樣呢稿存?
首先會查詢當前主機的路由表...
Destination | Gateway | Genmask | Use Iface |
---|---|---|---|
192.168.247.0 | 0.0.0.0 | 255.255.255.0 | lo |
192.168.247.0 | 0.0.0.0 | 255.255.255.0 | eth0 |
0.0.0.0 | 192.168.247.2 | 0.0.0.0 | eth0 |
(Gateway是0.0.0.0或者*表示目標是本主機所屬的網(wǎng)絡(luò),不需要路由)
注意:上面的lo是我假設(shè)的瞳秽,為了方便下面的說明瓣履,實際在Linux中route -n
是看不到lo接口的設(shè)備的,因為它不對外练俐。
假設(shè)當前目標IP 192.168.247.1袖迎,VIP為192.168.247.100
- lo網(wǎng)卡 192.168.247.100 & 255.255.255.0 = 192.168.247.0
- eth0網(wǎng)卡 192.168.247.12 & 255.255.255.0 = 192.168.247.0
- 目標IP地址 192.168.247.1 & 255.255.255.0=192.168.247.0
然后我們需要明白一個事,叫IP最長匹配原則腺晾。因此不會走最后的默認網(wǎng)關(guān)192.168.247.2燕锥。而且由于&運算發(fā)現(xiàn)目標IP和主機在同一網(wǎng)段內(nèi),因此會走上面兩條悯蝉,而且上面兩條其實都會匹配成功归形,但是,由于是環(huán)回網(wǎng)卡一種特殊的網(wǎng)絡(luò)接口鼻由,不與任何實際設(shè)備連接暇榴,而是完全由軟件實現(xiàn)。而且lo環(huán)回網(wǎng)卡離內(nèi)核進蕉世,所以在路由表中為第一條蔼紧,所以數(shù)據(jù)包會走lo環(huán)回接口。
而環(huán)回接口有一個特點狠轻,就是接收到的數(shù)據(jù)包又會發(fā)回給本機奸例,也就是說回環(huán)網(wǎng)卡是自己和自己玩,因此如果走的是環(huán)回接口發(fā)送數(shù)據(jù)包哈误,永遠也發(fā)不出去哩至,因此我們不能讓數(shù)據(jù)包走環(huán)回接口躏嚎,所以需要將掩碼設(shè)置成255.255.255.255,這樣&運算192.168.247.1菩貌!=192.168.247.100
Destination | Gateway | Genmask | Use Iface |
---|---|---|---|
192.168.247.0 | 0.0.0.0 | 255.255.255.255 | lo |
192.168.247.0 | 0.0.0.0 | 255.255.255.0 | eth0 |
0.0.0.0 | 192.168.247.2 | 0.0.0.0 | eth0 |
因此就不會走我們的環(huán)回接口發(fā)送數(shù)據(jù)包卢佣,而是走eth0發(fā)送數(shù)據(jù)包。然后通過eth0向交換機廣播箭阶,獲取192.168.247.1地址的MAC地址虚茶,將數(shù)據(jù)包發(fā)送過去就完成了相應(yīng)的過程。