アドレススコープ

アドレススコープ

アドレススコープは、サブネットプールを利用して作成されます。サブネットプールはサブネットへのアドレス割り当てを制御する仕組みを提供するのに対して、アドレススコープはどのアドレスがネットワーク間でルーティング可能かを示します。 1 つのアドレススコープ内で割り当てられたアドレスはすべて重複しないため、 neutron ルーターはテナントネットワーク間や外部ネットワークとの間で NAT を行いません。アドレスのアドレススコープが一致する限り、 Networking サービスはネットワーク間では通常のルーティングを行います。

アドレススコープの利用

Networking サービスにアクセスできるユーザーは誰でも自分のアドレススコープを作成できます。一方、ネットワーク管理者は共有のアドレススコープを作成できます。共有のアドレススコープを使うと、他のプロジェクトがそのアドレススコープ内にネットワークを作成できます。

スコープ内のアドレスへのアクセスはサブネットプールを通じて管理されます。サブネットプールをアドレススコープ内に作成することも、サブネットプールを更新してアドレススコープに所属させることもできます。

サブネットプールが複数ある場合、アドレス管理の観点では、そのアドレススコープ内で使用されるすべてのアドレスは一意になります。したがって、プールに所有者が複数おり、アドレススコープの一部の管理を委譲するには、アドレススコープに複数のサブネットプールを追加します。この委譲では、アドレススコープ全体でアドレスの重複は防止されます。 2 つのプールが同じアドレス範囲を持つ場合にはエラーが発生します。

各ルーターインターフェースは、そのインターフェースが接続されたネットワークのサブネットを参照し、アドレススコープと関連付けされます。ルーターをアドレススコープが一致する外部ネットワークに接続した場合、ネットワークトラフィックは NAT (ネットワークアドレス変換) なしでルーティングされます。ルーターは、内部では、各インターフェースからのすべてのトラフィック接続を対応するアドレススコープと関連付けます。トラフィックが間違ったスコープのインターフェースからやって来た場合は、ルーターはそのトラフィックをブロックします。

後方互換性

Mitaka リリースより前に作成されたネットワークは、明示的なアドレススコープを持ちません。ただし、ネットワークのサブネットが、作成、更新されたアドレススコープに属すサブネットプールから作られている場合はこの限りではありません。 Networking サービスは、特別なアドレススコープを使うことで Mitaka リリースより前に作成されたネットワークに対する後方互換性を実現しており、こうしたネットワークでは以下のようなルーティングが行われます。

  1. 無制限のアドレス重複が許可されます。

  2. デフォルトでは、Neutron ルーターは、内部ネットワークから外部ネットワークへのトラフィックに対して NAT を行います。

  3. Mitaka リリース以前用のアドレススコープは API 経由では見えません。このスコープはアドレススコープの一覧には出て来ませんし、詳細を見ることもできません。このスコープは、明示的にスコープが指定されていないすべてのアドレスを暗黙のうちに収容するためだけに存在します。

管理者での共有アドレススコープの作成

このセクションでは、共有アドレススコープを用意し、同じサブネットプールのプロジェクトネットワーク間では通常のルーティングが行うようにする方法を説明します。

注釈

分かりやすくするため、これらのコマンドの出力のうち無関係なフィールドは省略しています。

  1. IPv6 と IPv4 のアドレススコープを作成します。

    $ neutron address-scope-create --shared address-scope-ip6 6
    Created a new address_scope:
    +------------+--------------------------------------+
    | Field      | Value                                |
    +------------+--------------------------------------+
    | id         | 13b83fb2-beb4-4533-9e12-4bf9a5721ef5 |
    | ip_version | 6                                    |
    | name       | address-scope-ip6                    |
    | shared     | True                                 |
    +------------+--------------------------------------+
    
    $ neutron address-scope-create --shared address-scope-ip4 4
    Created a new address_scope:
    +------------+--------------------------------------+
    | Field      | Value                                |
    +------------+--------------------------------------+
    | id         | 97702525-e145-40c8-8c8f-d415930d12ce |
    | ip_version | 4                                    |
    | name       | address-scope-ip4                    |
    | shared     | True                                 |
    +------------+--------------------------------------+
    
  2. サブネットプールが所属するアドレススコープの名前 (または UUID) を指定してサブネットプールを作成します。既存のサブネットプールがある場合、 subnetpool-update コマンドを使って、既存のサブネットプールを新しいアドレススコープに所属させることもできます。

    $ neutron subnetpool-create --address-scope address-scope-ip6 \
      --shared --pool-prefix 2001:db8:a583::/48 --default-prefixlen 64 \
      subnet-pool-ip6
    Created a new subnetpool:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | address_scope_id  | 13b83fb2-beb4-4533-9e12-4bf9a5721ef5 |
    | default_prefixlen | 64                                   |
    | id                | 14813344-d11a-4896-906c-e4c378291058 |
    | ip_version        | 6                                    |
    | name              | subnet-pool-ip6                      |
    | prefixes          | 2001:db8:a583::/48                   |
    | shared            | True                                 |
    +-------------------+--------------------------------------+
    
    $ neutron subnetpool-create --address-scope address-scope-ip4 \
      --shared --pool-prefix 203.0.113.0/21 --default-prefixlen 26 \
      subnet-pool-ip4
    Created a new subnetpool:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | address_scope_id  | 97702525-e145-40c8-8c8f-d415930d12ce |
    | default_prefixlen | 26                                   |
    | id                | e2c4f12d-307f-4616-a4df-203a45e6cb7f |
    | ip_version        | 4                                    |
    | name              | subnet-pool-ip4                      |
    | prefixes          | 203.0.112.0/21                       |
    | shared            | True                                 |
    +-------------------+--------------------------------------+
    
  3. 外部ネットワークのサブネットは、上記で作成したサブネットプールから作成してください。

    $ neutron subnet-show ipv6-public-subnet
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 2001:db8::/64                        |
    | enable_dhcp       | False                                |
    | gateway_ip        | 2001:db8::2                          |
    | id                | 8e9299bf-5c48-4143-b081-010ba26636a2 |
    | ip_version        | 6                                    |
    | name              | ipv6-public-subnet                   |
    | network_id        | d2ac8578-7e86-4646-849a-afdf5a05fff0 |
    | subnetpool_id     | 14813344-d11a-4896-906c-e4c378291058 |
    +-------------------+--------------------------------------+
    
    $ neutron subnet-show public-subnet
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 172.24.4.0/24                        |
    | enable_dhcp       | False                                |
    | gateway_ip        | 172.24.4.1                           |
    | id                | 3c3029d2-8081-4e56-9842-6007ce742860 |
    | ip_version        | 4                                    |
    | name              | public-subnet                        |
    | network_id        | d2ac8578-7e86-4646-849a-afdf5a05fff0 |
    | subnetpool_id     | e2c4f12d-307f-4616-a4df-203a45e6cb7f |
    +-------------------+--------------------------------------+
    

非特権ユーザーでのアドレススコープによるルーティング

このセクションでは、非特権ユーザーがアドレススコープを使って、外部ネットワークと NAT なしでそのままルーティングする方法を説明します。

  1. サブネットを収容するネットワークを作成します。

    $ neutron net-create network1
    Created a new network:
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | id                      | f5a980d9-5521-438e-b831-0ebacba2b372 |
    | name                    | network1                             |
    | subnets                 |                                      |
    +-------------------------+--------------------------------------+
    
    $ neutron net-create network2
    Created a new network:
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | id                      | 438e4f26-0e45-4b26-9797-57d0bd817953 |
    | name                    | network2                             |
    | subnets                 |                                      |
    +-------------------------+--------------------------------------+
    
  2. サブネットプールにもアドレススコープにも関連付けられないサブネットを作成します。

    $ neutron subnet-create --name subnet-ip4-1 network1 198.51.100.0/26
    Created a new subnet:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 198.51.100.0/26                      |
    | id                | 48ed5c71-2a1d-4f73-b29e-371deec04d44 |
    | name              | subnet-ip4-1                         |
    | network_id        | f5a980d9-5521-438e-b831-0ebacba2b372 |
    | subnetpool_id     |                                      |
    +-------------------+--------------------------------------+
    
    $ neutron subnet-create --name subnet-ip6-1 network1 \
      --ipv6-ra-mode slaac --ipv6-address-mode slaac \
      --ip_version 6 2001:db8:80d2:c4d3::/64
    Created a new subnet:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 2001:db8:80d2:c4d3::/64              |
    | id                | c9f0bb79-1d7b-435f-b362-05a9a7259aa6 |
    | name              | subnet-ip6-1                         |
    | network_id        | f5a980d9-5521-438e-b831-0ebacba2b372 |
    | subnetpool_id     |                                      |
    +-------------------+--------------------------------------+
    
  3. 外部ネットワークと同じアドレススコープに関連付けられたサブネットプールを使ってサブネットを作成します。

    $ neutron subnet-create --name subnet-ip4-2 \
      --subnetpool subnet-pool-ip4 network2
    Created a new subnet:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 203.0.112.0/26                       |
    | id                | deb36645-8d46-4c13-a489-1135174d8a8c |
    | name              | subnet-ip4-2                         |
    | network_id        | 438e4f26-0e45-4b26-9797-57d0bd817953 |
    | subnetpool_id     | e2c4f12d-307f-4616-a4df-203a45e6cb7f |
    +-------------------+--------------------------------------+
    
    $ neutron subnet-create --name subnet-ip6-2 --ip_version 6 \
      --ipv6-ra-mode slaac --ipv6-address-mode slaac \
      --subnetpool subnet-pool-ip6 network2
    Created a new subnet:
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | cidr              | 2001:db8:a583::/64                   |
    | id                | b157e288-748e-4c4b-9b2e-8b8e65241036 |
    | name              | subnet-ip6-2                         |
    | network_id        | 438e4f26-0e45-4b26-9797-57d0bd817953 |
    | subnetpool_id     | 14813344-d11a-4896-906c-e4c378291058 |
    +-------------------+--------------------------------------+
    

    アドレススコープに関連付けられたサブネットプールからサブネットを作成することで、そのネットワークはアドレススコープと関連付けられます。

    $ neutron net-show network2
    +-------------------------+--------------------------------------+
    | Field                   | Value                                |
    +-------------------------+--------------------------------------+
    | id                      | 4f677ab6-32a1-452c-8feb-b0b6b7ed1a0f |
    | ipv4_address_scope      | 97702525-e145-40c8-8c8f-d415930d12ce |
    | ipv6_address_scope      | 13b83fb2-beb4-4533-9e12-4bf9a5721ef5 |
    | name                    | network2                             |
    | subnets                 | d5d68ac3-3eaa-439e-b75b-0e0b2c1d221a |
    |                         | 917f9360-a840-45c1-83a1-2a093bd7b376 |
    +-------------------------+--------------------------------------+
    
  4. 作成したそれぞれのサブネットをルーターに接続します。例えば、 router1 という名前のルーターを使用します。

    $ neutron router-interface-add router1 subnet-ip4-1
    Added interface 73d832e1-e4a7-4029-9a66-f4e0f4ba0e76 to router router1.
    $ neutron router-interface-add router1 subnet-ip4-2
    Added interface 94b4cdb2-875d-4ab3-9a6e-803c3626c4d9 to router router1.
    $ neutron router-interface-add router1 subnet-ip6-1
    Added interface f35c4541-d529-4bd8-af4e-1b069269c263 to router router1.
    $ neutron router-interface-add router1 subnet-ip6-2
    Added interface f5904a4b-9547-4c08-bc7e-bc5fc71a8db9 to router router1.
    

接続性の確認

この例では、アドレススコープに所属するネットワーク間での接続性を確認します。

  1. 2 つのインスタンス、 network1instance1 を、 network2instance2 を起動します。両方のインスタンスに Floating IP アドレスを付与します。

  2. ping と SSH を許可するようにセキュリティーグループを調整します (IPv4 と IPv6 の両方)。

    $ nova list
    +--------------+-----------+---------------------------------------------------------------------------+
    | ID           | Name      | Networks                                                                  |
    +--------------+-----------+---------------------------------------------------------------------------+
    | 97e49c8e-... | instance1 | network1=2001:db8:80d2:c4d3:f816:3eff:fe52:b69f, 198.51.100.3, 172.24.4.3 |
    | ceba9638-... | instance2 | network2=203.0.112.3, 2001:db8:a583:0:f816:3eff:fe42:1eeb, 172.24.4.4     |
    +--------------+-----------+---------------------------------------------------------------------------+
    

アドレススコープに関係なく、 Floating IP には外部ネットワークから ping が可能です。

$ ping -c 1 172.24.4.3
1 packets transmitted, 1 received, 0% packet loss, time 0ms
$ ping -c 1 172.24.4.4
1 packets transmitted, 1 received, 0% packet loss, time 0ms

instance2 は外部ネットワークと同じアドレススコープに属しているため、 instance2 には直接 ping することもできます。

注釈

BGP ルーティングを使うと、インスタンスへの静的経路を自動的に設定できます。

# ip route add 203.0.112.0/26 via 172.24.4.2
$ ping -c 1 203.0.112.3
1 packets transmitted, 1 received, 0% packet loss, time 0ms
# ip route add 2001:db8:a583::/64 via 2001:db8::1
$ ping6 -c 1 2001:db8:a583:0:f816:3eff:fe42:1eeb
1 packets transmitted, 1 received, 0% packet loss, time 0ms

アドレススコープが一致しないので、 instance1 には ping が直接では届きません。

# ip route add 198.51.100.0/26 via 172.24.4.2
$ ping -c 1 198.51.100.3
1 packets transmitted, 0 received, 100% packet loss, time 0ms
# ip route add 2001:db8:80d2:c4d3::/64 via 2001:db8::1
$ ping6 -c 1 2001:db8:80d2:c4d3:f816:3eff:fe52:b69f
1 packets transmitted, 0 received, 100% packet loss, time 0ms

ネットワーク間でアドレススコープが一致する場合、 ping (やその他のトラフィック) はルーターでそのまま転送されます。ネットワーク間でアドレススコープが一致しない場合、ルーターはそのトラフィックを破棄するか、スコープ境界をまたぐため NAT を行います。

Creative Commons Attribution 3.0 License

Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.