Libreswan
Libreswanは、FreeS/WANおよびOpenswanに基づいたオープン・ソースのIPSec実装です。ほとんどのLinuxディストリビューションには、Libreswanが含まれているか、簡単にインストールできます。これは、オンプレミス・ネットワークまたはクラウド・プロバイダ・ネットワークのいずれかのホストにインストールできます。別のクラウド・プロバイダにLibreswanホストを設定してOracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)に接続する例は、Libreswanを使用した他のクラウドへのアクセスを参照してください。
このトピックでは、Libreswanを実行しているCPEの構成について説明します。このルートベース構成の仮想トンネル・インタフェース(VTI)のサポートには、最低でもLibreswanバージョン3.18と、最近のLinux 3.xまたは4.xカーネルが必要です。この構成は、Libreswanバージョン3.29を使用して検証されました。
Oracleには、一連のテスト済ベンダーおよびデバイスの構成手順が用意されています。ベンダーおよびソフトウェアのバージョンに適した構成を使用してください。
構成の検証にOracleで使用されたデバイスまたはソフトウェアのバージョンが、使用しているデバイスまたはソフトウェアと完全に一致しない場合でも、使用しているデバイスで必要な構成を作成できる可能性があります。ベンダーのドキュメントを参照し、必要な調整を行ってください。
デバイスが、検証済のベンダーおよびデバイスのリストに含まれないベンダーのものである場合、またはIPSecのデバイスの構成をよく理解している場合は、サポートされているIPSecパラメータのリストを確認し、ベンダーのドキュメントを参照してください。
Oracle Cloud Infrastructureは、オンプレミス・ネットワークと仮想クラウド・ネットワーク(VCN)間のセキュアなIPSec接続であるサイト間VPNを提供します。
次の図は、冗長トンネルを使用した、Oracle Cloud Infrastructureへの基本的なIPSec接続を示しています。この図で使用されているIPアドレスは、単なる例です。
ベスト・プラクティス
この項では、サイト間VPNの使用に関する一般的なベスト・プラクティスと考慮事項について説明します。
すべてのIPSec接続に対してすべてのトンネルを構成します
Oracleは、接続ごとに2つのIPSecヘッドエンドをデプロイし、ミッションクリティカルなワークロードに高可用性を提供します。Oracle側では、これらの2つのヘッドエンドが別々のルーターに配置されて冗長性が確保されます。最大の冗長性のために使用可能なすべてのトンネルを構成することをお薦めします。これは「障害を前提とした設計」原理の重要な要素です。
オンプレミス・ネットワークの場所に冗長CPEを配置します
IPSecでOracle Cloud Infrastructureに接続する各サイトでは、冗長エッジ・デバイス(顧客構内機器(CPE)とも呼ばれる)を使用する必要があります。Oracle Consoleに各CPEを追加し、動的ルーティング・ゲートウェイ(DRG)と各CPE間に個別のIPSec接続を作成します。各IPSec接続に対して、Oracleは、地理的に冗長なIPSecヘッドエンド上に2つのトンネルをプロビジョニングします。詳細は、接続性冗長性ガイド(PDF)を参照してください。
ルーティング・プロトコルの考慮事項
サイト間VPN IPSec接続を作成する場合、2つの冗長IPSecトンネルがあります。両方のトンネルを使用するようにCPEを構成することをお薦めします(CPEでサポートされている場合)。以前は、Oracleによって、最大4つのIPSecトンネルを持つIPSec接続が作成されていました。
次の3つのルーティング・タイプを使用でき、サイト間VPNの各トンネルに対して個別にルーティング・タイプを選択します:
- BGP動的ルーティング: 使用可能なルートは、BGPによって動的に学習されます。DRGは、オンプレミス・ネットワークからルートを動的に学習します。Oracle側では、DRGはVCNのサブネットを通知します。
- 静的ルーティング: DRGへのIPSec接続を設定する場合は、VCNに通知する必要のあるオンプレミス・ネットワークへの特定のルートを指定します。VCNのサブネットへの静的ルートを使用して、CPEデバイスを構成する必要もあります。これらのルートは、動的には学習されません。
- ポリシーベースのルーティング: DRGへのIPSec接続を設定する場合は、VCNに通知する必要のあるオンプレミス・ネットワークへの特定のルートを指定します。VCNのサブネットへの静的ルートを使用して、CPEデバイスを構成する必要もあります。これらのルートは、動的には学習されません。
BGP最適パス選択アルゴリズムの操作方法に関するOracle推奨など、サイト間VPNによるルーティングの詳細は、サイト間VPNのルーティングを参照してください。
その他の重要なCPE構成
CPEのアクセス・リストが、Oracle Cloud Infrastructureとの間で必要なトラフィックをブロックしないように正しく構成されていることを確認します。
複数のトンネルを同時に稼働させると、非対称ルーティングが発生する可能性があります。非対称ルーティングを許可するには、VCNからのトラフィックをどのトンネルでも処理できるようにCPEが構成されていることを確認します。たとえば、ICMP検査を無効にしたり、TCP状態バイパスを構成したりする必要があります。適切な構成の詳細は、CPEベンダーのサポートに問い合せてください。ルーティングを対称的に構成するには、サイト間VPNのルーティングを参照してください。
注意事項および制限事項
この項では、注意する必要のあるサイト間VPNの重要な一般的特性と制限について説明します。適用可能な制限の一覧と制限の引上げをリクエストする手順は、「サービス制限」を参照してください。
非対称ルーティング
Oracleでは、IPSec接続を構成する複数のトンネル間で非対称ルーティングが使用されます。適切にファイアウォールを構成してください。そうしないと、接続を介したpingテストやアプリケーション・トラフィックが確実に機能しません。
複数のトンネルをOracle Cloud Infrastructureに使用する場合は、優先トンネルを通じてトラフィックを決定論的にルーティングするようにルーティングを構成することをお薦めします。1つのIPSecトンネルをプライマリとして使用し、別のトンネルをバックアップとして使用する場合は、プライマリ・トンネル(BGP)用として特定性の高いルートを構成し、バックアップ・トンネル(BGP/静的)用として特定性の低いルート(サマリーまたはデフォルト・ルート)を構成します。そうしないと、すべてのトンネルを通じて同じルート(デフォルト・ルートなど)を通知した場合、VCNからオンプレミス・ネットワークへの戻りトラフィックは、使用可能なトンネルのいずれかにルーティングされます。これは、Oracleが非対称ルーティングを使用するためです。
Oracleルーティングの対称ルーティングの強制方法に関する具体的な推奨事項は、サイト間VPNのルーティングを参照してください。
ルートベースまたはポリシーベースのサイト間VPN
IPSecプロトコルは、セキュリティ・アソシエーション(SA)を使用してパケットの暗号化方法を判断します。各SA内で、パケットのソースIPアドレスと宛先IPアドレスおよびプロトコル・タイプをSAデータベースのエントリにマップする暗号化ドメインを定義して、パケットを暗号化または復号化する方法を定義します。
他のベンダーまたは業界のドキュメントでは、SAまたは暗号化ドメインを参照するときに、プロキシID、セキュリティ・パラメータ・インデックス(SPI)またはトラフィック・セレクタという用語が使用される場合があります。
IPSecトンネルを実装するには、一般的に2つの方法があります:
- ルートベース・トンネル: ネクスト・ホップベース・トンネルとも呼ばれます。ルート表検索は、パケットの宛先IPアドレス上で実行されます。そのルートのエグレス・インタフェースがIPSecトンネルである場合、パケットは暗号化され、トンネルの他方の側に送信されます。
- ポリシーベース・トンネル: パケットのソースと宛先のIPアドレスおよびプロトコルがポリシー・ステートメントのリストと照合されます。一致が検出されると、そのポリシー・ステートメント内のルールに基づいてパケットが暗号化されます。
Oracleサイト間VPNヘッドエンドではルートベース・トンネルが使用されますが、次の各項に示す注意事項を考慮しながら、ポリシーベース・トンネルとともに使用できます。
Libreswan 3.25の注意事項
CPEデバイスでLibreswan 3.25以前を使用しており、CPEをレスポンダとしてIKEv1接続を設定しようとする場合は、IPSecトンネルが起動されるようにCPE構成でフェーズ2パラメータを明示的に設定する必要があります。たとえば、現在の推奨暗号化アルゴリズムAES-256-gcmおよびPFS group5を使用して、CPEデバイスでフェーズ2パラメータphase2alg="aes_gcm256;modp1536"
を構成する必要があります。
この問題は、以降のLibreswanリリースでは発生しません。
CPEでルートベース・トンネルがサポートされている場合は、この方法を使用してトンネルを構成します。これは最も単純な構成で、Oracle VPNヘッドエンドとの相互運用性が最も高くなっています。
ルートベースのIPSecでは、次の値を持つ暗号化ドメインが使用されます:
- ソースIPアドレス: 任意(0.0.0.0/0)
- 宛先IPアドレス: 任意(0.0.0.0/0)
- プロトコル: IPv4
より特定的にする必要がある場合は、デフォルト・ルートではなく、暗号化ドメイン値に単一のサマリー・ルートを使用できます。
ポリシーベースのトンネルを使用する場合、定義するすべてのポリシー・エントリ(IPSec接続の片側にあるCIDRブロック)によって、トンネルのもう一方の端にあるすべての適格なエントリでIPSecセキュリティ・アソシエーション(SA)が生成されます。このペアは暗号化ドメインと呼ばれます。
この図では、IPSecトンネルのOracle DRG側に、3つのIPv4 CIDRブロックと1つのIPv6 CIDRブロックのポリシー・エントリがあります。トンネルのオンプレミスCPE側には、2つのIPv4 CIDRブロックと2つのIPv6 CIDRブロックのポリシー・エントリがあります。各エントリによって、トンネルのもう一方の端にあるすべての使用可能なエントリで暗号化ドメインが生成されます。SAペアの両側では、同じバージョンのIPを使用する必要があります。その結果、合計8つの暗号化ドメインが生成されます。
CPEでポリシーベース・トンネルのみがサポートされている場合、次の制限に注意してください。
- サイト間VPNは、複数の暗号化ドメインをサポートしていますが、暗号化ドメインの上限は50です。
- 前の例に似た状況で、CPE側で使用可能な6つのIPv4暗号化ドメインのうち3つのみを構成した場合、使用可能なすべての暗号化ドメインは常にDRG側に作成されるため、リンクは「一部稼働中」状態でリストされます。
- トンネルが作成された時期によっては、ポリシーベースのルーティングを使用するために既存のトンネルを編集できず、トンネルを新しいIPSecトンネルに置き換える必要がある場合があります。
- トンネルのOracle DRG側で使用されるCIDRブロックは、トンネルのオンプレミスCPE側で使用されるCIDRブロックと重複できません。
- 暗号化ドメインは常に、同じIPバージョンの2つのCIDRブロック間に存在する必要があります。
CPEがNATデバイスの背後にある場合
一般的に、接続の終端で構成されたCPE IKE識別子は、Oracleが使用しているCPE IKE識別子と一致する必要があります。デフォルトでは、OracleではCPEのパブリックIPアドレスが使用されます。これは、Oracle ConsoleでCPEオブジェクトを作成したときに指定したものです。ただし、CPEがNATデバイスの背後にある場合、次の図に示すように、終端で構成されたCPE IKE識別子がCPEのプライベートIPアドレスになる可能性があります。
一部のCPEプラットフォームでは、ローカルIKE識別子を変更できません。実行できない場合は、Oracle ConsoleでリモートIKE IDを変更し、CPEのローカルIKE IDと一致させる必要があります。IPSec接続を設定するときに、または設定後に、IPSec接続を編集して値を指定できます。Oracleでは、値がIPアドレスまたはcpe.example.comなどの完全修飾ドメイン名(FQDN)であることが必要です。手順については、Oracleで使用されるCPE IKE識別子の変更を参照してください。
サポートされているIPSecパラメータ
すべてのリージョンでサポートされているIPSecパラメータのベンダー非依存のリストについては、サポートされているIPSecパラメータを参照してください。
商用クラウド・レルムのOracle BGP ASNは31898です。US Government Cloud用のサイト間VPNを構成する場合は、Government Cloudに必要なサイト間VPNパラメータおよびOracleのBGP ASNを参照してください。United Kingdom Government Cloudについては、リージョンを参照してください。
CPE構成
この項の構成手順は、使用しているCPE用のOracle Cloud Infrastructureで提供されています。サポートが必要な場合は、CPEベンダーのサポートに直接問い合せてください。
次の図は、IPSec接続の基本的なレイアウトを示しています。
デフォルトのLibreswan構成ファイル
デフォルトのLibreswanインストールでは、次のファイルが作成されます:
etc/ipsec.conf
: Libreswan構成のルート。/etc/ipsec.secrets
: Libreswanがシークレットを検索する場所のルート(トンネルの事前共有キー)。/etc/ipsec.d/
: Oracle Cloud Infrastructureトンネルの.conf
ファイルと.secrets
ファイルを格納するディレクトリ(例:oci-ipsec.conf
およびoci-ipsec.secrets
)。Libreswanでは、このフォルダにこれらのファイルを作成することをお薦めします。
デフォルトのetc/ipsec.conf
ファイルは、次の行を含みます:
include /etc/ipsec.d/*.conf
デフォルトのetc/ipsec.secrets
ファイルは、次の行を含みます:
include /etc/ipsec.d/*.secrets
前述の行では、/etc/ipsec.d
ディレクトリのすべての.conf
および.secrets
ファイルが、Libreswanで使用されるメイン構成およびシークレット・ファイルに自動的にマージされます。
IKEv2の使用について
Oracleは、Internet Key Exchangeバージョン1 (IKEv1)およびバージョン2 (IKEv2)をサポートしています。コンソールでIKEv2を使用するようにIPSec接続を構成する場合、CPEでサポートされているIKEv2および関連するIKEv2暗号化パラメータのみを使用するようにCPEを構成する必要があります。OracleでIKEv1またはIKEv2用にサポートされているパラメータのリストについては、サポートされているIPSecパラメータを参照してください。
次の項のタスク3でIPSec構成ファイルを設定するときに、IKEバージョンを指定します。そのサンプル・ファイルには、IKEv1とIKEv2の構成方法を示すコメントがあります。
構成プロセス
Libreswanでは、ルートベースとポリシーベースの両方のトンネルがサポートされています。トンネル・タイプは、相互に干渉せずに共存できます。Oracle VPNのヘッドエンドでは、ルートベースのトンネルが使用されます。仮想トンネル・インタフェース(VTI)の構成構文を使用してLibreswanを構成することをお薦めします。
このドキュメントで使用される特定のパラメータの詳細は、サポートされているIPSecパラメータを参照してください。
使用しているLinuxディストリビューションによっては、Libreswanでクライアントがトラフィックを送受信できるように、インタフェースでIP転送を有効化する必要があります。/etc/sysctl.conf
ファイルで、次の値を設定し、sudo sysctl -p
を使用して更新を適用します。
eth0以外のインタフェースを使用している場合は、次の例のeth0
を、使用しているインタフェースに変更します(行5と7)。
net.ipv4.ip_forward=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0
Libreswan構成では、次の変数を使用します。構成を進める前に値を確認してください。
${cpeLocalIP}
: LibreswanデバイスのIPアドレス。${cpePublicIpAddress}
: LibreswanのパブリックIPアドレス。これは、外部インタフェースのIPアドレスです。ネットワーク・トポロジによっては、この値は${cpeLocalIP}
と異なる場合があります。${oracleHeadend1}
: 最初のトンネル用に、Oracle Consoleから取得したOracleパブリックIPエンドポイント。${oracleHeadend2}
: 2番目のトンネル用に、Oracle Consoleから取得したOracleパブリックIPエンドポイント。${vti1}
: 使用される最初のVTIの名前。たとえば、vti1です。${vti2}
: 使用される2番目のVTIの名前。たとえば、vti2です。${sharedSecret1}
: 最初のトンネルの事前共有キー。IPSec接続をOracle Consoleで設定するとき、デフォルトのOracle提供の事前共有キーを使用するか、独自のキーを指定することができます。${sharedSecret2}
: 2番目のトンネルの事前共有キー。IPSec接続をOracle Consoleで設定するとき、デフォルトのOracle提供の事前共有キーを使用するか、独自のキーを指定することができます。${vcnCidrNetwork}
: VCNのIP範囲。
Libreswan構成では、左と右の概念を使用して、ローカルCPEデバイスとリモート・ゲートウェイの構成パラメータを定義します。接続(Libreswan構成ではconn)のいずれかの側を左または右に指定できますが、その接続の構成は一貫性がある必要があります。この例の場合:
- 左: ローカルLibreswan CPE
- 右: Oracle VPNヘッドエンド
/etc/ipsec.d/oci-ipsec.conf
ファイルの次のテンプレートを使用します。このファイルでは、IPSec接続を設定するときにOracleによって作成される2つのトンネルを定義します。
CPEが1-1 NATデバイスの背後にある場合、leftid
パラメータのコメントを解除し、${cpePublicIpAddress}
と同じ値に設定します。
conn oracle-tunnel-1
left=${cpeLocalIP}
# leftid=${cpePublicIpAddress} # See preceding note about 1-1 NAT device
right=${oracleHeadend1}
authby=secret
leftsubnet=0.0.0.0/0
rightsubnet=0.0.0.0/0
auto=start
mark=5/0xffffffff # Needs to be unique across all tunnels
vti-interface=${vti1}
vti-routing=no
ikev2=no # To use IKEv2, change to ikev2=insist
ike=aes_cbc256-sha2_384;modp1536
phase2alg=aes_gcm256;modp1536
encapsulation=yes
ikelifetime=28800s
salifetime=3600s
conn oracle-tunnel-2
left=${cpeLocalIP}
# leftid=${cpePublicIpAddress} # See preceding note about 1-1 NAT device
right=${oracleHeadend2}
authby=secret
leftsubnet=0.0.0.0/0
rightsubnet=0.0.0.0/0
auto=start
mark=6/0xffffffff # Needs to be unique across all tunnels
vti-interface=${vti2}
vti-routing=no
ikev2=no # To use IKEv2, change to ikev2=insist
ike=aes_cbc256-sha2_384;modp1536
phase2alg=aes_gcm256;modp1536
encapsulation=yes
ikelifetime=28800s
salifetime=3600s
/etc/ipsec.d/oci-ipsec.secrets
ファイルの次のテンプレートを使用します。IPSec接続ごとに2つの行が含まれます(トンネルごとに1行)。
${cpePublicIpAddress} ${oracleHeadend1}: PSK "${sharedSecret1}"
${cpePublicIpAddress} ${oracleHeadend2}: PSK "${sharedSecret2}"
構成ファイルおよびシークレット・ファイルを設定した後、Libreswanサービスを再起動する必要があります。
Libreswanサービスの再起動により、既存のトンネルが影響を受ける可能性があります。
次のコマンドで、構成ファイルを再度読み取り、Libreswanサービスを再起動します。
service ipsec restart
次のip
コマンドを使用して、IPSecトンネルを介してVCNにトラフィックを送信する静的ルートを作成します。権限のないユーザー・アカウントでログインしている場合は、コマンドの前にsudo
を使用する必要があります。
ip route
コマンドで作成される静的ルートは、再起動後は維持されません。ルートを維持する方法については、使用しているLinuxディストリビューションのドキュメントを参照してください。ip route add ${VcnCidrBlock} nexthop dev ${vti1} nexthop dev ${vti2}
ip route show
検証
モニタリング・サービスは、クラウド・リソースをアクティブおよびパッシブにモニターするためにOracle Cloud Infrastructureから使用できます。サイト間VPNのモニタリングの詳細は、サイト間VPNのメトリックを参照してください。
問題がある場合は、サイト間VPNのトラブルシューティングを参照してください。
Libreswanステータスの検証
次のコマンドを使用して、Libreswanトンネルの現在の状態を確認します。
ipsec status
次を含む行が表示される場合、トンネルは確立されています:
STATE_MAIN_I4: ISAKMP SA established
IKEv2を使用している場合は、次のように表示されます:
STATE_V2_IPSEC_I (IPsec SA established)
今後、Libreswanトンネルに関してOracleのサポート・チケットをオープンする必要がある場合は、前述のipsec status
コマンドの出力を含めます。
トンネル・インタフェース・ステータスの確認
ifconfig
コマンドまたはip link show
コマンドを使用して、仮想トンネル・インタフェースが稼働中または停止されていることを確認します。インタフェースでtcpdumpなどのアプリケーションを使用することもできます。
使用可能なVTIを示す、実行中のLibreswan実装に関するifconfig
出力の例を次に示します。
ifconfig
<output trimmed>
vti01: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
inet6 fe80::5efe:a00:2 prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 10 dropped 0 overruns 0 carrier 10 collisions 0
vti02: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
inet6 fe80::5efe:a00:2 prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 40 dropped 0 overruns 0 carrier 40 collisions 0
ip link show
出力の例を次に示します:
ip link show
<output trimmed>
9: vti01@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue
state UNKNOWN mode DEFAULT group default qlen 1000
link/ipip 10.0.0.2 peer 129.213.240.52
10: vti02@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue
state UNKNOWN mode DEFAULT group default qlen 1000
link/ipip 10.0.0.2 peer 129.213.240.51
また、Oracle Consoleでは、各IPSecトンネルが稼働状態になっています。