ネットワークプロトコルについての楽しい話-講義28 |クラウドネットワークの分離GRE、VXLAN:コミュニティに住んでいますが、プライバシーも保護する必要があります

関連するブログ、参照この一連のオタクの時間-ネットワークプロトコルについての何か

ネットワークプロトコルについての楽しい話-講義28 |クラウドとネットワークの分離GRE、VXLAN:コミュニティに住んでいるが、プライバシーも保護する必要がある

クラウドプラットフォームの分離問題については、これまで使用してきた戦略は常にVLANでしたが、この戦略には12のVLANしかなく、合計で4096であるとも述べました。設計した時は十分そうでしたが、今は絶対に足りません、どうすればいいですか?

1つの方法は、この契約を変更することです。このプロトコルが特定の標準を形成するとき、何千ものデバイスで実行される手順はこのルールに従う必要があるため、この方法は多くの場合実行不可能です。では、変更についてお話ししましょう。これらのプログラムを1つずつ教えてくれるのは誰ですか。明らかに、これは不可能なプロジェクトです。

もう1つの方法は、を拡張することです。ヘッダーは、テナントを区別するのに十分なIDを含む元のパッケージ形式に基づいて拡張されます。外側のパッケージ形式は、可能な限り伝統的であり、元の形式と互換性があります。ユーザーを区別する必要が生じたら、この特別なプログラムを使用して、この特別なパッケージ形式を処理します。

この概念は、第22章で説明したトンネル理論とよく似ています海南島へのフェリーでの自動運転ツアーの話を覚えていますか?そのセクションでは、拡張ヘッダーは主に暗号化に使用されると述べましたが、今必要なヘッダーはユーザーを区別できるようにするためのものです。

基盤となる物理ネットワークデバイスで構成されるネットワークアンダーレイネットワークと呼ばれ、仮想マシンとクラウドで使用されるこれらのテクノロジーで構成されるネットワークオーバーレイネットワークと呼ばれますこれは、物理ネットワークに基づく仮想化ネットワーク実装ですこのセクションでは、2つのオーバーレイネットワークテクノロジーに焦点を当てます。

GRE

最初のテクノロジーはGREであり、これはIP-over-IPトンネリングテクノロジーであるGeneric Routing Encapsulationの略ですIPパケットをGREパケットにカプセル化し、IPヘッダーを外部に追加し、データパケットをトンネルの一端でカプセル化し、それをパスで送信し、他端をカプセル化解除します。トンネルは、仮想のポイントツーポイント接続と考えることができます。 この図からわかるように、GREヘッダーでは、最初の32ビットがそこにある必要があり、後者はオプションです。最初の4つの識別ビットで、識別後にオプションはありますか?32ビットのフィールドである非常に重要なキーフィールドがあり、多くの場合、ユーザーを区別するために使用されるトンネルIDが格納されます32ビット、どのクラウドプラットフォームでも鍋を飲むのに十分!
ここに画像の説明を挿入

以下のフォーマットタイプは、NVGREと呼ばれる、ネットワーク仮想化に特に使用されるGREヘッダーフォーマットで、24ビットのネットワークID番号を提供しますが、これで十分です。

さらに、GREにはGREパッケージをカプセル化およびカプセル化解除する場所も必要です。これは、多くの場合ルーターまたはルーティング機能を備えたLinuxマシンです。

GREトンネル伝送プロセス

GREトンネルを使用すると、送信プロセスは次の図のようになります。2つのネットワークセグメントと2つのルーターがあり、GREトンネルが通信に使用されます。トンネルが確立された後、さらに2つのトンネルポートがパケット化とカプセル解放に使用されます。
ここに画像の説明を挿入

  1. ホストAは左側のネットワークにあり、IPアドレス192.168.1.102があり、ホストBにアクセスしようとしています。ホストBは右側のネットワークにあり、IPアドレスは192.168.2.1です。したがって、パケットは送信元アドレス192.168.1.102および宛先アドレス192.168.2.115で送信されます。ネットワークセグメントを越えてアクセスする必要があるため、デフォルトのデフォルトルーティングテーブルのルールに従って、左側のルーターであるデフォルトゲートウェイ192.168.1.1に送信する必要があります。
  2. ルーティングテーブルによると、左側のルーターから192.168.2.0/24ネットワークセグメントに移動し、GREトンネルを使用して、トンネルの終わりにあるTunnel0からトンネルに入る必要があります。
  3. トンネルトンネルの最後でパケットをカプセル化し、内部IPヘッダーに加えてGREヘッダーを追加します。NVGREの場合、GREヘッダーがMACヘッダーに追加され、次に外部IPアドレスが追加されます。これは、ルーターの外部IPアドレスです。送信元IPアドレスは172.17.10.10で、宛先IPアドレスは172.16.11.10で、E1の物理ネットワークカードからパブリックネットワークに送信されます。
  4. パブリックネットワークでは、すべて外部のパブリックIPアドレスに従って、ルーターをホップバイホップで歩きました。
  5. ネットワークパケットがピアルーターに到達すると、ピアエンドのTunnel0にも到達し、カプセル化解除を開始して外部IPヘッダーを削除し、内部のネットワークパケットとルーティングテーブルに従って、E3ポートからサーバーBに転送します。 。

GREテクノロジーの欠点

GREの原理から、GREがトンネルを介した不十分なVLAN IDの問題を解決したことがわかります。ただし、GREテクノロジー自体にはまだいくつかの欠点があります。

1つ目は、トンネルの数ですGREはポイントツーポイントトンネルであり、3つのネットワークがある場合は、2つのネットワークごとにトンネルを確立する必要があります。ネットワークの数が増えると、トンネルの数は指数関数的に増加します。 
ここに画像の説明を挿入
第2に、GREはマルチキャストをサポートしていないため、ネットワーク内の仮想マシンがブロードキャストフレームを送信した後、GREはそれをノードとのトンネル接続を持つすべてのノードにブロードキャストします。

もう1つの問題は、GREを解析できない多くのファイアウォールとレイヤ3ネットワークデバイスがまだ存在するため、GREカプセル化パケットを適切にフィルタリングおよびロードバランスできないことです。

VXLAN

2番目のオーバーレイテクノロジーはVXLANと呼ばれます3階の3層GREとは異なり、VXLANは2階からVXLANヘッダーを設定しますこれに含まれるVXLAN IDは24ビットで十分です。UDP、IP、および外部MACヘッダーも、VXLANヘッダーの外側でカプセル化されます。
ここに画像の説明を挿入
VXLANは拡張可能なプロトコルとして、VXLANパケットをカプセル化およびカプセル化解除する場所も必要であり、この機能を実現するためのポイントはVTEP(VXLANトンネルエンドポイント)と呼ばれます。

VTEPは、仮想マシンネットワークのスチュワードに相当します。各物理マシンに1つのVTEPが存在できます。各仮想マシンは、起動時にこのVTEPハウスキーパーに登録する必要があり、各VTEPは仮想マシンに登録されている仮想マシンの数を認識しています。仮想マシンがVTEPを介して通信する場合は、VTEPエージェントを介して通信する必要があり、VTEPはパッケージのカプセル化とカプセル化解除を実行します。

GREエンドツーエンドトンネルとは異なり、VXLANはポイントツーポイントではありませんが、ターゲットマシンを見つけるためのマルチキャストをサポートします。このエンドによって送信され、他のエンドによって受信されるとは限りません。

VTEPが起動すると、それらすべてがIGMPプロトコルを渡す必要がありますマルチキャストグループへの参加は、メーリングリストへの参加やWeChatグループへの参加と同様です。このメーリングリストに送信されたすべてのメッセージまたはWeChatグループに送信されたメッセージは、誰でも受信できます。そして、各物理マシンの仮想マシンが起動した後、VTEPは新しいVMがオンラインになることを認識し、それは私に属しています。
ここに画像の説明を挿入
図に示すように、仮想マシン1、2、3はクラウド内の同じユーザーの仮想マシンに属しているため、同じVXLAN ID = 101を割り当てる必要があります。クラウドインターフェイスでは、IPアドレスを確認できるため、仮想マシン1上の仮想マシン2にpingを実行できます。

仮想マシン1は、仮想マシン2のMACアドレスを認識していないため、パケットを送信できないため、ARPブロードキャストを送信します。
ここに画像の説明を挿入
ARP要求がVTEP1に到着すると、VTEP1はここに仮想マシンがあることを認識しています。自分の制御下にない仮想マシンにアクセスするには、MACアドレスを知る必要がありますが、わかりません。どうすればよいですか?

VTEP1は、WeChatグループに参加しましたか?@allを実行して、仮想マシン2の所有者を尋ねることができます。VTEP1は、ARP要求をVXLANにカプセル化し、マルチキャストします。

もちろん、グループ内では、VTEP2とVTEP3がメッセージを受信して​​いるため、VXLANパケットをアンパックして、ARPがあることを確認します。

VTEP3はローカルで長い間ブロードキャストを行いましたが、誰も戻ってきませんでした。仮想マシン2は彼らの制御下になかったと言っています。

VTEP2はローカルにブロードキャストされ、仮想マシン2が返され、仮想マシン2は私に属しており、MACアドレスはこれであることが示されます。この通信を通じて、VTEP2も学習しました。仮想マシン1はVTEP1に属しています。将来、仮想マシン1を見つけるには、VTEP1に移動します。 
ここに画像の説明を挿入
VTEP2は、ARP応答をVXLANにカプセル化します。今回は、これ以上マルチキャストする必要はなく、直接VTEP1に送り返されます。

VTEP1はVXLANパケットをアンパックし、それがARP応答であることを見つけたので、仮想マシン1に送信します。この通信を通じて、VTEP1も学習し、仮想マシン2はVTEP2に属します。その後、仮想マシン2を見つけ、VTEP2を見つけます。

仮想マシン1のARPが応答され、仮想マシン2のMACアドレスがわかっているため、パケットを送信できます。
ここに画像の説明を挿入
仮想マシン1から仮想マシン2に送信されたパケットは、VTEP1に到着します。もちろん、これは先ほど学習した内容を記憶しています。仮想マシン2を見つけたい場合は、VTEP2に移動してください。それを送りなさい。

ネットワークパケットがVTEP2に到達した後、VTEP2はVXLANカプセル化を解凍し、パケットを仮想マシン2に転送します。

仮想マシン2から返されたパケットがVTEP2に到着すると、もちろんそれが学習した内容を記憶しています。仮想マシン1を見つけるには、VTEP1に移動して、パッケージをVXLANにカプセル化し、VTEP1とVTEP2のIPアドレスを外側のレイヤーに追加します。また発送します。

ネットワークパケットがVTEP1に到達した後、VTEP1はVXLANカプセル化を解凍し、パケットを仮想マシン1に転送します。
ここに画像の説明を挿入
GREおよびVXLANテクノロジーにより、クラウドコンピューティングにおけるVLANの制限を解決できます。このテクノロジーをクラウドプラットフォームに統合する方法

GREおよびVXLANテクノロジーをクラウドプラットフォームに統合する方法

寮のすべてを物理的なマシンに移動したという話を覚えていますか? 
ここに画像の説明を挿入
仮想マシンはコンピューターです。ルーターとDHCPサーバーは、ホームルーターまたは寝室のコンピューターと同等です。外部ネットワークポートはインターネットにアクセスします。すべてのコンピューターは、内部ネットワークポートを介してスイッチbr0に接続されています。仮想マシンがインターネットにアクセスする場合、br0経由でルーターに接続し、ルーター経由のNAT後に要求をパブリックネットワークに転送する必要があります。

次は悲惨です。あなたの寮は相反しています。あなたは3つの寮の部屋に分けられます。上の図に対応して、あなたの寝室の頭、つまりルーターは単一の物理マシン上にあり、他のルームメイト、つまりVMは2つにあります物理マシン上。今回は、完全なbr0が切り取られ、各寮は個別のセクションになります。
ここに画像の説明を挿入
ただし、寝室の頭だけにインターネットサーフィン用のパブリックネットワークポートがあるので、3つの寮の真ん中に密かにトンネルを作り、3つの寮の2つのbr0をネットワークケーブルで接続して、他のルームメイトのコンピューターと寝室の頭ができるようにしました。コンピューターは同じbr0に接続されているようですが、実際にはトンネル内のネットワークケーブルを介して転送されます。

なぜもう1つのbr1仮想スイッチが必要なのですか?仮想マシンと物理マシン間の相互接続は、主にbr1レイヤーを介して2つのレイヤーに分割され、中間のトンネルには、GREとVXLANのさまざまな掘削方法があります。

OpenvSwitchを使用した後、br0はOpenvSwitchのトンネル機能とフロー機能を使用できます。

トンネル機能

OpenvSwitchは、GRE、VXLAN、IPsec_GREの3種類のトンネルをサポートしていますOpenvSwitchを使用する場合、仮想スイッチはGREおよびVXLANカプセル化のエンドポイントに相当します。

次のようにネットワークトポロジの作成をシミュレートして、トンネルの動作を確認します。 
ここに画像の説明を挿入
3台の物理マシンにはそれぞれ2人の異なるユーザーに属する2台の仮想マシンがあるため、VLANタグは互いに通信できないように異なる方法で再生する必要があります。ただし、異なる物理マシン上の同じユーザーはトンネルを介して互いに通信できるため、GREトンネルを介して相互に接続できます。

フロー機能

次に、すべてのフローテーブルルールがbr1に設定されます。各br1には3つのネットワークカードがあり、ネットワークカード1は内部にあり、ネットワークカード2と3は外部にあります。

フローテーブルのデザインを詳しく見てみましょう。 
ここに画像の説明を挿入

  1. 表0はすべてのトラフィックの入り口です。br1に入るすべてのトラフィックは、2つのタイプのトラフィックに分けられます。1つは物理マシンに入るトラフィック、もう1つは物理マシンからのトラフィックです。
    ポート1から着信するすべてのトラフィックが送信され、すべて表1で処理されます。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 in_port=1 actions=resubmit(,1)"

ポート2と3からのトラフィックはすべて物理マシンに入るトラフィックであり、すべて表3で処理されます。

ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 in_port=2 actions=resubmit(,3)"
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 in_port=3 actions=resubmit(,3)"

一致しない場合、デフォルトで破棄されます。

ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=0 actions=drop"
  1. 表1は、すべての発信ネットワークパケットの処理に使用されます。1つはユニキャストで、もう1つはマルチキャストです。
    ユニキャストの場合、表20で処理されます。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 table=1 dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)"

マルチキャストの場合は、表21で処理されます。

ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 table=1 dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,21)"
  1. 表2は表1の後に続き、ユニキャストでもマルチキャストでもない場合、デフォルトで破棄されます。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=0 table=2 actions=drop"
  1. 表3は、すべての着信ネットワークパケットの処理に使用されます。トンネルIDをVLAN IDに変換する必要があります。
    トンネルIDと一致しない場合、デフォルトで破棄されます。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=0 table=3 actions=drop"

トンネルIDが一致した場合、対応するVLAN IDに変換されてから、表10にスキップします。

ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 table=3 tun_id=0x1 actions=mod_vlan_vid:1,resubmit(,10)"
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 table=3 tun_id=0x2 actions=mod_vlan_vid:2,resubmit(,10)"
  1. 着信パケットの場合、表10はMACアドレス学習を実行します。これがレイヤ2スイッチの機能です。学習後、ポート1から送信します。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1 table=10
actions=learn(table=20,priority=1,hard_timeout=300,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]-
>NXM_NX_TUN_ID[],output:NXM_OF_IN_PORT[]),output:1"

表10はMACアドレスを学習するために使用され、学習結果は表20に配置されます。表20はMAC学習テーブルと呼ばれます。

NXM_OF_VLAN_TCIはVLANタグです。MAC学習テーブルでは、各エントリは特定のVLAN専用であり、異なるVLANの学習テーブルは分離されています。学習結果のエントリでは、このエントリがどのVLANのものであるかがマークされます。

NXM_OF_ETH_DST [] = NXM_OF_ETH_SRC []は、現在のパケットのMAC送信元アドレスが、学習結果のエントリのdl_dstに配置されることを意味します。これは、各スイッチが着信ネットワークパケットを通じて学習するためです。特定のMACが特定のポートから入ってくると、スイッチは、このMAC宛ての将来のパケットがこのポートから出て行く必要があることを覚えておく必要があります。これは、送信用であるため、送信元MACアドレスが宛先MACアドレスに配置されるためです。できました。

load:0-> NXM_OF_VLAN_TCI []は、表20でパケットが物理マシンから送信されると、VLANタグが0に設定されることを意味します。したがって、学習後、actions = strip_vlanが表20にあります。

load:NXM_NX_TUN_ID []-> NXM_NX_TUN_ID []は、表20で、物理マシンからパケットを送信するときに、トンネルID、受信する量、送信する量を設定することを意味します。表20にset_tunnelがあります。

出力:NXM_OF_IN_PORT []はどのポートに送信されます。たとえば、ポート2から入ってきた場合、学習した後、出力が表示されます:表20の2。
ここに画像の説明を挿入
したがって、図に示すように、左側のMACアドレスラーニングルールによって、学習結果は右の結果とまったく同じであり、この結果を表20に示します。

  1. 表20は、MACアドレス学習テーブルです。空でない場合は、ルールに従って処理されます。空の場合は、MACアドレスの学習が行われていないため、ブロードキャストする必要があるため、表21に渡す必要があります。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=0 table=20 actions=resubmit(,21)"
  1. 表21は、マルチキャストパケットの処理に使用されます。
    VLAN IDと一致しない場合、デフォルトで破棄されます。
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=0 table=21 actions=drop"

VLAN IDが一致すると、VLAN IDはトンネルIDに変換され、2つのネットワークカードのポート2とポート3の両方からマルチキャスト用に送信されます。

ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1table=21dl_vlan=1 actions=strip_vlan,set_tunnel:0x1,output:2,output:3"
ovs-ofctl add-flow br1 "hard_timeout=0 idle_timeout=0 priority=1table=21dl_vlan=2 actions=strip_vlan,set_tunnel:0x2,output:2,output:3"

まとめ

さて、このセクションはここにあります。要約しましょう。

  • 異なるユーザーのネットワークを分離し、VLANの数が限られているという問題を解決するには、オーバーレイ方式を使用する必要があります。GREとVXLANが一般的に使用されています。
  • GREはポイントツーポイントトンネルモードです。VXLANはマルチキャストトンネルモードをサポートしています。物理マシン間インターワーキングを実現するには、トンネルエンドポイントですべてカプセル化およびカプセル化解除する必要があります。
  • OpenvSwitchは、仮想マシンネットワークと物理マシンネットワークを分離して変換するフローテーブルのルールを設定することにより、トンネルエンドポイントとして使用できます。

最後に、私はあなたに2つの思考質問を残しておきます。

  1. VXLANはマルチキャストをサポートできますが、仮想マシンの数が比較的多い場合でも、オーバーレイネットワークではブロードキャストストームの問題が非常に深刻になります。この問題を解決する方法はありますか?
  2. 仮想マシンに基づくクラウドはより複雑であり、仮想マシンのネットワークカードは物理ネットワークへの変換のレベルが高くなります。仮想マシンよりも軽量のクラウドモデルがあります。何を知っていますか?
公開された40元の記事 ウォンの賞賛1 ビュー5347

おすすめ

転載: blog.csdn.net/aha_jasper/article/details/105575763