Libreswanを使用したその他のクラウドへのアクセス

Libreswanは、FreeS/WANおよびOpenswanに基づいたオープン・ソースのIPSec実装です。ほとんどのLinuxディストリビューションには、Libreswanが含まれているか、簡単にインストールできます。これは、オンプレミス・ネットワークまたはクラウド・プロバイダ・ネットワークのいずれかのホストにインストールできます。このトピックでは、Libreswan VMを顧客構内機器(CPE)として設定したサイト間VPNを使用して、Oracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)を別のクラウド・プロバイダに接続する方法について説明します。

ここに示す例では、他のクラウド・プロバイダはAmazon Web Services (AWS)です。サイト間VPNは、Oracle環境とAmazon環境間に暗号化されたセキュアなサイト間IPSec接続を提供します。これにより、2つのクラウドのリソースが、同じネットワーク・セグメント内にあるかのように、プライベートIPアドレスを使用して相互に通信できます。

Libreswan CPEガイドは、他のすべてのユースケースでも利用できます。

このルートベース構成の仮想トンネル・インタフェース(VTI)のサポートには、最低でもLibreswanバージョン3.18と、最近のLinux 3.xまたは4.xカーネルが必要です。この構成は、Libreswanバージョン3.29を使用して検証されました。

アーキテクチャ

次の図は、接続の一般的なレイアウトを示しています。

この図は、サイト間VPNおよびLibreswan CPEを使用して接続された2つのクラウドの一般的なレイアウトを示しています。

サポートされているIPSecパラメータ

すべてのリージョンでサポートされているIPSecパラメータのベンダー非依存のリストについては、サポートされているIPSecパラメータを参照してください。

商用クラウド・レルムのOracle BGP ASNは31898です。US Government Cloud用のサイト間VPNを構成する場合は、Government Cloudに必要なサイト間VPNパラメータおよびOracleのBGP ASNを参照してください。United Kingdom Government Cloudについては、OracleのBGP ASNを参照してください。

構成

重要

この項の構成手順は、Libreswan用のOracle Cloud Infrastructureで提供されています。サポートが必要な場合は、Libreswanのドキュメントを参照してください。

Libreswanでは、ルートベースとポリシーベースの両方のトンネルがサポートされています。トンネル・タイプは、相互に干渉せずに共存できます。Oracle VPNのヘッドエンドでは、ルートベースのトンネルが使用されます。仮想トンネル・インタフェース(VTI)の構成構文を使用してLibreswanを構成することをお薦めします。

このドキュメントで使用される特定のパラメータの詳細は、サポートされている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パラメータを参照してください。

次の項のタスク4でIPSec構成ファイルを設定するときに、IKEバージョンを指定します。そのサンプル・ファイルには、IKEv1とIKEv2の構成方法を示すコメントがあります。

構成プロセス

タスク1: AWS Libreswanインスタンスの準備
  1. AWS ConsoleまたはAPIを使用し、プロビジョニング・プロセスを使用してLibreswan VMを作成します。Oracle Linux、CentOSまたはRed Hatをメイン・オペレーティング・システムとして使用します。
  2. 新しいインスタンスが起動したら、SSHを使用して接続し、Libreswanパッケージをインストールします:

    sudo yum -y install libreswan
  3. AWS Consoleで、Libreswan VMインスタンスのソースおよび宛先チェックを無効にするため、インスタンスを右クリックして「ネットワーキング」をクリックし、次にソース/宛先チェックの変更をクリックします。プロンプトが表示されたら、はい、無効化をクリックします。

    この図は、Libreswan VMインスタンスでソース/宛先チェックを無効にするAWS Consoleのダイアログ・ボックスを示しています。
  4. Libreswan VMで、AWSクライアントがLibreswan VMを介してトラフィックを送信および受信できるように、IP_forwardを構成します。/etc/sysctl.confファイルで、次の値を設定し、sudo sysctl -pを使用して更新を適用します。

    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
  5. AWS Consoleで、AWSルート表を編集します。宛先としてVCN CIDR (172.0.0.0/16)を使用し、ターゲットとしてAWS LibreswanインスタンスID (この例ではi-016ab864b43cb368e)を指定したルールを追加します。

    この図は、ルート・ルールを編集するためのAWS Consoleのダイアログ・ボックスを示しています。
  6. AWS Consoleで、ポート4500および500でインバウンドTCPトラフィックおよびUDPトラフィックを有効にし、AWS Libreswan VMとのOracle Cloud Infrastructureサイト間VPN IPSec接続を可能にします。このタスクには、AWSセキュリティ・グループとネットワークACLの編集が含まれます。ソース値は、0.0.0.0/0のかわりにOracleパブリックIP (Oracle VPNヘッドエンドのIPSecトンネル・エンドポイント)に設定できます。

    セキュリティ・グループの場合:

    この図は、セキュリティ・グループ・ルールを編集するためのAWS Consoleのダイアログ・ボックスを示しています。

    ネットワークACLの場合:

    この図は、ネットワークACLを編集するためのAWS Consoleのダイアログ・ボックスを示しています。
タスク2: Oracle Cloud Infrastructure DRGおよびCPEオブジェクトの構成
  1. Oracle Consoleで、Libreswan AWSインスタンスのパブリックIPアドレス(34.200.255.174)を指し示す顧客構内機器(CPE)オブジェクトを作成します。これは、CPE構成ヘルパーを使用して簡単に行えます。

  2. VCNにDRGがアタッチされていない場合は、Oracle ConsoleDRGを作成し、VCNにアタッチします(172.0.0.0/16)。

  3. Oracle ConsoleIPSec接続を作成し、AWS VPC CIDR (10.0.0.0/16)を指し示すようにします。つまり、IPSec接続を作成する場合、静的ルートをAWS VPC CIDRに設定します。

    構成済の各IPSec接続に対して、Oracleが2つのトンネルを作成し、それぞれに次のアイテムを割り当てます:

    • Oracle VPNヘッドエンドのIPSecトンネル・エンドポイント
    • Oracle VPNトンネル共有シークレット

    IPSec接続の「アクション」メニュー(アクション・メニュー)をクリックして、「詳細の表示」をクリックすると、IPSecトンネル・ステータスとOracle VPNヘッドエンドIPを表示できます。最初は、各トンネルは停止状態(オフライン)になっています。これは、後でAWS Libreswan VMで実行する追加構成がまだあるためです。

    共有シークレットを表示するには、各トンネルの「アクション」メニュー(アクション・メニュー)をクリックし、「詳細を表示」をクリックします。「共有シークレット」の横にある「表示」をクリックします。

  4. Oracle Consoleで、VCNのセキュリティ・ルールを編集して、AWSセキュリティ・グループやネットワークACLの場合と同様に、ポート4500および500でイングレスTCPおよびUDPトラフィックを有効にします。永続的なパブリックIPの場合、0.0.0.0/0のかわりにAWS Libreswan VMのパブリックIPアドレスを使用できます。また、AWS VPC CIDR (10.0.0.0/16)からのイングレス・トラフィックに対するすべてのプロトコルおよびポートを開きます。留意事項: セキュリティ・リストはサブネットに関連付けられているため、AWS VPCと通信する必要がある各サブネットに関連付けられているセキュリティ・リストを編集します。または、VCNネットワーク・セキュリティ・グループを使用している場合、関連するNSG内のルールを編集します。

  5. Oracle Consoleで、VCNのルート表を編集し、AWS VPC CIDR (10.0.0.0/16)を宛先CIDRブロックとして、前に作成したDRGをターゲットとして持つルールを追加します。留意事項: ルート表はサブネットに関連付けられているため、AWS VPCと通信する必要がある各サブネットに関連付けられているルート表を編集します。

タスク3: 必要な構成値の確認

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範囲。
タスク4: 構成ファイル: /etc/ipsec.d/oci-ipsec.confの設定

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
タスク5: シークレット・ファイル: /etc/ipsec.d/oci-ipsec.secretsの設定

/etc/ipsec.d/oci-ipsec.secretsファイルの次のテンプレートを使用します。IPSec接続ごとに2つの行が含まれます(トンネルごとに1行)。

${cpePublicIpAddress} ${ipAddress1}: PSK "${sharedSecret1}"
${cpePublicIpAddress} ${ipAddress2}: PSK "${sharedSecret2}"
タスク6: Libreswan構成の再起動

構成ファイルおよびシークレット・ファイルを設定した後、次のコマンドでLibreswanサービスを再起動する必要があります。

重要

Libreswanサービスの再起動により、既存のトンネルが影響を受ける可能性があります。
service ipsec restart
タスク7: IPルーティングの構成

次の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 2001:db8::1 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 2001:db8::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.1.2.3 peer 192.168.0.51
 
10: vti02@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue
state UNKNOWN mode DEFAULT group default qlen 1000
   link/ipip 10.1.2.3 peer 192.168.0.49

また、Oracle Consoleでは、各IPSecトンネルが稼働状態になっています。