例えば Internalネットワークが10.0.0.0/24でNeutron RouterのExternalネットワークのIPアドレスが203.0.113.1の場合、10.0.0.0/24のアドレスは203.0.113.1にNAT変換される。
ContrailではSNATをサポートしているが、ContrailではSNATを行う場合、Compute nodeにSNAT用のNetwork Namespaceを作成する。
このとき、Internal側のダミーIPネットワークを設定する。Neutron routerにゲートウェイを設定すると、自動的に100.64.0.0/29のネットワークが作成される。
このネットワークはNetwork NamespaceのInternal側に属するネットワークとして利用している。
なお、100.64.0.0/10はCGNAT(LSNAT)用で予約されている。RFC6598 http://tools.ietf.org/html/rfc6598
例えば、以下のようにネットワークを設定する。
VN1(10.0.1.0/24)--- Router1 ---pubric(172.16.0.0/24)
neutron net-create VN1
neutron subnet-create VN1 10.0.1.0/24
net-create public
subnet-create public 203.0.113.0/29
net-update public --router:external=true
router-gateway-set RT1 public
その後、neutron net-listでネットワークを確認すると、snat-si-left_si_"Neutorn routerのUUID"というネットワークが自動作成され、100.64.0.0/24のネットワークが自動生成される。neutron router-list
+--------------------------------------+---------+--------------------------------------------------------+
| id | name | external_gateway_info |
+--------------------------------------+---------+--------------------------------------------------------+
| 1e74907d-63e5-4bc6-a9a9-f0f221183f06 | Router1 | {"network_id": "8cd3510b-7b78-49f3-b5b9-2b94f5305a19"} |
+--------------------------------------+---------+--------------------------------------------------------+
neutron subnet-list
+--------------------------------------+------+---------------+------------------------------------------------+
| id | name | cidr | allocation_pools |
+--------------------------------------+------+---------------+------------------------------------------------+
| b354592d-3f85-45fa-b997-7853d10a5b93 | | 10.0.1.0/24 | {"start": "10.0.1.2", "end": "10.0.1.254"} |
| a8065593-158b-4057-af1b-d52faaeba18c | | 172.16.0.0/24 | {"start": "172.16.0.2", "end": "172.16.0.254"} |
| f0510443-e4fb-43f7-b905-a766c49cef35 | | 100.64.0.0/29 | {"start": "100.64.0.1", "end": "100.64.0.6"} |
+--------------------------------------+------+---------------+------------------------------------------------+
コンピュートノードでip netns listを打つと、"vrouter-"で始まるnamespaceが作成されているip netns list
vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3
ip addrでインターフェイスを確認すると、namespaceのインターフェイスが確認できるip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
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
2: int-479555b2-9: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:47:95:55:b2:92 brd ff:ff:ff:ff:ff:ff
inet 100.64.0.5/29 brd 100.64.0.7 scope global int-479555b2-9
valid_lft forever preferred_lft forever
3: gw-ef308f80-9d: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:ef:30:8f:80:9d brd ff:ff:ff:ff:ff:ff
inet 172.16.0.2/24 brd 172.16.0.255 scope global gw-ef308f80-9d
valid_lft forever preferred_lft forever
2014/10/23追記ip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 iptables -t nat -L をみると
ip netns exec vrouter-2bd3ddf4-f7e5-4ba8-bdc6-95a810c06cb3 iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere
というMasquaradeするテーブルが作成されている。つまりContrailは実際には以下のように動作している
VN1(10.0.1.0/24) --- NAT-inside(100.64.0.0/29) --- pubric(172.16.0.0/24)
(vRouter) (Network namespace) (vRouter)
0 件のコメント:
コメントを投稿