日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(2) LVS负载均衡:VS_TUN和VS_DR的arp问题

發(fā)布時(shí)間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (2) LVS负载均衡:VS_TUN和VS_DR的arp问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. ARP協(xié)議簡(jiǎn)介

ARP(Address Resolution Protocol)協(xié)議稱為地址解析協(xié)議,用于將主機(jī)IP地址解析為主機(jī)的MAC地址,即IP-->MAC之間一一映射。

RARP協(xié)議相反,是將MAC地址解析為IP地址,MAC——>IP

ARP解析時(shí)分兩種情況:

  • 解析目標(biāo)和自己在同一網(wǎng)段。
    A解析同網(wǎng)段的B,A根據(jù)自己的IP和子網(wǎng)掩碼判斷B和自己同網(wǎng)段,這時(shí)A就直接在這個(gè)網(wǎng)段上發(fā)一個(gè)ARP廣播包尋求B的MAC地址,所有人都收到廣播信息,但是B會(huì)將MAC地址回應(yīng)給A,A緩存B的MAC地址。
  • 解析目標(biāo)和自己不在同一網(wǎng)段。
    A根據(jù)自己的IP和子網(wǎng)掩碼判斷出B和自己不在同一個(gè)網(wǎng)段,這時(shí)A就向自己的網(wǎng)段發(fā)送一個(gè)ARP廣播包用來(lái)解析網(wǎng)關(guān)的MAC地址,也就是路由器的接口MAC地址,然后路由器回應(yīng),A緩存回應(yīng)的MAC結(jié)果
  • 當(dāng)發(fā)送ARP請(qǐng)求廣播后,目標(biāo)設(shè)備會(huì)進(jìn)行應(yīng)答,其中請(qǐng)求數(shù)據(jù)包和應(yīng)答數(shù)據(jù)包的格式非常接近。以下是請(qǐng)求包和應(yīng)答包數(shù)據(jù)格式的一部分,完整格式請(qǐng)百度或者翻閱TCP/IP協(xié)議卷(一)。

    其中:

    • op字段是一個(gè)1-4的值,1表示該數(shù)據(jù)幀是ARP請(qǐng)求包,2表示該數(shù)據(jù)幀是ARP應(yīng)答包,3和4則表示RARP的請(qǐng)求和應(yīng)答包。
    • src_MAC和src_IP是數(shù)據(jù)幀中的源MAC和源IP地址。這兩個(gè)字段的值不一定是對(duì)應(yīng)的,意思是src_IP不一定配置在src_MAC地址的接口上。
    • dest_MAC和dest_IP則是目標(biāo)MAC地址和目標(biāo)IP地址。對(duì)于ARP請(qǐng)求包,dest_MAC值為"ff:ff:ff:ff:ff:ff",表示這是廣播包。同樣,這兩個(gè)字段的值也并非是對(duì)應(yīng)的

    當(dāng)發(fā)送ARP請(qǐng)求廣播包時(shí),op的值設(shè)置為1,目標(biāo)MAC設(shè)置為廣播地址"ff:ff:ff:ff:ff:ff",然后在局域網(wǎng)內(nèi)廣播,這是在詢問(wèn)"who has DEST_IP"。每臺(tái)主機(jī)都能收到該廣播包,但只有設(shè)置了目標(biāo)IP的主機(jī)才會(huì)應(yīng)答:"Reply DEST_IP is-at DEST_MAC"。應(yīng)答時(shí)使用單播包進(jìn)行回應(yīng),會(huì)將op值改為2,表示這是應(yīng)答包,同時(shí)將應(yīng)答的MAC地址替換原來(lái)的"ff:ff:ff:ff:ff:ff",并將src和dest的字段位置進(jìn)行調(diào)換。如下圖:

    當(dāng)響應(yīng)者接收到請(qǐng)求者的ARP請(qǐng)求時(shí),它會(huì)將請(qǐng)求包中的源MAC和源IP緩存到ARP緩存表中。

    當(dāng)請(qǐng)求者接收到響應(yīng)者的應(yīng)答包時(shí),它會(huì)將應(yīng)答包中的源MAC地址和源IP地址緩存到ARP緩存表中。也就是說(shuō),一次arp請(qǐng)求,會(huì)讓兩端主機(jī)都緩存對(duì)方的IP和MAC地址

    使用ping命令或其他TCP連接時(shí),兩端都會(huì)緩存對(duì)方的ARP條目。但為了測(cè)試,可以手動(dòng)使用arping命令發(fā)送一個(gè)自定義源MAC和源IP的arp請(qǐng)求讓對(duì)方緩存自己的IP和MAC。

    假如主機(jī)A上有eth0(192.168.100.54)和eth1兩網(wǎng)卡,主機(jī)B有eth0(192.168.100.70)。

    下面的命令表示,在主機(jī)A上向主機(jī)B發(fā)送一個(gè)arp廣播包(如果"-c N"的N大于1,則只有第一個(gè)請(qǐng)求包是廣播,其他是單播),其中源MAC為eth1網(wǎng)卡的MAC,但源IP為eth0上的IP地址192.168.100.54。這會(huì)使得主機(jī)B緩存的arp條目為192.168.100.54<-->eth1_MAC,但實(shí)際上這并非正確的映射關(guān)系。

    arping -c 1 -I eth1 -s 192.168.100.54 192.168.100.70

    有些程序可以檢測(cè)到IP地址沖突的現(xiàn)象。典型的如DHCP服務(wù)器準(zhǔn)備提供IP地址給客戶端之前,會(huì)發(fā)送一個(gè)arp廣播,以便確認(rèn)該IP地址是否已被其他主機(jī)使用(例如其他主機(jī)使用靜態(tài)IP時(shí)手動(dòng)輸入了該IP)。如果沒(méi)有收到回應(yīng),則表示該IP地址沒(méi)有被使用,可以提供給客戶端使用,如果收到了回應(yīng),則表示該IP地址已經(jīng)被使用了,DHCP會(huì)從IP池中換一個(gè)IP提供給客戶端。

    arp -a(或arp -e)命令可以顯示arp緩存表的內(nèi)容,arp -d ADDR可以刪除ARP緩存表中某條ARP記錄,這兩命令對(duì)于Windows和Linux系統(tǒng)都可用。

    此外,

    對(duì)于Windows,arp -d *表示刪除arp緩存表中的所有記錄,

    對(duì)于Linux,則使用ip neigh flush all命令來(lái)刪除arp緩存中所有記錄。

    注意,無(wú)論是arp請(qǐng)求還是arp應(yīng)答,都帶有完整的源MAC、源IP、目標(biāo)MAC和目標(biāo)IP。這看似一句廢話,但不熟知arp請(qǐng)求的人很容易因此而陷入困惑。

    ?

    2. arp_ignore和arp_announce變量的作用分析

    在設(shè)置VS/TUN和VS/DR時(shí),都需要設(shè)置到這兩個(gè)arp相關(guān)的內(nèi)核變量,所以這里先解釋解釋。

    前文已經(jīng)說(shuō)明了arp請(qǐng)求包或應(yīng)答包中,MAC地址可以和IP地址不對(duì)應(yīng)

    這樣一來(lái)就出現(xiàn)問(wèn)題了,

    ARP請(qǐng)求包中,使用哪個(gè)源IP地址以及哪個(gè)源MAC地址?

    ARP應(yīng)答包中,使用哪個(gè)源MAC和源IP地址(注意,應(yīng)答包中源IP地址并不一定是請(qǐng)求包中的目標(biāo)IP,可能會(huì)更換為本機(jī)的其他IP地址)?

    arp_ignore和arp_announce這兩個(gè)變量的作用正是設(shè)置使用哪個(gè)源IP和哪個(gè)源MAC

    arp_ignore設(shè)置的是收到請(qǐng)求包后,在應(yīng)答包中將本機(jī)的哪個(gè)IP地址和MAC地址回應(yīng)給請(qǐng)求者以供緩存;

    arp_announce設(shè)置的是發(fā)出請(qǐng)求包時(shí),選擇哪個(gè)IP和MAC地址供響應(yīng)者緩存,這也符合announce的字面意思:向外通告本機(jī)的哪個(gè)IP地址和MAC地址供其他主機(jī)緩存。

    它們的作用如下圖所示:

    再來(lái)細(xì)看arp_ignore和arp_announce的介紹。

    ?

    2.1 arp_ignore

    arp_ignore - INTEGERDefine different modes for sending replies in response toreceived ARP requests that resolve local target IP addresses:0 - (default): reply for any local target IP address, configuredon any interface1 - reply only if the target IP address is local addressconfigured on the incoming interface2 - reply only if the target IP address is local addressconfigured on the incoming interface and both with thesender's IP address are part from same subnet on this interface3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied 4-7 - reserved 8 - do not reply for all local addresses The max value from conf/{all,interface}/arp_ignore is used when ARP request is received on the {interface}

    大致翻譯一下:

    該變量接受一個(gè)整數(shù)值。定義的是當(dāng)本機(jī)接收到別的主機(jī)發(fā)送的ARP請(qǐng)求時(shí)的不同應(yīng)答模式:回應(yīng)哪個(gè)IP和MAC地址給請(qǐng)求者。

    • 0 - (default):將本機(jī)所有非lo接口的IP地址都回應(yīng)出去
    • 1 - 只有當(dāng)ARP請(qǐng)求中的目標(biāo)IP地址配置在流入接口上時(shí)才響應(yīng)
    • 2 - 只有當(dāng)ARP請(qǐng)求中的目標(biāo)IP地址配置在流入接口上時(shí),且該IP地址(即發(fā)送者源地址)是接口地址上的子網(wǎng)地址時(shí)才響應(yīng)(例如192.168.100.10/24和192.168.100.10/16的關(guān)系)。
    • 3 - do not reply for local addresses configured with scope host, only resolutions for global and link addresses are replied。
    • 4-7 - 保留
    • 8 - 不回應(yīng)任意地址
    • 當(dāng)某接口接收到ARP請(qǐng)求時(shí),將取conf/{all,interface}/arp_ignore中值最大的生效。

    注意:這里的是否響應(yīng),指的不是是否構(gòu)建響應(yīng),而是路由決策后是否讓構(gòu)建好的響應(yīng)包出去。換句話說(shuō),arp響應(yīng)包是一定會(huì)構(gòu)建的,但是構(gòu)建好的響應(yīng)包根據(jù)arp_ignore設(shè)置的值不同,不一定能出的去。可見(jiàn)稍后arp_ignore=1的示例分析。

    舉個(gè)例子來(lái)解釋值為0和1的情況。

    (1)arp_ignore=0時(shí),當(dāng)主機(jī)收到arp請(qǐng)求時(shí),會(huì)將本機(jī)任意可能的IP地址(lo除外)都應(yīng)答給arp請(qǐng)求者。

    例如,主機(jī)A有3個(gè)網(wǎng)卡,eth0(192.168.100.17/24),eth1(192.168.100.36/24)和eth2(172.16.10.10/16),主機(jī)B有網(wǎng)卡eth0(192.168.100.39)。當(dāng)主機(jī)B發(fā)起對(duì)192.168.100.36(eth1)或17(eth0)的ping時(shí),由于主機(jī)A回應(yīng)icmp響應(yīng)給主機(jī)B時(shí),默認(rèn)情況下有以下路由:

    [root@xuexi ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.100.2 0.0.0.0 UG 100 0 0 eth0 0.0.0.0 192.168.100.2 0.0.0.0 UG 101 0 0 eth1 0.0.0.0 192.168.100.2 0.0.0.0 UG 102 0 0 eth2        這三條是默認(rèn)路由 172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth2 192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.100.0 0.0.0.0 255.255.255.0 U 101 0 0 eth1 192.168.100.2 0.0.0.0 255.255.255.255 UH 100 0 0 eth2

    這時(shí)主機(jī)A會(huì)將eth0和eth1上的IP地址都應(yīng)答給主機(jī)B,且這兩個(gè)IP地址對(duì)應(yīng)的MAC地址都是eth0(因?yàn)樵摻涌谑窃摼W(wǎng)段的第一條路由出口)的MAC地址因?yàn)闊o(wú)論請(qǐng)求的是哪個(gè)目標(biāo)IP,構(gòu)建的arp響應(yīng)都能從eth0出去,而eth0的arp_ignore=0,允許任意目標(biāo)的響應(yīng)包出去

    以下是主機(jī)B上ping 192.168.100.36后的arp緩存表,如果結(jié)果不同,請(qǐng)?ip neigh flush all?清空緩存表或者多等待一段時(shí)間再測(cè)試。

    [root@xuexi ~]# ip n s 192.168.100.36 dev eth0 lladdr 00:0c:29:fb:dd:04 REACHABLE 192.168.100.1 dev eth0 lladdr 00:50:56:c0:00:08 REACHABLE 192.168.100.17 dev eth0 lladdr 00:0c:29:fb:dd:04 STALE

    如果將主機(jī)A上192.168.100.0 eth0的路由條目刪除,則主機(jī)B ping 192.168.100.36時(shí),主機(jī)A將不再把eth0(192.168.100.17)響應(yīng)給主機(jī)B,盡管它可以使用eth1對(duì)應(yīng)的路由出去。但如果主機(jī)B ping 192.168.100.17,那么也會(huì)將該地址響應(yīng)出去,使用的源MAC地址也是eth1(因?yàn)槁酚沙隹跒閑th1)。因此,主機(jī)B只會(huì)緩存主機(jī)A的192.168.100.36 eth1_MAC。

    由此可知,所謂響應(yīng)任意可能的IP地址并不是響應(yīng)所有地址,lo接口、非同一網(wǎng)段地址以及無(wú)第一路由的接口地址就不會(huì)主動(dòng)響應(yīng)出去。同樣,那些定義在接口上的別名地址也默認(rèn)不會(huì)響應(yīng)出去,因?yàn)樗鼈兊臄?shù)據(jù)的流入流出都是通過(guò)它所依附的接口。

    (2)arp_ignore=1時(shí),當(dāng)主機(jī)收到arp請(qǐng)求時(shí),只有arp請(qǐng)求包中目標(biāo)IP和流入接口上的IP相同時(shí),才會(huì)響應(yīng)該IP以及該接口的MAC。

    例如,設(shè)置eth0網(wǎng)卡的該變量值為1。不過(guò),為了完善測(cè)試,先將上面示例中刪除的路由條目添加回來(lái)。

    route add -net 192.168.100.0/24 dev eth0echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore

    這時(shí)主機(jī)B上ping 192.168.100.17(eth0)時(shí),主機(jī)A將只會(huì)響應(yīng)eth0_MAC給主機(jī)B,且ping 192.168.100.36時(shí)將ping不通(這一點(diǎn)需要注意,在后面配置LVS的arp參數(shù)時(shí),外界主機(jī)往往只能ping通同網(wǎng)段的其中一個(gè)地址)。以下是在主機(jī)B上ping 192.168.100.36(eth1)時(shí)在主機(jī)A上抓取的數(shù)據(jù)包。

    [root@xuexi ~]# tcpdump -nn host 192.168.100.39 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes 12:21:51.739967 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 12:21:52.739741 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 12:21:53.739868 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 12:21:55.742680 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 12:21:56.743560 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 12:21:57.743086 ARP, Request who-has 192.168.100.36 tell 192.168.100.39, length 46 ^C 6 packets captured 6 packets received by filter 0 packets dropped by kernel

    從結(jié)果中可以看出,主機(jī)A收到目標(biāo)IP為192.168.100.36的ARP請(qǐng)求后,并沒(méi)有響應(yīng)給主機(jī)B。因?yàn)橹鳈C(jī)B發(fā)出的ARP請(qǐng)求包到達(dá)主機(jī)A時(shí)的流入接口為eth1,構(gòu)建arp響應(yīng)包后,經(jīng)過(guò)路由決策從eth0出去,而eth0上的arp_ignore=1,這個(gè)arp響應(yīng)包將響應(yīng)出不去,主機(jī)B也就不知道192.168.100.36的MAC地址,從而無(wú)法與A主機(jī)通信

    這里的關(guān)鍵流入接口是eth1,但arp響應(yīng)包的流出接口是eth0eth0的arp_ignore=1意味著只有從eth0流入的arp請(qǐng)求,構(gòu)建的arp響應(yīng)包才允許出去。盡管ping的目標(biāo)是eth0同網(wǎng)段的eth1:192.168.100.36。也就是說(shuō),只要eth0的arp_ignore=1,那么該主機(jī)上該網(wǎng)段的所有地址(除了配置在eth0上的IP)都無(wú)法與外界通信

    此時(shí),如果將eth0的路由條目刪除,或者將eth0的路由優(yōu)先級(jí)設(shè)置的比eth1的路由優(yōu)先級(jí)更低(例如將eth0路由的metric的值設(shè)置的比eth1的metric更大),那么arp響應(yīng)包的流出接口將是eth1,這時(shí)主機(jī)B ping主機(jī)A的eth0_IP或eth1_IP都能通,且arp緩存表中,這兩個(gè)地址對(duì)應(yīng)的MAC地址都是eth1_MAC

    再繼續(xù),如果沒(méi)有eth0的路由,或者eth0的路由優(yōu)先級(jí)比eth1低,且還設(shè)置了eth1的arp_ignore=1,此時(shí)主機(jī)B將只能ping通eth1_IP,因?yàn)閜ing eth0_IP的arp請(qǐng)求從eth0而不是eth1流入,但它的響應(yīng)包經(jīng)過(guò)路由決策后卻要從eth1出去,eth1的arp_ignore=1不會(huì)允許這樣的arp響應(yīng)包出去。

    因此在arp請(qǐng)求過(guò)程中,目標(biāo)主機(jī)路由表中路由的先后順序非常重要,它不僅決定了數(shù)據(jù)從哪流出,更深層面上還決定了流出時(shí)使用哪個(gè)MAC地址,而這直接決定是否能成功ARP請(qǐng)求、ARP響應(yīng)以及arp緩存的?IP<-->MAC?映射結(jié)果。如果你在學(xué)習(xí)arp_ignore和arp_announce時(shí)做了很多測(cè)試,必然能體會(huì)到這一點(diǎn)。

    2.2 arp_announce

    arp_announce - INTEGERDefine different restriction levels for announcing the localsource IP address from IP packets in ARP requests sent oninterface:0 - (default) Use any local address, configured on any interface 1 - Try to avoid local addresses that are not in the target's subnet for this interface. This mode is useful when target hosts reachable via this interface require the source IP address in ARP requests to be part of their logical network configured on the receiving interface. When we generate the request we will check all our subnets that include the target IP and will preserve the source address if it is from such subnet. If there is no such subnet we select source address according to the rules for level 2. 2 - Always use the best local address for this target. In this mode we ignore the source address in the IP packet and try to select local address that we prefer for talks with the target host. Such local address is selected by looking for primary IP addresses on all our subnets on the outgoing interface that include the target IP address. If no suitable local address is found we select the first local address we have on the outgoing interface or on all other interfaces, with the hope we will receive reply for our request and even sometimes no matter the source IP address we announce. The max value from conf/{all,interface}/arp_announce is used. Increasing the restriction level gives more chance for receiving answer from the resolved target while decreasing the level announces more valid sender's information.

    大致翻譯一下:該變量接受一個(gè)整數(shù)值。它定義的是當(dāng)發(fā)送ARP請(qǐng)求時(shí),在請(qǐng)求數(shù)據(jù)包中填入的源IP地址和源MAC地址,它們是被響應(yīng)者緩存的內(nèi)容

    • 0 - (default)可以使用本機(jī)上任意接口的任意地 址
    • 1 - 盡量不使用和目標(biāo)IP不在同一子網(wǎng)的地址。當(dāng)目標(biāo)主機(jī)可以通過(guò)該接口達(dá)到,但要求ARP數(shù)據(jù)包中的源IP地址是邏輯網(wǎng)絡(luò)接口網(wǎng)段中的地址時(shí),設(shè)置為該級(jí)別很有用。當(dāng)生成ARP請(qǐng)求數(shù)據(jù)包時(shí),將檢測(cè)所有包含目標(biāo)IP的子網(wǎng)(自身網(wǎng)段或子網(wǎng)都可以),如果源IP地址處于該子網(wǎng)內(nèi),則使用該地址。如果沒(méi)有包含該源IP地址的子網(wǎng),則使用級(jí)別2(arp_announce=2)來(lái)處理。

    • 2 - 總是為目標(biāo)地址尋找最佳本地地址作為ARP請(qǐng)求的源IP地址。這種模式下,將忽略源IP地址,而是嘗試選擇出能和目標(biāo)IP最佳通信質(zhì)量的IP地址。這個(gè)IP是通過(guò)尋找各流出接口上的主IP地址(primary IP,不能是secondary IP)得到的,它需要和目標(biāo)IP地址在同網(wǎng)段或?qū)儆谄渥泳W(wǎng)內(nèi)。如果沒(méi)有選出合適的地址,將選擇第一個(gè)流出接口上的IP地址,這樣不僅可以接收到應(yīng)答包,還能無(wú)視已經(jīng)手動(dòng)通告的源地址。

    稍微解釋下:

    • arp_announce=0時(shí),向外發(fā)送ARP請(qǐng)求時(shí),很可能會(huì)使用流出接口的IP地址和MAC地址,這沒(méi)有硬性限制
    • arp_announce=1時(shí),盡量使用與目標(biāo)IP地址在同一子網(wǎng)的地址,例如目標(biāo)IP地址為192.168.100.40/16,而本機(jī)有IP地址192.168.100.22/24,這個(gè)IP地址是目標(biāo)IP地址子網(wǎng)內(nèi)的一個(gè)地址,因此會(huì)盡量使用該地址作為ARP請(qǐng)求中的源IP地址,但是源MAC地址還是數(shù)據(jù)流出接口上的MAC
    • arp_announce=2時(shí),不管ARP請(qǐng)求包中指定的源IP地址是什么(因?yàn)锳RP請(qǐng)求包中的源IP和源MAC可以手動(dòng)指定),總會(huì)在本地搜索出和目標(biāo)IP最匹配的IP地址來(lái)作為源地址。它會(huì)優(yōu)先選和目標(biāo)IP同子網(wǎng)的本地IP,如果沒(méi)有則選路由表中的第一個(gè)流出接口上的IP。

    例如,如果Linux主機(jī)有3個(gè)網(wǎng)卡:eth0(IP0)、eth1(IP1)和eth2(IP2)。如果想通過(guò)eth2接口流出源地址為IP0的ARP請(qǐng)求廣播包,默認(rèn)情況下是行不通的。因?yàn)槟J(rèn)情況下,使用eth2流出ARP請(qǐng)求的源IP地址必須使用IP2。因此必須設(shè)置arp_announce=1或2,其實(shí)設(shè)置為1時(shí)也只是有機(jī)會(huì)流出,因?yàn)樗袛郔P0和目標(biāo)IP地址是否存在子網(wǎng)所屬關(guān)系。只有設(shè)置arp_announce=2才必然能流出,但這時(shí)該Linux主機(jī)向外通告的IP地址將不是IP0,而是IP2

    3.設(shè)置arp_ignore和arp_announce

    Linux內(nèi)核2.0.xx版本中,回環(huán)接口、回環(huán)別名接口(如lo:0,lo:1)以及回環(huán)隧道接口都不會(huì)做arp回應(yīng),對(duì)于LVS集群來(lái)說(shuō),這很方便。

    從Linux 2.2.xx開始,除了回環(huán)地址(127.0.0.0/8)和廣播地址外,其他所有地址(包括回環(huán)接口上的別名接口)都會(huì)做arp回應(yīng)。因此,在這樣的內(nèi)核版本下配置LVS可能會(huì)出現(xiàn)一些問(wèn)題。

    從Linux內(nèi)核2.2.14開始,提供了一個(gè)接口標(biāo)記"hidden"用于從ARP廣播中隱藏指定接口。

    這意味著對(duì)于現(xiàn)在的CentOS6、CentOS7來(lái)說(shuō),雖然每個(gè)接口(包括lo接口)都可以設(shè)置這兩個(gè)變量,但這兩個(gè)變量只對(duì)能arp回應(yīng)的接口才生效(如eth0,eth1等對(duì)外通信的普通接口)。也就是說(shuō),在lo接口上設(shè)置arp_ignore、arp_announce等arp參數(shù)是沒(méi)有意義的

    盡管對(duì)lo接口設(shè)置arp參數(shù)沒(méi)有意義,但為了保證lo和普通網(wǎng)卡、隧道設(shè)置方法的統(tǒng)一性,以及未來(lái)的內(nèi)核可能對(duì)此做出改變,本文以及網(wǎng)上的文章還是對(duì)它進(jìn)行了同樣的設(shè)置。

    例如,設(shè)置lo接口的arp_ignore=1、arp_announce=2。

    echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce

    如果在接口上設(shè)置了別名IP,例如eth0:0,由于它們?nèi)匀皇褂盟栏降慕涌诹魅肓鞒鰯?shù)據(jù),因此在接口上設(shè)置arp_ignore和arp_announce對(duì)別名IP同樣生效。

    其實(shí),在/proc/sys/net/ipv4/conf下,除了各網(wǎng)卡接口的配置目錄,還有default和all兩個(gè)目錄,這兩個(gè)目錄內(nèi)關(guān)于arp參數(shù)的值只影響普通網(wǎng)卡,不影響lo接口,也沒(méi)有意義去影響lo接口。

    [root@xuexi ~]# ls -l /proc/sys/net/ipv4/conf/ total 0 dr-xr-xr-x 1 root root 0 Feb 15 2018 all dr-xr-xr-x 1 root root 0 Feb 15 2018 default dr-xr-xr-x 1 root root 0 Feb 14 22:56 eth0 dr-xr-xr-x 1 root root 0 Feb 14 22:56 eth1 dr-xr-xr-x 1 root root 0 Feb 14 22:56 lo

    其中:

    • default目錄中的變量值為普通網(wǎng)絡(luò)接口提供初始化值(不影響lo接口)。這個(gè)目錄其實(shí)沒(méi)什么用,因?yàn)槊看沃貑⒉僮飨到y(tǒng),/proc/sys下的設(shè)置都會(huì)失效,而直接設(shè)置該目錄下的值又起不到提供初始化值的作用。之所以放在conf目錄內(nèi)是為了提示我們可以設(shè)置default屬性的值。例如,向sysctl.conf中追加永久設(shè)置net.ipv4.conf.default.arp_ignore=1,這樣每次重啟系統(tǒng)后各網(wǎng)卡接口的arp_ignore級(jí)別都是1(注意:普通網(wǎng)卡才生效,lo接口不受影響)。
    • all目錄中的變量作用范圍是所有網(wǎng)卡(不包括lo接口)

    對(duì)于每個(gè)網(wǎng)卡來(lái)說(shuō),將比較all目錄中的變量值和網(wǎng)卡自身的變量值,取較大值。例如:

    conf/eth0/arp_ignore值為1,conf/all/arp_ignore值為0,則對(duì)于eth0接口來(lái)說(shuō),arp_ignore=1。
    conf/lo/arp_announce值為0,conf/all/arp_announce值為2,則對(duì)于lo接口來(lái)說(shuō),arp_announce=0,因?yàn)?span style="color:#ff0000;">all目錄不影響lo接口。但最終,lo接口上設(shè)置的arp參數(shù)值是沒(méi)有意義的。

    通常,VS/TUN和VS/DR模式下,Real Server上的VIP設(shè)置在lo的別名接口上(如lo:0上),因此應(yīng)該如下設(shè)置:

    echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce

    其中生效的為第二條和第四條規(guī)則,第一條和第三條對(duì)lo接口的設(shè)置語(yǔ)句可有可無(wú)。

    將conf/all/arp_ignore設(shè)置為1,可以保證無(wú)論哪個(gè)對(duì)外通信的網(wǎng)卡接口都只會(huì)向外響應(yīng)自己接口上的IP地址(甚至可能有些同網(wǎng)段的接口因?yàn)槁酚身樞蚺旁诤竺娑憫?yīng)不出去),這樣就隱藏了設(shè)置在lo別名接口上的VIP地址。
    將conf/all/arp_announce設(shè)置為2,可以保證本機(jī)只向外通告普通網(wǎng)卡上的IP地址,lo別名接口上的VIP不可能被通告出去

    轉(zhuǎn)載于:https://www.cnblogs.com/wyzhou/p/9742222.html

    總結(jié)

    以上是生活随笔為你收集整理的(2) LVS负载均衡:VS_TUN和VS_DR的arp问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。