2014年11月11日火曜日

OpenContrailのSimple Gatewayの作り方

※2015/10/07 改訂版を作成しました。 GitのWikiにMXなどのハードウェアゲートウェイを使わないで、仮想ネットワークと物理ネットワークを接続するSimple Gatewayが紹介されているが、ドキュメントバグがあったので、こちらに掲載。
(オリジナルGithub

Simple GatewayはコンピュートノードのvRouterをゲートウェイとして利用し、コンピュートノードのルーティングテーブルを使用するため、コンピュートノードコマンドを実行する
まず、以下のディレクトリをexport

export PYTHONPATH=/usr/lib/python2.7/dist-packages/contrail_vrouter_api/gen_py/instance_service/
export PYTHONPATH=/usr/lib/python2.7/dist-packages/nova_contrail_vif/gen_py/instance_service/
次に、provision_vgw_interface.pyでゲートウェイを作成する
python /opt/contrail/utils/provision_vgw_interface.py --oper create --interface <ゲートウェイの名前> --subnets <仮想ネットワークのプレフィックス> --route <物理ネットワークのプレフィックス> --vrf <仮想ネットワーク名>

ここで指定する仮想ネットワークの情報はContrailで持っている仮想ネットワークの情報とあわせる。
例えば、Floating IPの仮想ネットワーク名を<public >とし、IPアドレスを<203.0.113.0/24>とする。インターネットへの接続なので、物理ネットワークのプレフィックスを<0.0.0.0/0>とすると、

python /opt/contrail/utils/provision_vgw_interface.py --oper create --interface vgw1 --subnets 203.0.113.0/24 --route 0.0.0.0/0 --vrf default-domain:public:public:public
となる。

--vrfの項目を default-domain:domain名:仮想NW名:仮想NW名 と仮想NW名を重ねるのがミソ。

vRouterの情報を確認すると、prefix 0.0.0.0/0 Next hop type interface vgw1というのが追加されている。



この設定をすると、コンピュートノードはvhost経由で外部ネットワークと通信を行う。
インターネットのゲートウェイルータやゲートウェイサーバには仮想ネットワークに通信できるようにルーティングの追加を忘れないように。

以下はインターネットへ接続しているサーバのルーティングテーブル。(コンピュートノードのNextHopサーバ)
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
203.0.113.0     10.0.0.36       255.255.255.0   UG    0      0        0 eth1
172.27.112.0    0.0.0.0         255.255.252.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1
0.0.0.0         172.27.112.1    0.0.0.0         UG    0      0        0 eth0
仮想ネットワークの203.0.113.0/24 Gateway 10.0.0.36(コンピュートノードのVhostのIPアドレス)が追加されているのが確認できる。

バグ?
Simple Gatewayを使った場合、対象の仮想ネットワークをNeutron routerの外部ネットワークに指定した場合、SNATが正常に動作しない。

0 件のコメント:

コメントを投稿