アドレススコープ

アドレススコープ

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

アドレススコープの利用

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

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

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

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

後方互換性

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

  1. 無制限のアドレス重複が許可されます。
  2. デフォルトでは、Neutron ルーターは、内部ネットワークから外部ネットワークへのトラフィックに対して NAT を行います。
  3. Mitaka リリース以前用のアドレススコープは API 経由では見えません。このスコープはアドレススコープの一覧には出て来ませんし、詳細を見ることもできません。このスコープは、明示的にスコープが指定されていないすべてのアドレスを暗黙のうちに収容するためだけに存在します。

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

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

注釈

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

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

    $ openstack address scope create --share --ip-version 6 address-scope-ip6
    
    +------------+--------------------------------------+
    | Field      | Value                                |
    +------------+--------------------------------------+
    | headers    |                                      |
    | id         | 28424dfc-9abd-481b-afa3-1da97a8fead7 |
    | ip_version | 6                                    |
    | name       | address-scope-ip6                    |
    | project_id | 098429d072d34d3596c88b7dbf7e91b6     |
    | shared     | True                                 |
    +------------+--------------------------------------+
    
    $ openstack address scope create --share --ip-version 4 address-scope-ip4
    
    +------------+--------------------------------------+
    | Field      | Value                                |
    +------------+--------------------------------------+
    | headers    |                                      |
    | id         | 3193bd62-11b5-44dc-acf8-53180f21e9f2 |
    | ip_version | 4                                    |
    | name       | address-scope-ip4                    |
    | project_id | 098429d072d34d3596c88b7dbf7e91b6     |
    | shared     | True                                 |
    +------------+--------------------------------------+
    
  2. サブネットプールが所属するアドレススコープの名前 (または UUID) を指定してサブネットプールを作成します。既存のサブネットプールがある場合、 openstack subnet pool set コマンドを使って、既存のサブネットプールを新しいアドレススコープに所属させることもできます。

    $ openstack subnet pool create --address-scope address-scope-ip6 \
    --share --pool-prefix 2001:db8:a583::/48 --default-prefix-length 64 \
    subnet-pool-ip6
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | address_scope_id  | 28424dfc-9abd-481b-afa3-1da97a8fead7 |
    | created_at        | 2016-12-13T22:53:30Z                 |
    | default_prefixlen | 64                                   |
    | default_quota     | None                                 |
    | description       |                                      |
    | id                | a59ff52b-0367-41ff-9781-6318b927dd0e |
    | ip_version        | 6                                    |
    | is_default        | False                                |
    | max_prefixlen     | 128                                  |
    | min_prefixlen     | 64                                   |
    | name              | subnet-pool-ip6                      |
    | prefixes          | 2001:db8:a583::/48                   |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 1                                    |
    | shared            | True                                 |
    | updated_at        | 2016-12-13T22:53:30Z                 |
    +-------------------+--------------------------------------+
    
    $ openstack subnet pool create --address-scope address-scope-ip4 \
    --share --pool-prefix 203.0.113.0/24 --default-prefix-length 26 \
    subnet-pool-ip4
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | address_scope_id  | 3193bd62-11b5-44dc-acf8-53180f21e9f2 |
    | created_at        | 2016-12-13T22:55:09Z                 |
    | default_prefixlen | 26                                   |
    | default_quota     | None                                 |
    | description       |                                      |
    | id                | d02af70b-d622-426f-8e60-ed9df2a8301f |
    | ip_version        | 4                                    |
    | is_default        | False                                |
    | max_prefixlen     | 32                                   |
    | min_prefixlen     | 8                                    |
    | name              | subnet-pool-ip4                      |
    | prefixes          | 203.0.113.0/24                       |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 1                                    |
    | shared            | True                                 |
    | updated_at        | 2016-12-13T22:55:09Z                 |
    +-------------------+--------------------------------------+
    
  3. 外部ネットワークのサブネットは、上記で作成したサブネットプールから作成してください。

    $ openstack subnet show ipv6-public-subnet
    +-------------------+------------------------------------------+
    | Field             | Value                                    |
    +-------------------+------------------------------------------+
    | allocation_pools  | 2001:db8:a583::2-2001:db8:a583:0:ffff:ff |
    |                   | ff:ffff:ffff                             |
    | cidr              | 2001:db8:a583::/64                       |
    | created_at        | 2016-12-10T21:36:04Z                     |
    | description       |                                          |
    | dns_nameservers   |                                          |
    | enable_dhcp       | False                                    |
    | gateway_ip        | 2001:db8:a583::1                         |
    | host_routes       |                                          |
    | id                | b333bf5a-758c-4b3f-97ec-5f12d9bfceb7     |
    | ip_version        | 6                                        |
    | ipv6_address_mode | None                                     |
    | ipv6_ra_mode      | None                                     |
    | name              | ipv6-public-subnet                       |
    | network_id        | 05a8d31e-330b-4d96-a3fa-884b04abfa4c     |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6         |
    | revision_number   | 2                                        |
    | segment_id        | None                                     |
    | service_types     |                                          |
    | subnetpool_id     | a59ff52b-0367-41ff-9781-6318b927dd0e     |
    | updated_at        | 2016-12-10T21:36:04Z                     |
    +-------------------+------------------------------------------+
    
    $ openstack subnet show public-subnet
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | 203.0.113.2-203.0.113.62             |
    | cidr              | 203.0.113.0/26                       |
    | created_at        | 2016-12-10T21:35:52Z                 |
    | description       |                                      |
    | dns_nameservers   |                                      |
    | enable_dhcp       | False                                |
    | gateway_ip        | 203.0.113.1                          |
    | host_routes       |                                      |
    | id                | 7fd48240-3acc-4724-bc82-16c62857edec |
    | ip_version        | 4                                    |
    | ipv6_address_mode | None                                 |
    | ipv6_ra_mode      | None                                 |
    | name              | public-subnet                        |
    | network_id        | 05a8d31e-330b-4d96-a3fa-884b04abfa4c |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 2                                    |
    | segment_id        | None                                 |
    | service_types     |                                      |
    | subnetpool_id     | d02af70b-d622-426f-8e60-ed9df2a8301f |
    | updated_at        | 2016-12-10T21:35:52Z                 |
    +-------------------+--------------------------------------+
    

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

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

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

    $ openstack network create network1
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | UP                                   |
    | availability_zone_hints   |                                      |
    | availability_zones        |                                      |
    | created_at                | 2016-12-13T23:21:01Z                 |
    | description               |                                      |
    | headers                   |                                      |
    | id                        | 1bcf3fe9-a0cb-4d88-a067-a4d7f8e635f0 |
    | ipv4_address_scope        | None                                 |
    | ipv6_address_scope        | None                                 |
    | mtu                       | 1450                                 |
    | name                      | network1                             |
    | port_security_enabled     | True                                 |
    | project_id                | 098429d072d34d3596c88b7dbf7e91b6     |
    | provider:network_type     | vxlan                                |
    | provider:physical_network | None                                 |
    | provider:segmentation_id  | 94                                   |
    | revision_number           | 3                                    |
    | router:external           | Internal                             |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tags                      | []                                   |
    | updated_at                | 2016-12-13T23:21:01Z                 |
    +---------------------------+--------------------------------------+
    
    $ openstack network create network2
    +---------------------------+--------------------------------------+
    | Field                     | Value                                |
    +---------------------------+--------------------------------------+
    | admin_state_up            | UP                                   |
    | availability_zone_hints   |                                      |
    | availability_zones        |                                      |
    | created_at                | 2016-12-13T23:21:45Z                 |
    | description               |                                      |
    | headers                   |                                      |
    | id                        | 6c583603-c097-4141-9c5c-288b0e49c59f |
    | ipv4_address_scope        | None                                 |
    | ipv6_address_scope        | None                                 |
    | mtu                       | 1450                                 |
    | name                      | network2                             |
    | port_security_enabled     | True                                 |
    | project_id                | 098429d072d34d3596c88b7dbf7e91b6     |
    | provider:network_type     | vxlan                                |
    | provider:physical_network | None                                 |
    | provider:segmentation_id  | 81                                   |
    | revision_number           | 3                                    |
    | router:external           | Internal                             |
    | shared                    | False                                |
    | status                    | ACTIVE                               |
    | subnets                   |                                      |
    | tags                      | []                                   |
    | updated_at                | 2016-12-13T23:21:45Z                 |
    +---------------------------+--------------------------------------+
    
  2. サブネットプールにもアドレススコープにも関連付けられないサブネットを作成します。

    $ openstack subnet create --network network1 --subnet-range \
    198.51.100.0/26 subnet-ip4-1
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | 198.51.100.2-198.51.100.62           |
    | cidr              | 198.51.100.0/26                      |
    | created_at        | 2016-12-13T23:24:16Z                 |
    | description       |                                      |
    | dns_nameservers   |                                      |
    | enable_dhcp       | True                                 |
    | gateway_ip        | 198.51.100.1                         |
    | headers           |                                      |
    | host_routes       |                                      |
    | id                | 66874039-d31b-4a27-85d7-14c89341bbb7 |
    | ip_version        | 4                                    |
    | ipv6_address_mode | None                                 |
    | ipv6_ra_mode      | None                                 |
    | name              | subnet-ip4-1                         |
    | network_id        | 1bcf3fe9-a0cb-4d88-a067-a4d7f8e635f0 |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 2                                    |
    | service_types     |                                      |
    | subnetpool_id     | None                                 |
    | updated_at        | 2016-12-13T23:24:16Z                 |
    +-------------------+--------------------------------------+
    
    $ openstack subnet create --network network1 --ipv6-ra-mode slaac \
    --ipv6-address-mode slaac --ip-version 6 --subnet-range \
    2001:db8:80d2:c4d3::/64 subnet-ip6-1
    +-------------------+-----------------------------------------+
    | Field             | Value                                   |
    +-------------------+-----------------------------------------+
    | allocation_pools  | 2001:db8:80d2:c4d3::2-2001:db8:80d2:c4d |
    |                   | 3:ffff:ffff:ffff:ffff                   |
    | cidr              | 2001:db8:80d2:c4d3::/64                 |
    | created_at        | 2016-12-13T23:28:28Z                    |
    | description       |                                         |
    | dns_nameservers   |                                         |
    | enable_dhcp       | True                                    |
    | gateway_ip        | 2001:db8:80d2:c4d3::1                   |
    | headers           |                                         |
    | host_routes       |                                         |
    | id                | a7551b23-2271-4a88-9c41-c84b048e0722    |
    | ip_version        | 6                                       |
    | ipv6_address_mode | slaac                                   |
    | ipv6_ra_mode      | slaac                                   |
    | name              | subnet-ip6-1                            |
    | network_id        | 1bcf3fe9-a0cb-4d88-a067-a4d7f8e635f0    |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6        |
    | revision_number   | 2                                       |
    | service_types     |                                         |
    | subnetpool_id     | None                                    |
    | updated_at        | 2016-12-13T23:28:28Z                    |
    +-------------------+-----------------------------------------+
    
  3. 外部ネットワークと同じアドレススコープに関連付けられたサブネットプールを使ってサブネットを作成します。

    $ openstack subnet create --subnet-pool subnet-pool-ip4 \
    --network network2 subnet-ip4-2
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | 203.0.113.2-203.0.113.62             |
    | cidr              | 203.0.113.0/26                       |
    | created_at        | 2016-12-13T23:32:12Z                 |
    | description       |                                      |
    | dns_nameservers   |                                      |
    | enable_dhcp       | True                                 |
    | gateway_ip        | 203.0.113.1                          |
    | headers           |                                      |
    | host_routes       |                                      |
    | id                | 12be8e8f-5871-4091-9e9e-4e0651b9677e |
    | ip_version        | 4                                    |
    | ipv6_address_mode | None                                 |
    | ipv6_ra_mode      | None                                 |
    | name              | subnet-ip4-2                         |
    | network_id        | 6c583603-c097-4141-9c5c-288b0e49c59f |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 2                                    |
    | service_types     |                                      |
    | subnetpool_id     | d02af70b-d622-426f-8e60-ed9df2a8301f |
    | updated_at        | 2016-12-13T23:32:12Z                 |
    +-------------------+--------------------------------------+
    
    $ openstack subnet create --ip-version 6 --ipv6-ra-mode slaac \
    --ipv6-address-mode slaac --subnet-pool subnet-pool-ip6 \
    --network network2 subnet-ip6-2
    +-------------------+--------------------------------------+
    | Field             | Value                                |
    +-------------------+--------------------------------------+
    | allocation_pools  | 2001:db8:a583::2-2001:db8:a583:0:fff |
    |                   | f:ffff:ffff:ffff                     |
    | cidr              | 2001:db8:a583::/64                   |
    | created_at        | 2016-12-13T23:31:17Z                 |
    | description       |                                      |
    | dns_nameservers   |                                      |
    | enable_dhcp       | True                                 |
    | gateway_ip        | 2001:db8:a583::1                     |
    | headers           |                                      |
    | host_routes       |                                      |
    | id                | b599c2be-e3cd-449c-ba39-3cfcc744c4be |
    | ip_version        | 6                                    |
    | ipv6_address_mode | slaac                                |
    | ipv6_ra_mode      | slaac                                |
    | name              | subnet-ip6-2                         |
    | network_id        | 6c583603-c097-4141-9c5c-288b0e49c59f |
    | project_id        | 098429d072d34d3596c88b7dbf7e91b6     |
    | revision_number   | 2                                    |
    | service_types     |                                      |
    | subnetpool_id     | a59ff52b-0367-41ff-9781-6318b927dd0e |
    | updated_at        | 2016-12-13T23:31:17Z                 |
    +-------------------+--------------------------------------+
    

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

    $ openstack network show network2
    +---------------------------+------------------------------+
    | Field                     | Value                        |
    +---------------------------+------------------------------+
    | admin_state_up            | UP                           |
    | availability_zone_hints   |                              |
    | availability_zones        | nova                         |
    | created_at                | 2016-12-13T23:21:45Z         |
    | description               |                              |
    | id                        | 6c583603-c097-4141-9c5c-     |
    |                           | 288b0e49c59f                 |
    | ipv4_address_scope        | 3193bd62-11b5-44dc-          |
    |                           | acf8-53180f21e9f2            |
    | ipv6_address_scope        | 28424dfc-9abd-481b-          |
    |                           | afa3-1da97a8fead7            |
    | mtu                       | 1450                         |
    | name                      | network2                     |
    | port_security_enabled     | True                         |
    | project_id                | 098429d072d34d3596c88b7dbf7e |
    |                           | 91b6                         |
    | provider:network_type     | vxlan                        |
    | provider:physical_network | None                         |
    | provider:segmentation_id  | 81                           |
    | revision_number           | 10                           |
    | router:external           | Internal                     |
    | shared                    | False                        |
    | status                    | ACTIVE                       |
    | subnets                   | 12be8e8f-5871-4091-9e9e-     |
    |                           | 4e0651b9677e, b599c2be-e3cd- |
    |                           | 449c-ba39-3cfcc744c4be       |
    | tags                      | []                           |
    | updated_at                | 2016-12-13T23:32:12Z         |
    +---------------------------+------------------------------+
    
  4. 作成したそれぞれのサブネットをルーターに接続します。例えば、 router1 という名前のルーターを使用します。

    $ openstack router add subnet router1 subnet-ip4-1
    $ openstack router add subnet router1 subnet-ip4-2
    $ openstack router add subnet router1 subnet-ip6-1
    $ openstack router add subnet router1 subnet-ip6-2
    

接続性の確認

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

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

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

    $ openstack server list
    +--------------+-----------+---------------------------------------------------------------------------+------------+
    | ID           | Name      | Networks                                                                  | Image Name |
    +--------------+-----------+---------------------------------------------------------------------------+------------+
    | 97e49c8e-... | instance1 | network1=2001:db8:80d2:c4d3:f816:3eff:fe52:b69f, 198.51.100.3, 203.0.113.3| cirros     |
    | ceba9638-... | instance2 | network2=203.0.113.3, 2001:db8:a583:0:f816:3eff:fe42:1eeb, 203.0.113.4    | centos     |
    +--------------+-----------+---------------------------------------------------------------------------+------------+
    

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

$ ping -c 1 203.0.113.3
1 packets transmitted, 1 received, 0% packet loss, time 0ms
$ ping -c 1 203.0.113.4
1 packets transmitted, 1 received, 0% packet loss, time 0ms

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

注釈

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

# ip route add 203.0.113.0/26 via 203.0.113.2
$ ping -c 1 203.0.113.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 203.0.113.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.