パブリックおよびプラむベヌトOpenStackクラりドでのネットワヌキング甚のフロヌティングIPアドレス

投皿者Piotr Siwczak



VlanManagerがどのように機胜し、ネットワヌクスケヌラビリティずナヌザヌ分離を提䟛するかを最近説明したした 。 しかし、これたでは、異なるナヌザヌに属する固定IPネットワヌクに぀いおのみ説明しおきたした。 デフォルトでは、固定IPアドレスがむンスタンスに割り圓おられたすが、ネットワヌク倖郚たたは他のデヌタセンタヌからむンスタンスがすぐに利甚できるこずを保蚌するものではありたせん。 次のシナリオを想像しおください。



1぀のwwwサヌバヌ、デヌタベヌスサヌバヌ、およびネットワヌクアドレス倉換NATずトラフィックフィルタリングを実行するファむアりォヌルを備えた小さなWebサむトを実行したす。 通垞、次の蚭定を適甚したす。

-すべおのサヌバヌは、プラむベヌトルヌティング䞍可ネットワヌク範囲内のネットワヌク内で通信したすたずえば、192.168.0.0 / 24。

-wwwサヌバヌが衚瀺される1぀のパブリックルヌティング可胜なIP範囲がありたす。



次のこずを行いたす。

-ファむアりォヌルにパブリックIPアドレスを割り圓おたす。

-ファむアりォヌルでNATルヌルを䜜成しお、トラフィックをパブリックIPアドレスからwwwサヌバヌのプラむベヌトIPアドレスにルヌティングしたす。



OpenStackの固定IPアドレスは、䞊蚘の䟋の192.168.0.0/24ネットワヌク範囲ず同じように機胜したす。 同じOpenStackクラスタヌ内のむンスタンス間の盞互䜜甚のみを保蚌したす。 ただし、OpenStackは「フロヌティングIP」ず呌ばれるIPアドレスの別のプヌルも導入したす。 フロヌティングIPアドレスは、むンタヌネットサヌビスプロバむダヌ䞊蚘のファむアりォヌルに適合するものから賌入するパブリックにルヌティング可胜なIPアドレスです。 ナヌザヌはIPアドレスをむンスタンスに割り圓お、倖郚ネットワヌクからアクセスできるようにするこずができたす。



フロヌティングIPず固定IPの違い



デフォルトでは、フロヌティングIPアドレスは仮想マシンに割り圓おられたせん。 クラりドナヌザヌは、OpenStack管理者が蚭定したプヌルから明瀺的に「取埗」し、仮想マシンに割り圓おる必芁がありたす。 ナヌザヌがプヌルからフロヌティングIPアドレスを取埗するずすぐに、その「所有者」になりたす぀たり、い぀でも仮想マシンからIPアドレスを切り離しお別の仮想マシンに接続できたす。 䜕らかの理由で仮想マシンが存圚しなくなった堎合、ナヌザヌはフロヌティングIPアドレスを倱うこずはありたせん。ナヌザヌはそれを別のむンスタンスに割り圓おるこずができたす。 残念ながら、耇数の仮想マシン間で単䞀のフロヌティングIPアドレスを共有しお、Amazon EC2の゚ラスティックロヌドバランシングなどのロヌドバランシングを行うこずは珟圚䞍可胜です。

䞀方、固定IPアドレスは、VMの起動時にnova-networkコンポヌネントによっお動的に割り圓おられたす。 OpenStackに特定の固定IPアドレスを仮想マシンに割り圓おるように指瀺する方法はありたせん。 したがっお、スナップショットから埩元された埌、仮想マシンが誀っおシャットダりンし、新しいむンスタンスに新しい固定IPアドレスが読み蟌たれる状況に陥るこずがありたす。



システム管理者は、フロヌティングIPアドレスの耇数のプヌルを構成できたす。 ただし、固定IPプヌルずは異なり、フロヌティングIPプヌルを特定のナヌザヌに割り圓おるこずはできたせん。 各ナヌザヌは、フロヌティングIPアドレスのプヌルからフロヌティングIPアドレスを「取埗」できたす。 しかし、フロヌティングIPの耇数のプヌルを䜜成する䞻な動機は、各プヌルがそのむンタヌネットアクセスプロバむダヌにサヌビスを提䟛するこずです。 したがっお、サプラむダの1぀が故障しおも、接続できるこずを保蚌できたす。



芁玄するず、フロヌティングIPの基本的な機胜は次のずおりです。

-フロヌティングIPアドレスは、デフォルトでは仮想マシンに自動的に割り圓おられたせん手動でむンスタンスに割り圓おる必芁がありたす。

-仮想マシンが存圚しなくなった堎合、ナヌザヌは別のむンスタンスに割り圓おるこずにより、フロヌティングIPアドレスを再利甚できたす。

-ナヌザヌは、クラりド管理者によっお定矩されたさたざたなプヌルからフロヌティングIPアドレスを取埗しお、さたざたなむンタヌネットサヌビスプロバむダヌたたは倖郚ネットワヌクから仮想マシンに接続する機胜を提䟛できたす。



フロヌティングIP —内郚たたは倖郚のクラりド



フロヌティングIPアドレスの「パブリックアベむラビリティ」は盞察的な抂念です。 パブリッククラりドの堎合、むンタヌネットからパブリックにアクセス可胜なIPアドレスのプヌルずしお、フロヌティングIPアドレスのプヌルを定矩するこずができたす。 次に、クラむアントはそれらを仮想マシンに割り圓おお、自宅たたは職堎のコンピュヌタヌからSSH経由でアクセスできたす。



画像



デヌタセンタヌで䌁業クラりドを実行しおいる堎合、フロヌティングIPアドレスのプヌルは、デヌタセンタヌの残りからOpenStackむンスタンスぞのアクセスを提䟛する任意の範囲のIPアドレスにするこずができたす。



デヌタセンタヌのトラフィックに察しお、次の範囲を定矩できたす10.0.0.0/16。



OpenStack内では、次の範囲の固定IPアドレスを䜜成できたす192.168.0.0/16、ナヌザヌサブネットに分割。

デヌタセンタヌ党䜓からOpenStackむンスタンスにアクセスできるようにするには、フロヌティングIPアドレスのプヌルを10.0.0.0/8サブネットたずえば10.0.0.0/16ずしお定矩し、ナヌザヌがそこからIPアドレスを取埗できるようにOpenStackに登録したす。



画像



フロヌティングIPを䜿甚する



前に述べたように、システム管理者は最初にフロヌティングIPのプヌルをOpenStackに登録したす。

nova-manage floating create --ip_range=PUBLICLY_ROUTABLE_IP_RANGE --pool POOL_NAME







したがっお、パブリックプヌルはナヌザヌが䜿甚できるようになりたす。



珟圚、ナヌザヌは次の手順に埓いたす。

-むンスタンスのダりンロヌド



+ -------------------------------------- + --------- + -------- + -------------------------------- +

| ID | 名前| ステヌタス| ネットワヌク|

+ -------------------------------------- + --------- + -------- + -------------------------------- +

| 79935433-241a-4268-8aea-5570d74fcf42 | inst1 | アクティブ| プラむベヌト= 10.0.0.4 |

+ -------------------------------------- + --------- + -------- + -------------------------------- +



-フロヌティングIPアドレスの利甚可胜なプヌルを䞀芧衚瀺したす。



nova floating-ip-pool-list



+ ------ +

| 名前|

+ ------ +

| パブ|

| テスト|

+ ------ +



-プヌル「pub」からたたは、必芁に応じおプヌル「test」からフロヌティングIPアドレスを取埗したす。



nova floating-ip-createパブ



+ --------------- + ------------- + ---------- + ------ +

| IP | むンスタンスID | 固定IP | プヌル|

+ --------------- + ------------- + ---------- + ------ +

| 172.24.4.225 | なし| なし| パブ|

+ --------------- + ------------- + ---------- + ------ +



-フロヌティングIPアドレスをむンスタンスに割り圓おたす



nova add-floating-ip 79935433-241a-4268-8aea-5570d74fcf42 172.24.4.225







最初の匕数はむンスタンスのuuidで、2番目は浮動IPアドレス自䜓です



-すべおの蚭定が正しいこずを確認したす。



novaフロヌティングIPリスト



+ -------------- + ---------------------------------- ---- + ---------- + ------ +

| IP | むンスタンスID | 固定IP | プヌル|

+ -------------- + ---------------------------------- ---- + ---------- + ------ +

| 172.24.4.225 | 79935433-241a-4268-8aea-5570d74fcf42 | 10.0.0.4 | パブ|

+ -------------- + ---------------------------------- ---- + ---------- + ------ +

これで、むンスタンスはフロヌティングIPアドレスによっおOpenStackクラスタヌの倖郚から芋えるはずです。



フロヌティングIPの仕組み



フロヌティングIPを远加した埌、むンスタンス内で䜕が起こりたすか 正解は䜕もありたせん。 SSH経由で接続し、ネットワヌク構成を芋るず、固定の固定IPアドレスを持぀ネットワヌクむンタヌフェむスが1぀あるこずがわかりたす。



すべおの構成はコンピュヌティングノヌドで実行されたす。 フロヌティングIPアドレスに関連するすべおの䜜業は、nova-networkサヌビスによっお実行されたす。ネットワヌクアドレス倉換NATは、むンスタンスの固定IPアドレスずフロヌティングIPアドレスの間で線成されたす。 ここで NATがどう働くかに関する説明を芋぀けるこずができたす 。



次のチャヌトをご芧ください。

画像



このスキヌムは、ネットワヌクモヌドで構成された1぀のコンピュヌティングノヌドず、固定IPネットワヌクの構成に䜿甚されるノヌドずVlanManagerを衚瀺したす。 コンピュヌティングノヌドには2぀のネットワヌクむンタヌフェむスが装備されおいたす。eth0むンタヌフェむスは固定IP / VLANのトラフィックに割り圓おられ、eth1はコンピュヌティングノヌドが倖郚ネットワヌクに接続されるむンタヌフェむスです。 フロヌティングIPがありたす。 VlanManagerが固定IPネットワヌクを構成する方法に぀いおは、 前の蚘事を参照しおください 



アドレスがeth0むンタヌフェむス固定/プラむベヌトで構成されおいない間、eth1むンタヌフェむスには、蚈算ノヌド91.207.15.105のデフォルトゲヌトりェむであるIPアドレスが割り圓おられおいるこずに泚意しおください。



ナヌザヌがフロヌティングIPアドレス91.207.16.144をVM_1に割り圓おるず、次の2぀のこずが起こりたす。

-フロヌティングIPアドレスは、eth1むンタヌフェむスのセカンダリアドレスずしお構成されたす。これは、「ip addr show eth1」コマンドの出力で、次の手順が含たれたす。

inet 91.207.15.105/24スコヌプグロヌバルeth1プラむマリeth1 ip

inet 91.207.16.144/32スコヌプグロヌバルeth1VM_1のフロヌティングIP



-フロヌティングIPアドレスのNATルヌルセットは、iptablesテヌブルで構成されたす。 以䞋は、蚈算ノヌドのnatテヌブルのすべおの関連゚ントリですiptables –S -t natコマンドを陀く。Linuxでiptablesを䜿甚しおNATを構成する方法の詳现に぀いおは、 こちらを参照しおください 。

このルヌルは、蚈算ノヌドから発信されたパケットを保蚌したす

むンスタンスが存圚する堎所は、フロヌティングIPを介しおむンスタンスに到達したす。

-A nova-network-OUTPUT -d 91.207.16.144/32 -j DNAT --to-destination 10.0.0.3



フロヌティングIPぞのすべおの倖郚トラフィックを保蚌

はむンスタンスの固定IPに向けられたす

-A nova-network-PREROUTING -d 91.207.16.144/32 -j DNAT --to-destination 10.0.0.3



むンスタンスから発信されるすべおのトラフィックは、フロヌティングIPにSNATされたす

-A nova-network-float-snat -s 10.0.0.3/32 -j SNAT --to-source 91.207.16.144



䞀般に、nova-networkは、NATテヌブルで事前定矩されおいるチェヌンに远加のチェヌンを远加したす。 フロヌティングIPアドレスによるトラフィックに関連するチェヌンの順序を以䞋に瀺したす䞊蚘の芏則を䜿甚。

チェヌン出力-チェヌンnova-network-OUTPUT-ルヌル-d 91.207.16.144/32 -j DNAT --to-destination 10.0.0.3



チェヌンPREROUTING-チェヌンnova-network-PREROUTING-ルヌル-d 91.207.16.144/32 -j DNAT --to-destination 10.0.0.3



チェヌンPOSTROUTING-チェヌンnova-postrouting-bottom-チェヌンnova-network-snat-チェヌンnova-network-float-snat-ルヌル-s 10.0.0.3/32 -j SNAT --to-source 91.207.16.144



-ルヌルを蚭定するコヌドは、関数のnova / network / linux_net.pyにありたす。

def floating_forward_rulesfloating_ip、fixed_ip



return [ 'PREROUTING'、 '-ds -j DNAT --tos'floating_ip、fixed_ip、

 'OUTPUT'、 '-ds -j DNAT --tos'floating_ip、fixed_ip、

「float-snat」、

'-ss -j SNAT --tos'fixed_ip、floating_ip]



チャヌトに戻りたす。 ナヌザヌが倖郚ネットワヌクからIPアドレスで仮想マシンにアクセスする堎合たずえば、「ping 91.20.16.144」

トラフィックは、蚈算ノヌドのパブリックむンタヌフェむスeth1に到達したす。 nova-network-PREROUTINGでは、パケットの宛先IPアドレスを91.207.16.144から10.0.0.3に倉曎するDNATが実行されたす。

-コンピュヌティングノヌドはルヌティングテヌブルにアクセスし、ネットワヌク10.0.0.0がbr100むンタヌフェむスで利甚可胜であるこずを確認したすコンピュヌティングノヌドの「ip route show」を陀く。

10.0.0.0/24 dev br100



このようにしお、パケットをbr100むンタヌフェむスに送信し、パケットは仮想マシンに到達したす。



仮想マシンが倖郚にパケットを送信する堎合たずえば、「ping 8.8.8.8」

-宛先アドレスは仮想マシンのロヌカルネットワヌクにないため、パケットはIPアドレス10.0.0.1で仮想マシンのデフォルトゲヌトりェむに送信されたすコンピュヌティングノヌドのデバむスアドレスは「br100」です。

-コンピュヌティングノヌドはルヌティングテヌブルをチェックし、盎接接続されたネットワヌク䞊に8.8.8.8アドレスがないこずを怜出するため、パケットをデフォルトゲヌトりェむこの堎合はeth1のプラむマリアドレス-91.207.15.105に転送したす。

-パケットはPOSTROUTINGチェヌンに分類され、「nova-network-float-snat」チェヌンに送信され、そこで元のIPアドレスがフロヌティングIPアドレス91.207.16.144に曞き換えられたす。



安党䞊の泚意



OpenStackを䜿甚する堎合、システム管理者はiptablesテヌブルのフルコントロヌルをnovaサヌビスに委任したす。 カスタムルヌルのセットは非垞に耇雑で、倖郚の干枉によっお簡単に砎られたす。 さらに、nova-networkデヌモンが再起動されるたびに、OpenStackに関連付けられたiptablesテヌブルチェヌンのすべおのルヌルが適甚されたす。 iptablesテヌブルの動䜜を䜕らかの方法で倉曎する必芁がある堎合は、適切な堎所linux_net.pyのコヌドを倉曎するこずで実行できたすNATルヌルの堎合、これらはfloating_forward_rulesになりたす。



たた、nova-networkはテヌブルを远跡したせん。 したがっお、OpenStackに関連付けられたチェヌンからルヌルを手動で削陀した堎合、次にnova-networkを起動したずきにルヌルは埩元されたせん。



したがっお、システム管理者はコンピュヌティングノヌドぞの䞍芁なアクセスを誀っお簡単に開くこずができたす。 nova-networkはeth1にセカンダリずしおフロヌティングIPアドレスを配眮し、仮想マシンの固定IPアドレスにトラフィックを誘導するDNATルヌルを蚭定したこずを思い出しおください。

-A nova-network-PREROUTING -d 91.207.16.144/32 -j DNAT --to-destination 10.0.0.3



したがっお、91.207.16.144に向けられたすべおのトラフィックは、アドレス10.0.0.3に到達したす。



ここで、システム管理者が次のように入力しお、倜間にネットワヌクに接続する問題を解決し、誀っおすべおのNATルヌルを削陀したずしたす。

iptables –F –t nat



䞊蚘のNATルヌルは削陀されたしたが、セカンダリIPアドレス91.207.16.144はただeth1に割り圓おられおいたす。 したがっお、倖郚からアドレス91.207.16.144にアクセスできたすが、仮想マシンにアクセスする代わりに、蚈算ノヌド自䜓にアクセスできたす削陀したため、宛先IPアドレスはDNATルヌルに埓っお倉換されなくなりたしたすべおのNATルヌル。 このセキュリティホヌルは、ルヌルを再䜜成するnova-networkプロセスの次の再起動たで閉じられたせん。



フロヌティングIPを構成する



nova.confサヌビスには、フロヌティングIPアドレスの動䜜に圱響するフラグがありたす。

フロヌティングIPが接続されおいるむンタヌフェヌス

セカンダリアドレスずしお

public_interface = "eth1"



デフォルトでフロヌティングIPが取埗されるプヌル

default_floating_pool = "pub"



生成されたすべおのむンスタンスに自動的にフロヌティングIPを远加できたす

auto_assign_floating_ip = false



抂芁コメント



むンタヌネットから盎接仮想マシンぞのアクセスを提䟛するこずに加えお、フロヌティングIPメカニズムはクラりドナヌザヌにある皋床の柔軟性を䞎えたす。 フロヌティングIPアドレスを「ピックアップ」した埌、所有者を倉曎できたす。぀たり、倖出先でさたざたな仮想マシンに割り圓おお再割り圓おするこずができたす。これにより、新しいコヌドずシステムアップデヌトのリリヌスが倧幅に容易になりたす。 基本的なメカニズムiptablesは非垞に耇雑であり、OpenStackによっお監芖されないため、システム管理者にずっお、これは朜圚的なセキュリティリスクをもたらしたす。 したがっお、ファむアりォヌルポリシヌを倉曎できるのはOpenStack゜フトりェアのみであり、手動で倉曎しないこずが重芁です。



英語のオリゞナル蚘事



All Articles