Linux 內(nèi)核參數(shù) arp_ignore & arp_announce 詳解

arp_ignore定義了對(duì)目標(biāo)地址為本機(jī)IP的ARP詢問(wèn)的不同應(yīng)答模式吸耿。
arp_announce對(duì)網(wǎng)絡(luò)接口(網(wǎng)卡)上發(fā)出的ARP請(qǐng)求包中的源IP地址作出相應(yīng)的限制涌萤;主機(jī)會(huì)根據(jù)這個(gè)參數(shù)值的不同選擇使用IP數(shù)據(jù)包的源IP或當(dāng)前網(wǎng)絡(luò)接口卡的IP地址作為ARP請(qǐng)求包的源IP地址。

arp_ignore

在內(nèi)核參數(shù)中除了每個(gè)網(wǎng)卡都有自己的arp_ignore配置外继找,還有兩個(gè)(一個(gè)是默認(rèn)default遂跟,一個(gè)是全局all)需要用到arp_ignore配置。所有配置項(xiàng)如下面的代碼段:

net.ipv4.conf.all.arp_ignore 
net.ipv4.conf.default.arp_ignore
net.ipv4.conf.lo.arp_ignore
net.ipv4.conf.eth0.arp_ignore
net.ipv4.conf.eth1.arp_ignore
net.ipv4.conf.eth2.arp_ignore
……

如果某個(gè)的網(wǎng)絡(luò)接口(網(wǎng)卡)上沒(méi)有配置arp_ignore參數(shù)的值則會(huì)把default上配置的arp_ignore應(yīng)用到該網(wǎng)絡(luò)接口上婴渡。而在所有網(wǎng)絡(luò)接口上實(shí)際生效的值是 all 和 對(duì)應(yīng)網(wǎng)絡(luò)接口上配置的arp_ignore參數(shù)值中較大的那個(gè)值幻锁。

arp_ignore參數(shù)的值及其含義如下:

  • 0 - (默認(rèn)值): 回應(yīng)任何網(wǎng)絡(luò)接口(網(wǎng)卡)上對(duì)任何本機(jī)IP地址的arp查詢請(qǐng)求。比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到來(lái)自10.1.1.2這樣地址發(fā)起的對(duì)10.1.1.1 的arp查詢也會(huì)給出正確的回應(yīng)缩搅;而原本這個(gè)請(qǐng)求該是出現(xiàn)在eth1上,也該有eth1回應(yīng)的触幼。
  • 1 - 只回答目標(biāo)IP地址是本機(jī)上來(lái)訪網(wǎng)絡(luò)接口(網(wǎng)卡)IP地址的ARP查詢請(qǐng)求 硼瓣。比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,那么即使eth0收到來(lái)自10.1.1.2這樣地址發(fā)起的對(duì)192.168.0.1的查詢會(huì)回應(yīng),而對(duì)10.1.1.1 的arp查詢不會(huì)回應(yīng)。
  • 2 -只回答目標(biāo)IP地址是本機(jī)上來(lái)訪網(wǎng)絡(luò)接口(網(wǎng)卡)IP地址的ARP查詢請(qǐng)求堂鲤,且來(lái)訪IP(源IP)必須與該網(wǎng)絡(luò)接口(網(wǎng)卡)上的IP(目標(biāo)IP)在同一子網(wǎng)段內(nèi) 亿傅。比如eth0=192.168.0.1/24,eth1=10.1.1.1/24,eth1收到來(lái)自10.1.1.2這樣地址發(fā)起的對(duì)192.168.0.1的查詢不會(huì)回應(yīng),而對(duì)192.168.0.2發(fā)起的對(duì)192.168.0.1的arp查詢會(huì)回應(yīng)瘟栖。
  • 3 - do not reply for local addresses configured with scope host,only resolutions for global and link addresses are replied葵擎。(不知道怎么翻譯合適,網(wǎng)上有一個(gè)參考但我認(rèn)為無(wú)法理解它的含義:不回應(yīng)該網(wǎng)絡(luò)界接口的arp請(qǐng)求半哟,而只對(duì)設(shè)置的唯一和連接地址做出回應(yīng))
  • 4-7 - 保留未使用
  • 8 -不回應(yīng)所有(本機(jī)地址)的arp查詢

在設(shè)置參數(shù)的時(shí)候?qū)rp_ignore 設(shè)置為1酬滤,意味著當(dāng)別人的arp請(qǐng)求過(guò)來(lái)的時(shí)候极景,如果接收的網(wǎng)絡(luò)接口卡上面沒(méi)有這個(gè)ip凉敲,就不做出響應(yīng)唠帝。默認(rèn)是0翁脆,只要這臺(tái)機(jī)器上面任何一個(gè)設(shè)備上面有這個(gè)ip筑悴,就響應(yīng)arp請(qǐng)求魏宽,并發(fā)送mac地址呆馁。

arp_announce

和arp_ignore一樣梗摇,在內(nèi)核參數(shù)中除了每個(gè)網(wǎng)卡都有自己的arp_announce配置外糯崎,還有兩個(gè)(一個(gè)是默認(rèn)default几缭,一個(gè)是全局all)需要用到arp_announce配置。所有配置項(xiàng)如下面的代碼段:

arp_announce 對(duì)網(wǎng)絡(luò)接口(網(wǎng)卡)上發(fā)出的ARP請(qǐng)求包中的源IP地址作出相應(yīng)的限制沃呢;主機(jī)會(huì)根據(jù)這個(gè)參數(shù)值的不同選擇使用IP數(shù)據(jù)包的源IP或當(dāng)前網(wǎng)絡(luò)接口卡的IP地址作為ARP請(qǐng)求包的源IP地址年栓。

net.ipv4.conf.all.arp_announce
net.ipv4.conf.default.arp_announce
net.ipv4.conf.lo.arp_announce
net.ipv4.conf.eth0.arp_announce
net.ipv4.conf.eth1.arp_announce
net.ipv4.conf.eth2.arp_announce
……

如果某個(gè)的網(wǎng)絡(luò)接口(網(wǎng)卡)上沒(méi)有配置arp_announce參數(shù)的值則會(huì)把default上配置的arp_announce應(yīng)用到該網(wǎng)絡(luò)接口上。而在所有網(wǎng)絡(luò)接口上實(shí)際生效的值是 all 和 對(duì)應(yīng)網(wǎng)絡(luò)接口上配置的arp_announce參數(shù)值中較大的那個(gè)值樟插。

arp_announce參數(shù)的值及其含義如下:

  • 0 - (默認(rèn)) 在任意網(wǎng)絡(luò)接口(eth0,eth1韵洋,lo)上使用任何本機(jī)地址進(jìn)行ARP請(qǐng)求。也就是說(shuō)如果IP數(shù)據(jù)包中的源IP與當(dāng)前發(fā)送ARP請(qǐng)求的網(wǎng)絡(luò)接口卡IP地址不同時(shí)(但這個(gè)IP依然是本主機(jī)上其他網(wǎng)絡(luò)接口卡上的IP地址)黄锤,ARP請(qǐng)求包中的源IP地址將使用與IP數(shù)據(jù)包中的 源IP相同的本主機(jī)上的IP地址搪缨,而不是使用當(dāng)前發(fā)送ARP請(qǐng)求的網(wǎng)絡(luò)接口卡的IP地址。
  • 1 -盡量避免使用不在該網(wǎng)絡(luò)接口(網(wǎng)卡)子網(wǎng)段內(nèi)的IP地址做為arp請(qǐng)求的源IP地址鸵熟。當(dāng)接收此ARP請(qǐng)求的主機(jī)要求ARP請(qǐng)求的源IP地址與接收方IP在同一子網(wǎng)段時(shí)副编,此模式非常有用。此時(shí)會(huì)檢查IP數(shù)據(jù)包中的源IP是否為所有網(wǎng)絡(luò)接口上子網(wǎng)段內(nèi)的ip之一流强。如果找到了一個(gè)網(wǎng)絡(luò)接口的IP正好與IP數(shù)據(jù)包中的源IP在同一子網(wǎng)段痹届,則使用該網(wǎng)絡(luò)接口卡進(jìn)行ARP請(qǐng)求。如果IP數(shù)據(jù)包中的源IP不屬于各個(gè)網(wǎng)絡(luò)接口上子網(wǎng)段內(nèi)的ip打月,那么將采用級(jí)別2的方式來(lái)進(jìn)行處理队腐。
  • 2 - 始終使用與目標(biāo)IP地址對(duì)應(yīng)的最佳本地IP地址作為ARP請(qǐng)求的源IP地址。在此模式下將忽略IP數(shù)據(jù)包的源IP地址并嘗試選擇能與目標(biāo)IP地址通信的本機(jī)地址奏篙。首要是選擇所有網(wǎng)絡(luò)接口中子網(wǎng)包含該目標(biāo)IP地址的本機(jī)IP地址柴淘。如果沒(méi)有合適的地址迫淹,將選擇當(dāng)前的網(wǎng)絡(luò)接口或其他的有可能接受到該ARP回應(yīng)的網(wǎng)絡(luò)接口來(lái)進(jìn)行發(fā)送ARP請(qǐng)求,并把發(fā)送ARP請(qǐng)求的網(wǎng)絡(luò)接口卡的IP地址設(shè)置為ARP請(qǐng)求的源IP为严。

對(duì)arp_announce參數(shù)更詳細(xì)的說(shuō)明

假設(shè)一個(gè)Linux服務(wù)器X有三個(gè)網(wǎng)絡(luò)接口敛熬,分別為:eth0,eth1和eth2第股。每個(gè)接口都有一個(gè)IP地址应民,分別為:IP0,IP1和IP2夕吻。當(dāng)本地應(yīng)用程序嘗試通過(guò)eth2發(fā)送IP0的IP數(shù)據(jù)包時(shí)诲锹。如果目標(biāo)節(jié)點(diǎn)的mac地址沒(méi)有解析。這個(gè)Linux服務(wù)器X將發(fā)送ARP請(qǐng)求來(lái)獲取目標(biāo)(或網(wǎng)關(guān))的mac地址梭冠。在這種情況下辕狰,ARP請(qǐng)求包的源IP地址是什么呢?IP0(IP數(shù)據(jù)包的中的源IP)或IP2(發(fā)送ARP請(qǐng)求包的網(wǎng)絡(luò)接口eth2的IP)控漠?其實(shí)對(duì)于大部分路由器來(lái)說(shuō)ARP請(qǐng)求包中的源IP地址使用發(fā)送ARP請(qǐng)求包的網(wǎng)絡(luò)接口上配置的IP地址(在上面的例子中為IP2)蔓倍。但是,linux服務(wù)器的行為是點(diǎn)不同盐捷。在Linux服務(wù)器中通過(guò)Linux的內(nèi)核數(shù)據(jù)arp_announce偶翅,ARP請(qǐng)求中源地址的選擇是完全可配置。 如果我們想在ARP請(qǐng)求中使用IP2而不是IP0碉渡,我們應(yīng)該把arp_announce的值改為1或2聚谁。默認(rèn)值為0 - 允許使用IP0作為ARP請(qǐng)求包中的源IP。

其實(shí)arp_announce是為了解決Linux服務(wù)器作為路由器時(shí)的arp問(wèn)題滞诺,因?yàn)槁酚善饕话闶莿?dòng)態(tài)學(xué)習(xí)ARP包的(一般動(dòng)態(tài)配置DHCP的話)形导。當(dāng)內(nèi)網(wǎng)的Linux機(jī)器要發(fā)送一個(gè)到外部的ip包,那么它就會(huì)請(qǐng)求路由器的Mac地址习霹,發(fā)送一個(gè)arp請(qǐng)求朵耕,這個(gè)arp請(qǐng)求里面包括了自己的ip地址和Mac地址。而linux默認(rèn)是使用ip數(shù)據(jù)包的源ip地址作為arp里面的源ip地址淋叶,而不是使用發(fā)送設(shè)備上面網(wǎng)絡(luò)接口卡的ip地址 (默認(rèn)arp_announce的值為0)阎曹。這樣在lvs架構(gòu)下,所有arp請(qǐng)求包的源地址都是同一個(gè)VIP地址煞檩,那么arp請(qǐng)求就會(huì)包括VIP地址和設(shè)備 Mac处嫌。而路由器收到這個(gè)arp請(qǐng)求就會(huì)更新自己的arp緩存,這樣就會(huì)造成ip欺騙了斟湃,VIP被搶奪熏迹,所以就會(huì)有問(wèn)題。

arp緩存為什么會(huì)更新了凝赛,什么時(shí)候會(huì)更新呢注暗?為了減少arp請(qǐng)求的次數(shù)厨剪,當(dāng)主機(jī)接收到詢問(wèn)自己的arp請(qǐng)求的時(shí)候,就會(huì)把源ip和源Mac放入自 己的arp表里面友存,方便接下來(lái)的通訊。如果收到不是詢問(wèn)自己的包(arp是廣播的陶衅,所有人都收到)屡立,就會(huì)丟掉,這樣不會(huì)造成arp表里面無(wú)用數(shù)據(jù)太多導(dǎo)致 有用的記錄被刪除搀军。

配置方式

要配置Linux內(nèi)核中的 arp_ignore & arp_announce 參數(shù)有多種配置方式可供選擇膨俐,下面分別介紹。

臨時(shí)生效的配置方式

臨時(shí)生效的配置方式罩句,在系統(tǒng)重啟焚刺,或?qū)ο到y(tǒng)的網(wǎng)絡(luò)服務(wù)進(jìn)行重啟后都會(huì)失效。這種方式可用于臨時(shí)測(cè)試门烂、或做實(shí)驗(yàn)時(shí)使用乳愉。

使用 sysctl 指令配置

sysctl 命令的 -w 參數(shù)可以實(shí)時(shí)修改Linux的內(nèi)核參數(shù),并生效屯远。所以使用如下命令可以修改Linux內(nèi)核參數(shù)中的arp_ignore & arp_announce 蔓姚。

sysctl -w net.ipv4.conf.default.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.lo.arp_ignore=1
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.eth1.arp_ignore=1
……

sysctl -w net.ipv4.conf.default.arp_announce =1
sysctl -w net.ipv4.conf.all.arp_announce =1
sysctl -w net.ipv4.conf.lo.arp_announce =1
sysctl -w net.ipv4.conf.eth0.arp_announce =1
sysctl -w net.ipv4.conf.eth1.arp_announce =1
……

有關(guān) sysctl 指令的更詳細(xì)介紹,請(qǐng)參見(jiàn)Linux的系統(tǒng)man手冊(cè)(man sysctl)慨丐,或其他有關(guān)sysctl指令詳細(xì)介紹的文章坡脐。

修改內(nèi)核參數(shù)的映射文件

在Linux文件系統(tǒng)映射出的內(nèi)核參數(shù)配置文件中記錄了Linux系統(tǒng)中網(wǎng)絡(luò)接口ARP請(qǐng)求和響應(yīng)配置參數(shù) arp_ignore & arp_announce 的值》拷遥可使用vi編輯器修改文件的內(nèi)容备闲,也可以使用如下指令修改文件內(nèi)容:

echo 1 > /proc/sys/net/ipv4/conf/default/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
……

echo 1 > /proc/sys/net/ipv4/conf/default/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_announce 
……

永久生效的配置方式

永久生效的配置方式,在系統(tǒng)重啟捅暴、或?qū)ο到y(tǒng)的網(wǎng)絡(luò)服務(wù)進(jìn)行重啟后還會(huì)一直保持生效狀態(tài)恬砂。這種方式可用于生產(chǎn)環(huán)境的部署搭建。

修改/etc/sysctl.conf 配置文件可以達(dá)到永久生效的目的伶唯。

在sysctl.conf配置文件中有一項(xiàng)名為可以添加如下面代碼段中的配置項(xiàng)觉既,用于配置Linux內(nèi)核中的各網(wǎng)絡(luò)接口的 arp_ignore & arp_announce 參數(shù)。

net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.eth0.arp_ignore=1
net.ipv4.conf.eth1.arp_ignore=1
……

net.ipv4.conf.default.arp_announce =1
net.ipv4.conf.all.arp_announce =1
net.ipv4.conf.lo.arp_announce =1
net.ipv4.conf.eth0.arp_announce =1
net.ipv4.conf.eth1.arp_announce =1
……

需要注意的是乳幸,修改sysctl.conf文件后需要執(zhí)行指令sysctl -p 后新的配置才會(huì)生效瞪讼。

有關(guān) sysctl 指令和sysctl.conf配置文件的更詳細(xì)介紹,請(qǐng)參見(jiàn)Linux的系統(tǒng)man手冊(cè)(man sysctl和man sysctl.conf)粹断,或其他有關(guān)sysctl指令和sysctl.conf配置文件的文章符欠。

說(shuō)明

此文是作者在互聯(lián)網(wǎng)上閱讀了大量有關(guān) arp_ignore & arp_announce 的文章后,根據(jù)自己的理解進(jìn)行的總結(jié)瓶埋。由于個(gè)人水平限制希柿,難免有所失誤诊沪。如果您在閱讀時(shí)發(fā)現(xiàn)謬誤之處,還望指出曾撤,以期共同進(jìn)步端姚。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市挤悉,隨后出現(xiàn)的幾起案子渐裸,更是在濱河造成了極大的恐慌,老刑警劉巖装悲,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昏鹃,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡诀诊,警方通過(guò)查閱死者的電腦和手機(jī)洞渤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)属瓣,“玉大人载迄,你說(shuō)我怎么就攤上這事÷胀埽” “怎么了宪巨?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)溜畅。 經(jīng)常有香客問(wèn)我捏卓,道長(zhǎng),這世上最難降的妖魔是什么慈格? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任怠晴,我火速辦了婚禮,結(jié)果婚禮上浴捆,老公的妹妹穿的比我還像新娘蒜田。我一直安慰自己,他們只是感情好选泻,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布冲粤。 她就那樣靜靜地躺著,像睡著了一般页眯。 火紅的嫁衣襯著肌膚如雪梯捕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,874評(píng)論 1 314
  • 那天窝撵,我揣著相機(jī)與錄音傀顾,去河邊找鬼。 笑死碌奉,一個(gè)胖子當(dāng)著我的面吹牛短曾,可吹牛的內(nèi)容都是我干的寒砖。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼嫉拐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼哩都!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起婉徘,我...
    開(kāi)封第一講書(shū)人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茅逮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后判哥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碉考,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年塌计,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侯谁。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锌仅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出墙贱,到底是詐尸還是另有隱情热芹,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布惨撇,位于F島的核電站伊脓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏魁衙。R本人自食惡果不足惜报腔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剖淀。 院中可真熱鬧纯蛾,春花似錦、人聲如沸纵隔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捌刮。三九已至碰煌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绅作,已是汗流浹背拄查。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棚蓄,地道東北人堕扶。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓碍脏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親稍算。 傳聞我的和親對(duì)象是個(gè)殘疾皇子典尾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361