Help us understand the problem. What is going on with this article?

OpenStack Neutronで、IPv4ネットワーク動作を体験する

Rocky版OpenStack Neutronを活用して、IPv4ネットワークのデプロイ動作を体験してみます。
ただし、デプロイするテナントネットワークは、単一のL3セグメント構成のみです。
外部への通信を想定したルータ環境の配備とか、一切、想定していません。

■ 想定されるNeutron基本動作

IPv4ネットワークをデプロイすると、Network Node上にテナント専用DHCPサーバ環境としてdnsmasqが配備されます。
その後、DHCPv4プロトコルを使用して、クライアント環境にIPv4アドレスが割り当てられれば成功です。

NeutronによるIPv4:IPv6ネットワーク構築.001.png

□ Networkリソース作成時のデプロイ作業の流れ

ここでのNeutron内部処理のゴールは、Neutron Manager内部で保持するデータベースに、テナントネットワークの基本情報を登録する程度でしょう。
この段階では、一切、Compute Node、Network Nodeに対する設定作業は行われません。

□ Subnetリソース作成時のデプロイ作業の流れ

ここでのNeutron内部処理でのゴールは、テナント専用DHCPサーバ環境を配備することです。

NeutronによるIPv4:IPv6ネットワーク構築.002.png

  • NeutronManagerは、Subnetリソースに応じたIPAM機構を配備する
  • Neutron-dhcp-agentは、新たにSubnetリソースが作成されたことを検知する
  • Neutron-dhcp-agentは、NeutronManagerに、DHCP専用のPortリソースの作成を依頼する
  • NeutronManagerは、DHCP専用のPortリソースを作成する
  • NeutronManagerは、DHCPサーバ用Port追加設定を、Neutron-openvswitch-agentに依頼する
  • Neutron-openvswitch-agentは、OpenvSwitchのbr-intブリッジ上に、DHCPサーバ用Portを追加する
  • NeutronManagerは、DHCP環境の配備を、Neutron-dhcp-agentに依頼する
  • Neutron-dhcp-agentは、DHCP専用のPortリソースに基づき、DHCPサーバ環境を整備する
    1. Neutron-dhcp-agentは、DHCP用ネームスペースを作成する
    2. Neutron-dhcp-agentは、DHCP用ネームスペース内にdnsmasq環境を整備する

□ Portリソース作成時のデプロイ作業の流れ

ここでのNeutron内部処理でのゴールは、別途、クライアン環境から、DHCP取得依頼が発生した場合に、IPv4アドレスを配布できるようDHCPサーバ環境を設定することです。

  • NeutronManagerは、Portリソースに対応するMACアドレスを割り当てる
  • NeutronManagerは、IPAM機構にPortリソース情報のエントリする
  • NeutronManagerは、IPAM機構での内部処理に基づき、IPv4アドレスを割り当てる
  • NeutronManagerは、DHCPサーバ環境でのIPv4アドレス払い出し設定を、Neutron-dhcp-agentに依頼する
  • Neutron-dhcp-agentは、dnsmasq設定ファイルに当該エントリを設定する
  • Neutron-dhcp-agentは、dnsmasqプロセスを再起動(kill -HUP)して、エントリ設定を有効化する

■ テナントネットワークのデプロイの作業履歴

Rocky版OpenStack Neutronを使って、Neutron基本動作を、ステップbyステップで確認していきます。

1. OpenvSwitch初期構成の確認

OpenvSwitchの初期状態として動作しているbridge構成を確認しておきます
なお、今回は、all_in_one環境で作業しているので、Compute NodeとNetwork Nodeは、同一サーバで動作しています

(1.1) OpenvSwitchの全体構成を確認する

# ovs-vsctl show
3b782d6f-a956-4c33-85fa-527d9eb2a0d5
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true
    Bridge br-ex
        Port "eth0"
            Interface "eth0"
        Port br-ex
            Interface br-ex
                type: internal
    Bridge br-tun
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port br-tun
            Interface br-tun
                type: internal
        Port patch-int
            Interface patch-int
                type: patch
                options: {peer=patch-tun}
    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.10.1"

(1.2) br-intブリッジに収容されたPortを確認する

# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000b675f3f6eb45
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 3(patch-tun): addr:ce:e0:2b:eb:f5:41
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-int): addr:b6:75:f3:f6:eb:45
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

(1.3) br-exブリッジに収容されたPortを確認する

# ovs-ofctl show br-ex
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000526d7a08dd4d
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 1(eth0): addr:52:54:00:2b:07:df
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-ex): addr:52:6d:7a:08:dd:4d
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

2. Networkリソース作成の作業履歴

実際に、Networkリソースを作成します

(2.1) Networkリソースを作成する

# openstack network create ipv4-net

(2.2) Networkリソースを確認しておく

# openstack network show ipv4-net -f json
{
  "provider:physical_network": null, 
  "ipv6_address_scope": null, 
  "dns_domain": null, 
  "is_vlan_transparent": null, 
  "revision_number": 2, 
  "port_security_enabled": true, 
  "provider:network_type": null, 
  "id": "0c048c13-6884-4fdc-9d1a-491a2143884b", 
  "router:external": "Internal", 
  "availability_zone_hints": "", 
  "availability_zones": "", 
  "segments": null, 
  "name": "ipv4-net", 
  "ipv4_address_scope": null, 
  "shared": false, 
  "project_id": "f2de30617f9d4ac495035a6cf44ad7b9", 
  "status": "ACTIVE", 
  "subnets": "", 
  "description": "", 
  "tags": "", 
  "updated_at": "2020-03-15T23:42:13Z", 
  "is_default": null, 
  "provider:segmentation_id": null, 
  "qos_policy_id": null, 
  "admin_state_up": "UP", 
  "created_at": "2020-03-15T23:42:13Z", 
  "mtu": 1450
}

3. Subnetリソース作成の作業履歴

Subnetリソースを作成します

(3.1) Subnetリソースを作成する

# openstack subnet create --subnet-range 10.0.0.0/24 --network ipv4-net ipv4-subnet1 

(3.2) Subnetリソースを確認しておく

# openstack subnet show ipv4-subnet1 -f json
{
  "service_types": "", 
  "description": "", 
  "enable_dhcp": true, 
  "segment_id": null, 
  "network_id": "0c048c13-6884-4fdc-9d1a-491a2143884b", 
  "created_at": "2020-03-15T23:43:17Z", 
  "tags": "", 
  "dns_nameservers": "", 
  "updated_at": "2020-03-15T23:43:17Z", 
  "ipv6_ra_mode": null, 
  "allocation_pools": "10.0.0.2-10.0.0.254", 
  "gateway_ip": "10.0.0.1", 
  "revision_number": 0, 
  "ipv6_address_mode": null, 
  "ip_version": 4, 
  "host_routes": "", 
  "cidr": "10.0.0.0/24", 
  "project_id": "f2de30617f9d4ac495035a6cf44ad7b9", 
  "id": "e2dc9080-84c7-4c37-bf71-1f1f3bb3f1d8", 
  "subnetpool_id": null, 
  "name": "ipv4-subnet1"
}

(3.3) Portリソース(DHCP)を確認しておく

# openstack port list -f json
[
  {
    "Status": "DOWN", 
    "Fixed IP Addresses": "ip_address='10.0.0.2', subnet_id='e2dc9080-84c7-4c37-bf71-1f1f3bb3f1d8'", 
    "ID": "d1496152-b807-4c38-b350-7c570d0a794d", 
    "MAC Address": "fa:16:3e:a2:b5:b6", 
    "Name": ""
  }
]
# openstack port show d1496152-b807-4c38-b350-7c570d0a794d -f json
{
  "allowed_address_pairs": "", 
  "extra_dhcp_opts": "", 
  "updated_at": "2020-03-15T23:43:18Z", 
  "dns_domain": null, 
  "device_owner": "network:dhcp", 
  "revision_number": 3, 
  "port_security_enabled": false, 
  "fixed_ips": "ip_address='10.0.0.2', subnet_id='e2dc9080-84c7-4c37-bf71-1f1f3bb3f1d8'", 
  "id": "d1496152-b807-4c38-b350-7c570d0a794d", 
  "description": "", 
  "binding_vnic_type": "normal", 
  "qos_policy_id": null, 
  "mac_address": "fa:16:3e:a2:b5:b6", 
  "project_id": "f2de30617f9d4ac495035a6cf44ad7b9", 
  "status": "DOWN", 
  "binding_profile": null, 
  "binding_vif_type": null, 
  "binding_vif_details": null, 
  "tags": "", 
  "dns_assignment": null, 
  "trunk_details": null, 
  "security_group_ids": "", 
  "device_id": "dhcpf4ce2912-1ee5-5084-ac17-a8fe43c4ca19-0c048c13-6884-4fdc-9d1a-491a2143884b", 
  "name": "", 
  "admin_state_up": "UP", 
  "network_id": "0c048c13-6884-4fdc-9d1a-491a2143884b", 
  "dns_name": null, 
  "created_at": "2020-03-15T23:43:18Z", 
  "data_plane_status": null, 
  "binding_host_id": null
}

(3.4) DHCP用ネームスペースが正しく作成されたことを確認する

# ip netns
qdhcp-0c048c13-6884-4fdc-9d1a-491a2143884b (id: 0)
# ip netns exec qdhcp-0c048c13-6884-4fdc-9d1a-491a2143884b ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
8: tapd1496152-b8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether fa:16:3e:a2:b5:b6 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.2/24 brd 10.0.0.255 scope global tapd1496152-b8
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:fea2:b5b6/64 scope link 
       valid_lft forever preferred_lft forever

(3.5) DHCP用ネームスペースで動作するdnsmasqプロセスを確認する

# ps -ef|grep dnsmasq
nobody    3607     1  0 08:43 ?        00:00:00 dnsmasq --no-hosts --no-resolv --pid-file=/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/host --addn-hosts=/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/opts --dhcp-leasefile=/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/leases --dhcp-match=set:ipxe,175 --local-service --bind-interfaces --dhcp-range=set:tag0,10.0.0.0,static,255.255.255.0,86400s --dhcp-option-force=option:mtu,1450 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal

(3.6) dnsmasqの各種設定ファイルを確認する

(3.6.1) hostファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/host
fa:16:3e:a2:b5:b6,host-10-0-0-2.openstacklocal,10.0.0.2

(3.6.2) add_hostファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/addn_hosts
10.0.0.2    host-10-0-0-2.openstacklocal host-10-0-0-2

(3.6.3) optファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/opts
tag:tag0,option:router,10.0.0.1

(3.6.4) leaseファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/leases
1584402201 fa:16:3e:a2:b5:b6 10.0.0.2 host-10-0-0-2 *

(3.7) OpenvSwitchの構成を確認する

(3.7.1) OpenvSwitchの全体構成を確認する

# ovs-vsctl show
3b782d6f-a956-4c33-85fa-527d9eb2a0d5
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true

    ...(snip)

    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "tapd1496152-b8"
            tag: 4095
            Interface "tapd1496152-b8"
                type: internal
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.10.1"

(3.7.2) br-intブリッジに収容されたPortを確認する

# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000b675f3f6eb45
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 2(tapd1496152-b8): addr:fa:16:3e:a2:b5:b6
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 3(patch-tun): addr:ce:e0:2b:eb:f5:41
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-int): addr:b6:75:f3:f6:eb:45
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

4.Portリソース作成の作業履歴

Portリソースを作成します

(4.1) Portリソースを作成する

# openstack port create --network ipv4-net ipv4-port1

(4.2) Portリソースを確認しておく

# openstack port show ipv4-port1 -f json
{
  "allowed_address_pairs": "", 
  "extra_dhcp_opts": "", 
  "updated_at": "2020-03-15T23:53:38Z", 
  "dns_domain": null, 
  "device_owner": "", 
  "revision_number": 2, 
  "port_security_enabled": true, 
  "fixed_ips": "ip_address='10.0.0.4', subnet_id='e2dc9080-84c7-4c37-bf71-1f1f3bb3f1d8'", 
  "id": "51e9bf84-5fb1-429b-a4a8-579c092210d1", 
  "description": "", 
  "binding_vnic_type": "normal", 
  "qos_policy_id": null, 
  "mac_address": "fa:16:3e:22:0b:f1", 
  "project_id": "f2de30617f9d4ac495035a6cf44ad7b9", 
  "status": "DOWN", 
  "binding_profile": null, 
  "binding_vif_type": null, 
  "binding_vif_details": null, 
  "tags": "", 
  "dns_assignment": null, 
  "trunk_details": null, 
  "security_group_ids": "ae012f61-83a5-43e6-9cd8-dfeae6e62110", 
  "device_id": "", 
  "name": "ipv4-port1", 
  "admin_state_up": "UP", 
  "network_id": "0c048c13-6884-4fdc-9d1a-491a2143884b", 
  "dns_name": null, 
  "created_at": "2020-03-15T23:53:38Z", 
  "data_plane_status": null, 
  "binding_host_id": null
}

(4.3) dnsmasqの各種設定ファイルを確認する

(4.3.1) hostファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/host
fa:16:3e:a2:b5:b6,host-10-0-0-2.openstacklocal,10.0.0.2
fa:16:3e:22:0b:f1,host-10-0-0-4.openstacklocal,10.0.0.4

(4.3.2) add_hostファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/addn_hosts
10.0.0.2    host-10-0-0-2.openstacklocal host-10-0-0-2
10.0.0.4    host-10-0-0-4.openstacklocal host-10-0-0-4

(4.3.3) optファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/opts
tag:tag0,option:router,10.0.0.1

(4.3.4) leaseファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/leases
1584402201 fa:16:3e:a2:b5:b6 10.0.0.2 host-10-0-0-2 *

(4.4) OpenvSwitchの構成を確認する

(4.4.1) OpenvSwitchの全体構成を確認する

# ovs-vsctl show
3b782d6f-a956-4c33-85fa-527d9eb2a0d5
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true

    ...(snip)

    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "tapd1496152-b8"
            tag: 4095
            Interface "tapd1496152-b8"
                type: internal
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.10.1"

(4.4.2) br-intブリッジに収容されたPortを確認する

# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000b675f3f6eb45
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 2(tapd1496152-b8): addr:fa:16:3e:a2:b5:b6
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 3(patch-tun): addr:ce:e0:2b:eb:f5:41
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 LOCAL(br-int): addr:b6:75:f3:f6:eb:45
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

■ テナントネットワーク動作確認

DHCPクライアント環境のネットワークインタフェースには、事前に、"fa:16:3e:22:0b:f1"のMACアドレスを設定しておき、DHCPv4プロトコルを使用して、"10.0.0.4"のIPv4アドレスが払い出されることが期待値です

# openstack port show ipv4-port1 -f json
{
  ...(snip)

  "fixed_ips": "ip_address='10.0.0.4', subnet_id='e2dc9080-84c7-4c37-bf71-1f1f3bb3f1d8'", 

  ...(snip)

  "mac_address": "fa:16:3e:22:0b:f1", 

  ...(snip)
}

5. クライアント環境整備の作業履歴

DHCPv4プロトコルを使用して、IPv4アドレスの割り当てが確認できるよう、クライアント環境を整備します

(5.1) client用ネームスペースを作成する

# ip netns add client
# ip netns
client
qdhcp-0c048c13-6884-4fdc-9d1a-491a2143884b (id: 0)

(5.2) vethインターフェイスを作成し、片方の端点をclient用ネームスペースに設定する

# ip link add ovs-veth0 type veth peer name client-veth0
# ip link set client-veth0 netns client

(5.3) OpenvSwitchbr-int構成を確認し、各Port収容で使用しているtagを把握しておく(この例の場合だと、"4095"である)

# ovs-vsctl show
3b782d6f-a956-4c33-85fa-527d9eb2a0d5
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true

    ...(snip)

    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "tapd1496152-b8"
            tag: 4095
            Interface "tapd1496152-b8"
                type: internal
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.10.1"

(5.4) vethインターフェイスの対向側の端点をOpenvSwitchのbr-intに収容設定する

# ovs-vsctl add-port br-int ovs-veth0 tag=4095
# ovs-vsctl show
3b782d6f-a956-4c33-85fa-527d9eb2a0d5
    Manager "ptcp:6640:127.0.0.1"
        is_connected: true

    ...(snip)

    Bridge br-int
        Controller "tcp:127.0.0.1:6633"
            is_connected: true
        fail_mode: secure
        Port "tapd1496152-b8"
            tag: 4095
            Interface "tapd1496152-b8"
                type: internal
        Port "ovs-veth0"
            tag: 4095
            Interface "ovs-veth0"
        Port br-int
            Interface br-int
                type: internal
        Port patch-tun
            Interface patch-tun
                type: patch
                options: {peer=patch-int}
    ovs_version: "2.10.1"

(5.5) client側vethインターフェイスにMACアドレスを設定する

# ip netns exec client ip link set dev client-veth0 address fa:16:3e:22:0b:f1
# ip netns exec client ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: client-veth0@if10: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether fa:16:3e:22:0b:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 0

(5.6) vethインターフェイスをUPに設定する

# ip netns exec client ip link set client-veth0 up
# ip link set ovs-veth0 up
# ip netns exec client ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: client-veth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fa:16:3e:22:0b:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet6 fe80::f816:3eff:fe22:bf1/64 scope link 
       valid_lft forever preferred_lft forever
# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000b675f3f6eb45
n_tables:254, n_buffers:0
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
 2(tapd1496152-b8): addr:fa:16:3e:a2:b5:b6
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 3(patch-tun): addr:ce:e0:2b:eb:f5:41
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max
 4(ovs-veth0): addr:2e:51:c2:35:ec:2b
     config:     0
     state:      0
     current:    10GB-FD COPPER
     speed: 10000 Mbps now, 0 Mbps max
 LOCAL(br-int): addr:b6:75:f3:f6:eb:45
     config:     PORT_DOWN
     state:      LINK_DOWN
     speed: 0 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0

6. dhclient動作確認の作業履歴

実際に、DHCPv4プロトコルを使用して、IPv4アドレスの割り当てを確認します

(6.1) dhclientを起動する

# ip netns exec client dhclient client-veth0

(6.2) DHCPv4プロトコルで払い出されたIPv4動作を確認する

(6.2.1) IPv4アドレスを確認する

# ip netns exec client ip a
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
9: client-veth0@if10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
    link/ether fa:16:3e:22:0b:f1 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.0.0.4/24 brd 10.0.0.255 scope global dynamic client-veth0
       valid_lft 86393sec preferred_lft 86393sec
    inet6 fe80::f816:3eff:fe22:bf1/64 scope link 
       valid_lft forever preferred_lft forever

(6.2.2) ルーティング情報を確認する

# ip netns exec client ip route show
default via 10.0.0.1 dev client-veth0 
10.0.0.0/24 dev client-veth0 proto kernel scope link src 10.0.0.4 

(6.2.3) DHCPサーバとの疎通性を確認する

# ip netns exec client ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=0.675 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=0.102 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=0.102 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=0.103 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3000ms
rtt min/avg/max/mdev = 0.102/0.245/0.675/0.248 ms

(6.3) dnsmasqの各種設定ファイルを確認する

(6.3.1) hostファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/host
fa:16:3e:a2:b5:b6,host-10-0-0-2.openstacklocal,10.0.0.2
fa:16:3e:22:0b:f1,host-10-0-0-4.openstacklocal,10.0.0.4

(6.3.2) leaseファイルを確認する

/var/lib/neutron/dhcp/0c048c13-6884-4fdc-9d1a-491a2143884b/leases
1584403881 fa:16:3e:22:0b:f1 10.0.0.4 host-10-0-0-4 *
1584402201 fa:16:3e:a2:b5:b6 10.0.0.2 host-10-0-0-2 *

(6.4) DHCPクライアントでのlease情報を確認する

/var/lib/dhclient/dhclient.leases
lease {
  interface "client-veth0";
  fixed-address 10.0.0.4;
  option subnet-mask 255.255.255.0;
  option routers 10.0.0.1;
  option dhcp-lease-time 86400;
  option dhcp-message-type 5;
  option domain-name-servers 10.0.0.2;
  option dhcp-server-identifier 10.0.0.2;
  option interface-mtu 1450;
  option dhcp-renewal-time 43200;
  option broadcast-address 10.0.0.255;
  option dhcp-rebinding-time 75600;
  option host-name "host-10-0-0-4";
  option domain-name "openstacklocal";
  renew 1 2020/03/16 09:32:04;
  rebind 1 2020/03/16 21:11:21;
  expire 2 2020/03/17 00:11:21;
}

DHCPクライアント環境に、"10.0.0.4/24"のIPv4アドレスが割り当てられたことが確認できました。

以上です。

ttsubo
SDN分野に興味があります。 ただいま、golangを勉強中です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away