5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OCIのVTAP(Virtual Test Access Points)機能を使ってみた

Posted at

VTAPとは

OCIにVTAP(Virtual Test Access Points)機能がリリースされました。
こちらによると、下記のような機能だとの事です。

仮想テスト・アクセス・ポイント(VTAP)を使用すると、指定されたソースから選択したターゲットにトラフィックをミラー化して、トラブルシューティング、セキュリティ分析およびデータ監視を容易にできます。

L2SWで利用できるミラーポートに近い機能をOCI上で実現できると解釈したので、早速使ってみたいと思います。

前提条件

VTAPを利用してミラーしたトラフィックは、
一度Network Load Balancer(NLC)を経由して受信する必要があります。
そのため事前にNLBを作成し、パケットを受信するインスタンスを別で用意する必要があります。

またトラフィックミラーが出来る対象(ターゲット)は、2022年5月現在、

  • DBCS
  • Exadata VM cluster
  • インスタンスVNIC
  • Load Balancer
  • Autonomous Data Warahouse(プライベートエンドポイントを利用)

となっています。(参考)

検証構成

今回は、

  • VTAPソース:パブリックサブネット上に構築したWebサーバ
  • VATPターゲット:プライベートサブネット上に立てたNLB

とし、NLBの配下にパケットキャプチャ用のインスタンス(Network Monitor)を立ち上げます。

外部からWebサーバへアクセスした際のトラフィックのミラーが、
VTAPを経由してVM(Network Monitor)でキャプチャできることをゴールとします。
image.png

*各種VMは事前に構築済みの前提で進めます。

使ってみる

NLBの作成

ネットワーキング -> ロードバランサ
からロードバランサの作成

  • タイプ:ネットワーク・ロード・バランサを選択
  • 詳細の追加
    • ロードバランサ名:任意
    • 可視性タイプの選択:プライベート
    • ネットワーキングの選択
      • 仮想クラウドネットワーク:該当VCNを選択
      • サブネット:該当PrivateSubnetを選択
  • リスナーの構成
    • リスナー名:任意
    • リスナーで処理するトラフィックのタイプの指定:UDP/TCP/ICMP
  • バックエンドの選択
    • バックエンド・セット名:任意
    • ソース/宛先ヘッダー(IP、ポート)の保持:有効
    • バックエンド・サーバーの選択:キャプチャ用のインスタンスを選択
    • ヘルス・チェック・ポリシーの指定
      • プロトコル:TCP
      • ポート:80
        何かしら設定が必要なので、tcpの80にしたがこれはお好みで。
        ヘルスチェックがOKにならないとパケットが通過しないので、インスタンスではhttpdも稼働させるようにした。(後述)

パケットキャプチャ用のインスタンス(Network Monitor)の設定

httpdの有効化(任意)

前述の通りNLBのヘルスチェックポリシーをtcp:80としたため、httpdを合わせて起動させた。
$ sudo systemctl start httpd
*ヘルスチェックがNGとなると、パケットをNLB配下のインスタンスに流さないため、暫定的にhttpdを起動させた。

firewalldの無効化

必要に応じてfirewalldなどは無効化ください。
$ sudo systemctl stop firewalld
*筆者はこちらを失念しパケットを受信できず、ハマってしまいました。

ソース/宛先チェックのスキップ

該当インスタンスの詳細 -> アタッチされたVNIC -> VNICの編集をクリック
image.png

ソース/宛先チェックのスキップ:チェック
image.png

*こちらを選択しておかないと、ミラーして流れてきたパケットが破棄されてしまうためチェックを入れ、保存する。
(通常ではSource or DestinationのIPが、このVNICと関係ないパケットだと自動で破棄するようにチェック機能が有効化されているので、チェックを入れてこの機能をスキップさせる)

VTAPの作成

仮想クラウドネットワークの選択

対象のVCNのリソース配下のVTAPを選択
ネットワーキング -> 仮想クラウドネットワーク -> 仮想クラウド・ネットワークの詳細
image.png

VTAPの作成

VTAPの作成をクリックし下記のように選択

  • 名前:任意

  • ソース

    • ソースタイプ:インスタンスVNIC
    • サブネット:パブリックサブネットを任意で選択
    • インスタンスのVNIC:事前に作成したWebサーバのインスタンスを任意で選択
  • ターゲット

    • リソースタイプ:Network Load Balancer
    • サブネット:プライベートサブネットを任意で選択
    • Network load balancer:先ほど作成したNLB名を選択
  • 取得フィルタ

    • 新規でフィルタ(ルール)を作成
      • 名前:任意
        • 順序番号1
          • 方向:イングレス
          • 包含/除外:含める
          • ソースCIDR:[空白]
          • 宛先CIDR:[空白]
          • IPプロトコル:All
        • 順序番号2
          • 方向:エグレス
          • 包含/除外:含める
          • ソースCIDR:[空白]
          • 宛先CIDR:[空白]
          • IPプロトコル:All

    *フィルタルールをイングレス/エグレス共に設定しておかないと、パケットが双方向受信できない

作成完了後、起動を選択することでパケットのミラーリングが開始されます。
image.png

動作確認

パケットキャプチャサーバ側

こちらのサーバ側でtcpdumpを実行し、
外部からWebサーバへアクセスした際のパケットをミラーで取得させてみました。

下記フローログをみるとわかるように、
青枠内のパケット:クライアントPC ⇔ Webサーバ
間のパケットがパケットキャプチャサーバから取得出来ていることが分かります。
image.png
もちろん通常では取得が出来ないパケットになりますので、無事に動作確認が出来ました。

チェックポイント

構築時にハマる事が多々あったので、チェックポイントも掲載しておきます。

  • NLBのヘルスチェックがOKになっていること
  • パケットキャプチャサーバのfirewalldが無効になっていること
  • パケットキャプチャサーバのVNICに対して"ソース/宛先チェックのスキップ"が有効になっていること
  • VTAPを起動させること(ステータスが"実行中"になっていること)

最後に

従来ではパケット解析を行いたい場合は、
対象のインスタンスに対してtcpdumpを実施させる必要があったが、
インスタンスに不必要なパッケージを入れてしまう点や、tcpdump実行時に多少なりとも負荷がかかる懸念があった。
VTAP機能を用いることでこれらを解消でき、かつADWなどtcpdumpを直接実行できない環境からもパケット解析が可能になる点で非常に有益な機能だと感じました。
またVTAP自体の料金は無料です。(各種インスタンスやNLBの課金は発生します)

本記事がVTAP導入の助けになれば幸いです。

参考

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?