Libreswanを使用したその他のクラウドへのアクセス
Libreswanは、FreeS/WANおよびOpenswanに基づいたオープン・ソースのIPSec実装です。ほとんどのLinuxディストリビューションには、Libreswanが含まれているか、簡単にインストールできます。これは、オンプレミス・ネットワークまたはクラウド・プロバイダ・ネットワークのいずれかのホストにインストールできます。このトピックでは、Oracle Cloud Infrastructure Virtual Cloud Network (VCN)を別のクラウド・プロバイダに接続するには、Libreswan VMを顧客構内機器(CPE)として設定したサイト間VPNを使用します。
ここに示す例では、他のクラウド・プロバイダはAmazon Web Services (AWS)です。サイト間VPNは、Oracle環境とAmazon環境間に暗号化されたセキュアなサイト間IPSec接続を提供します。これにより、2つのクラウドのリソースが、同じネットワーク・セグメント内にあるかのように、プライベートIPアドレスを使用して相互に通信できます。
Libreswan CPEガイドは、他のすべてのユースケースでも利用できます。
このルートベース構成の仮想トンネル・インタフェース(VTI)のサポートには、最低でもLibreswanバージョン3.18と、最近のLinux 3.xまたは4.xカーネルが必要です。この構成は、Libreswanバージョン3.29を使用して検証されました。
アーキテクチャ
サポートされているIPSecパラメータ
すべてのリージョンでサポートされているIPSecパラメータのベンダー非依存のリストについては、サポートされているIPSecパラメータを参照してください。
商用クラウド・レルムのOracle BGP ASNは31898です。US Government Cloud用のサイト間VPNを構成する場合は、Government Cloudに必要なサイト間VPNパラメータおよびOracleのBGP ASNを参照してください。United Kingdom Government Cloudについては、リージョンを参照してください。
構成
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の構成方法を示すコメントがあります。
構成プロセス
- AWS ConsoleまたはAPIを使用し、プロビジョニング・プロセスを使用してLibreswan VMを作成します。Oracle Linux、CentOSまたはRed Hatをメイン・オペレーティング・システムとして使用します。
-
新しいインスタンスが起動したら、SSHを使用して接続し、Libreswanパッケージをインストールします:
sudo yum -y install libreswan
-
AWS Consoleで、Libreswan VMインスタンスのソースおよび宛先チェックを無効にするため、インスタンスを右クリックしてネットワーキングをクリックし、次にソース/宛先チェックの変更をクリックします。プロンプトが表示されたら、はい、無効化をクリックします。
-
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
-
AWS Consoleで、AWSルート表を編集します。宛先としてVCN CIDR (172.0.0.0/16)を使用し、ターゲットとしてAWS LibreswanインスタンスID (この例ではi-016ab864b43cb368e)を指定したルールを追加します。
-
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トンネル・エンドポイント)に設定できます。
セキュリティ・グループの場合:
ネットワークACLの場合:
-
Oracle Consoleで、Libreswan AWSインスタンスのパブリックIPアドレス(34.200.255.174)を指し示す顧客構内機器(CPE)オブジェクトを作成します。これは、CPE構成ヘルパーを使用して簡単に行えます。
-
VCNにDRGがアタッチされていない場合は、Oracle ConsoleでDRGを作成し、VCNにアタッチします(172.0.0.0/16)。
-
Oracle ConsoleでIPSec接続を作成し、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で実行する追加構成がまだあるためです。共有シークレットを表示するには、各トンネルの「アクション・メニュー」()をクリックし、「詳細の表示」をクリックします。「共有シークレット」の横にある「表示」をクリックします。
-
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内のルールを編集します。
-
Oracle Consoleで、VCNのルート表を編集し、AWS VPC CIDR (10.0.0.0/16)を宛先CIDRブロックとして、前に作成したDRGをターゲットとして持つルールを追加します。留意事項: ルート表はサブネットに関連付けられているため、AWS VPCと通信する必要がある各サブネットに関連付けられているルート表を編集します。
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} ${ipAddress1}: PSK "${sharedSecret1}"
${cpePublicIpAddress} ${ipAddress2}: PSK "${sharedSecret2}"
構成ファイルおよびシークレット・ファイルを設定した後、次のコマンドで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 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トンネルが稼働状態になっています。