lesson2 ovs自動(dòng)回復(fù)arp和icmp請(qǐng)求

目標(biāo)

使用ovs構(gòu)建如下拓?fù)?/p>

ovs-bridge:br-int
          |
    vm1(10.0.0.10) 
  • 使用流表構(gòu)建一個(gè)虛擬的網(wǎng)關(guān),支持
    • vm1向10.0.0.1發(fā)送arp請(qǐng)求,br-int自動(dòng)回復(fù)
    • vm1向10.0.0.1發(fā)送icmp請(qǐng)求,br-int自動(dòng)回復(fù)

實(shí)驗(yàn)環(huán)境

CentOS Linux release 7.2.1511 (Core)

構(gòu)建基礎(chǔ)環(huán)境

git clone https://github.com/cao19881125/ovn_lab.git

cd ovn_lab/docker

docker build -t ovn_lab:v1 .

yum install package/openvswitch-kmod-2.7.90-1.el7.centos.x86_64.rpm

啟動(dòng)容器

cd ovn_lab

OVN_LAB_DIR=`pwd` docker run -it -d --privileged -v $OVN_LAB_DIR/lesson:/root/ovn_lab/lesson --name 'ovn_lab' ovn_lab:v1 bash

docker exec -it ovn_lab bash

創(chuàng)建網(wǎng)絡(luò)拓?fù)?/h2>
start_ovs.sh
/root/ovn_lab/lesson/list/lesson2/create_topo.sh

添加流表

arp reply

add flow

ovs-ofctl add-flow br-int table=0,in_port=1,arp,arp_tpa=10.0.0.1,arp_op=1,actions=move:"NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[]",mod_dl_src:"02:ac:10:ff:01:01",load:"0x02->NXM_OF_ARP_OP[]",move:"NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[]",load:"0x02ac10ff0101->NXM_NX_ARP_SHA[]",move:"NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[]",load:"0x0a000001->NXM_OF_ARP_SPA[]",in_port

測(cè)試

# ip netns exec vm1 ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
# ip netns exec vm1 ip neigh
10.0.0.1 dev vm1 lladdr 02:ac:10:ff:01:01 REACHABLE

可以看到vm1成功拿到了10.0.0.1的虛擬mac地址

解析

  • move:"NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[]" 將請(qǐng)求的源mac作為reply的目標(biāo)mac
  • mod_dl_src:"02:ac:10:ff:01:01" 修改reply的源mac為虛擬網(wǎng)關(guān)的mac
  • load:"0x02->NXM_OF_ARP_OP[]" 修改arp包類(lèi)型為reply包
  • move:"NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[]" 將request包中的源mac賦值給reply的目標(biāo)mac
  • load:"0x02ac10ff0101->NXM_NX_ARP_SHA[]" 設(shè)置reply的源mac
  • move:"NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[]" 將request包中的源ip賦值給reply的目標(biāo)ip
  • load:"0x0a000001->NXM_OF_ARP_SPA[]" 設(shè)置reply包的源ip 為虛擬網(wǎng)關(guān)的ip,格式為十進(jìn)制轉(zhuǎn)換為對(duì)應(yīng)的16進(jìn)制
  • in_port 從進(jìn)入端口發(fā)回去

icmp reply

add flow

ovs-ofctl add-flow br-int table=0,in_port=1,icmp,nw_dst=10.0.0.1,icmp_type=8,icmp_code=0,actions=push:"NXM_OF_ETH_SRC[]",push:"NXM_OF_ETH_DST[]",pop:"NXM_OF_ETH_SRC[]",pop:"NXM_OF_ETH_DST[]",push:"NXM_OF_IP_SRC[]",push:"NXM_OF_IP_DST[]",pop:"NXM_OF_IP_SRC[]",pop:"NXM_OF_IP_DST[]",load:"0xff->NXM_NX_IP_TTL[]",load:"0->NXM_OF_ICMP_TYPE[]",in_port

測(cè)試

# ip netns exec vm1 ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0.343 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0.160 ms

解析

  • push:"NXM_OF_ETH_SRC[]" 將源mac push到棧頂
  • push:"NXM_OF_ETH_DST[]" 將目標(biāo)mac push到棧頂
  • pop:"NXM_OF_ETH_SRC[]" 從棧頂取一個(gè)mac賦值給源mac
  • pop:"NXM_OF_ETH_DST[]" 從棧頂取一個(gè)mac賦值給目標(biāo)mac

以上的這四步完成了源mac和目標(biāo)mac的互換,后面的源ip于目標(biāo)ip的互換同理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network,根據(jù)使用者...
    保川閱讀 5,983評(píng)論 1 13
  • 一、arp_ignore和arp_announce介紹 arp_ignore和arp_announce參數(shù)都和AR...
    Mr蘿卜閱讀 16,937評(píng)論 3 12
  • tcpdump抓包命令 tcpdump是一個(gè)用于截取網(wǎng)絡(luò)分組,并輸出分組內(nèi)容的工具。tcpdump憑借強(qiáng)大的功能和...
    Yihulee閱讀 14,143評(píng)論 0 3
  • 致青春 這支裹蜜的青春箭 閃著鋒銳的光芒 一次次呼嘯著 射向歲月的幽深 那日的花香仍在芬芳 那夜的月光一直在亮 那...
    河南張鵬閱讀 238評(píng)論 1 3
  • 我的魔鬼出現(xiàn)了,在最近十天的很多次,我一步一步的退讓?zhuān)瑓s并沒(méi)有換來(lái)魔鬼的消失,反而變的更加肆虐。 我感到憤怒。 寫(xiě)...
    穆諾閱讀 188評(píng)論 0 0