centos ovn 搭建测试(六:DHCP)

DHCP 功能测试

参考链接:

https://blog.oddbit.com/post/2019-12-19-ovn-and-dhcp/

https://lk668.github.io/2020/09/21/2020-09-21-ovn-dhcp-for-external-host/

https://www.jianshu.com/p/bf5c754b2a9a

 

1)server_id – the ip address of the virtual dhcp server
2)server_mac – the MAC address of the virtual dhcp server
3)lease_time – the lifetime of DHCP leases

 # 创建DHCP选项

//创建 dhcp 选项,网段为 1.1.1.0/24
ovn-nbctl dhcp-options-create 1.1.1.0/24

// 用下面的命令来获取DHCP option的uuid
CIDR_UUID=$(ovn-nbctl --bare --columns=_uuid find dhcp_options cidr="1.1.1.0/24")

//查看刚创建的 dhcp 选项UUID//通过 UUID 设置此 dhcp 选项的其他参数
ovn-nbctl dhcp-options-set-options $CIDR_UUID server_id=1.1.1.1 server_mac=00:00:00:00:00:01 lease_time=3600 router=1.1.1.1

# 查看DHCP选项

[root@ovn-master ~]# ovn-nbctl list dhcp_options
_uuid               : 4fdee846-b3d9-47d4-bcae-8209d07f84be
cidr                : "1.1.1.0/24"
external_ids        : {}
options             : {lease_time="3600", router="1.1.1.1", server_id="1.1.1.1", server_mac="00:00:00:00:00:01"}

# 创建逻辑port并关联上DHCP

//设置 logical_switch_port 的 dhcp 字段,指向上面创建的 dhcp 选项
ovn-nbctl ls-add ls
ovn-nbctl set logical_switch ls other_config:subnet="1.1.1.0/24" other_config:exclude_ips="1.1.1.1..1.1.1.10"
ovn-nbctl lsp-add ls ls-veth1
ovn-nbctl lsp-set-dhcpv4-options ls-veth1 $CIDR_UUID
ovn-nbctl lsp-set-addresses ls-veth1 "00:00:00:11:22:33 dynamic"

# 查看逻辑port信息

[root@ovn-master ~]#  ovn-nbctl list logical_switch_port
_uuid               : 7450afaf-3972-47f1-b6c7-5b9522d1c855
addresses           : ["00:00:00:11:22:33 dynamic"]
dhcpv4_options      : 4fdee846-b3d9-47d4-bcae-8209d07f84be
dhcpv6_options      : []
dynamic_addresses   : "00:00:00:11:22:33 1.1.1.11"
enabled             : []
external_ids        : {}
ha_chassis_group    : []
name                : "ls-veth1"
options             : {}
parent_name         : []
port_security       : []
tag                 : []
tag_request         : []
type                : ""
up                  : false

# 查看OVN配置

[root@ovn-master ~]# ovn-nbctl show
switch d721282c-8ed3-450a-9364-319fd2511ed7 (ls)
    port ls-veth1
        addresses: ["00:00:00:11:22:33 dynamic"]

# 创建命名空间测试

ip netns add ns1
ip link add veth1 type veth peer name veth2
ifconfig veth1 up
ifconfig veth2 up
ip link set veth2 netns ns1
ip netns exec ns1 ip link set veth2 address 00:00:00:11:22:33
ip netns exec ns1 ip link set veth2 up

ovs-vsctl add-port br-int  veth1
ovs-vsctl set Interface veth1 external_ids:iface-id=ls-veth1 

 # 命名空间使用dhclient获取IP地址

[root@ovn-master ~]# ip netns exec ns1 dhclient -v -i veth2 --no-pid
Internet Systems Consortium DHCP Client 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/veth2/00:00:00:11:22:33
Sending on   LPF/veth2/00:00:00:11:22:33
Sending on   Socket/fallback
DHCPDISCOVER on veth2 to 255.255.255.255 port 67 interval 6 (xid=0x2dfa6d8e)
DHCPREQUEST on veth2 to 255.255.255.255 port 67 (xid=0x2dfa6d8e)
DHCPOFFER from 1.1.1.1
DHCPACK from 1.1.1.1 (xid=0x2dfa6d8e)
bound to 1.1.1.11 -- renewal in 1715 seconds.

# ovn-trace 分析

[root@ovn-master ~]#  ovn-trace --detailed ls 'inport=="ls-veth1" && eth.src==00:00:00:11:22:33 && ip4.src==0.0.0.0 && ip.ttl==1 && ip4.dst==255.255.255.255 &&  udp.src==68 && udp.dst==67'
# udp,reg14=0x1,vlan_tci=0x0000,dl_src=00:00:00:11:22:33,dl_dst=00:00:00:00:00:00,nw_src=0.0.0.0,nw_dst=255.255.255.255,nw_tos=0,nw_ecn=0,nw_ttl=1,tp_src=68,tp_dst=67

ingress(dp="ls", inport="ls-veth1")
-----------------------------------
 0. ls_in_port_sec_l2 (ovn-northd.c:4843): inport == "ls-veth1", priority 50, uuid 22d6b189
    next;
12. ls_in_dhcp_options (ovn-northd.c:5091): inport == "ls-veth1" && eth.src == 00:00:00:11:22:33 && ip4.src == 0.0.0.0 && ip4.dst == 255.255.255.255 && udp.src == 68 && udp.dst == 67, priority 100, uuid 885ada30
    reg0[3] = put_dhcp_opts(offerip = 1.1.1.11, lease_time = 3600, netmask = 255.255.255.0, router = 1.1.1.1, server_id = 1.1.1.1);
    /* We assume that this packet is DHCPDISCOVER or DHCPREQUEST. */
    next;
13. ls_in_dhcp_response (ovn-northd.c:5135): inport == "ls-veth1" && eth.src == 00:00:00:11:22:33 && ip4 && udp.src == 68 && udp.dst == 67 && reg0[3], priority 100, uuid a2b828b5
    eth.dst = eth.src;
    eth.src = 00:00:00:00:00:01;
    ip4.dst = 1.1.1.11;
    ip4.src = 1.1.1.1;
    udp.src = 67;
    udp.dst = 68;
    outport = inport;
    flags.loopback = 1;
    output;

egress(dp="ls", inport="ls-veth1", outport="ls-veth1")
------------------------------------------------------
 4. ls_out_acl (ovn-northd.c:4458): outport == "ls-veth1" && eth.src == 00:00:00:00:00:01 && ip4.src == 1.1.1.1 && udp && udp.src == 67 && udp.dst == 68, priority 34000, uuid ed03ee7b
    next;
 9. ls_out_port_sec_l2 (ovn-northd.c:5503): outport == "ls-veth1", priority 50, uuid 616f3e20
    output;
    /* output to "ls-veth1", type "" */

# 流表分析

// dhcp request

 cookie=0x885ada30, duration=1833.223s, table=20, n_packets=2, n_bytes=684, priority=100,udp,reg14=0x1,metadata=0xa,dl_src=00:00:00:11:22:33,nw_src=0.0.0.0,nw_dst=255.255.255.255,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.01.01.01.0b.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.01.01.01.01.36.04.01.01.01.01,pause),resubmit(,21)
 cookie=0x10668e38, duration=1833.223s, table=20, n_packets=0, n_bytes=0, priority=100,udp,reg14=0x1,metadata=0xa,dl_src=00:00:00:11:22:33,nw_src=1.1.1.11,nw_dst=1.1.1.1,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.01.01.01.0b.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.01.01.01.01.36.04.01.01.01.01,pause),resubmit(,21)

// dhcp discover
cookie=0x885ada30, duration=1833.223s, table=20, n_packets=2, n_bytes=684, priority=100,udp,reg14=0x1,metadata=0xa,dl_src=00:00:00:11:22:33,nw_src=0.0.0.0,nw_dst=255.255.255.255,tp_src=68,tp_dst=67 actions=controller(userdata=00.00.00.02.00.00.00.00.00.01.de.10.00.00.00.63.01.01.01.0b.33.04.00.00.0e.10.01.04.ff.ff.ff.00.03.04.01.01.01.01.36.04.01.01.01.01,pause),resubmit(,21)

// 所有的包回复 
cookie=0xa2b828b5, duration=1816.443s, table=21, n_packets=2, n_bytes=636, priority=100,udp,reg0=0x8/0x8,reg14=0x1,metadata=0xa,dl_src=00:00:00:11:22:33,tp_src=68,tp_dst=67 actions=move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_DST[],mod_dl_src:00:00:00:00:00:01,mod_nw_dst:1.1.1.11,mod_nw_src:1.1.1.1,mod_tp_src:67,mod_tp_dst:68,move:NXM_NX_REG14[]->NXM_NX_REG15[],load:0x1->NXM_NX_REG10[0],resubmit(,32)

 

posted @ 2022-07-22 11:38  salami_china  阅读(598)  评论(0编辑  收藏  举报