Strongswan
Strongswanは、オープン・ソースのIPSecベースのVPNソリューションです。ほとんどのLinuxディストリビューションには、Strongswanが含まれているか、簡単にインストールできます。これは、オンプレミス・ネットワークまたはクラウド・プロバイダ・ネットワークのいずれかのホストにインストールできます。
このトピックでは、Strongswanを実行しているCPEの構成について説明します。Strongswan 5.xブランチは、LinuxカーネルのネイティブNETKEY IPSecスタックでIKEv1とIKEv2の両方のキー交換プロトコルをサポートします。
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ヘッドエンドではルートベース・トンネルが使用されますが、次の各項に示す注意事項を考慮しながら、ポリシーベース・トンネルとともに使用できます。
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接続の基本的なレイアウトを示しています。
デフォルトのStrongswan構成ファイル
デフォルトのStrongswanインストールでは、次のファイルが作成されます:
etc/strongswan/ipsec.conf
: Strongswan構成のルート。/etc/strongswan/ipsec.secrets
: Strongswanがシークレットを検索する場所のルート(トンネルの事前共有キー)。
デフォルトのetc/strongswan/ipsec.conf
ファイルは、次の行を含みます:
Include /etc/strongswan/*.conf
デフォルトのetc/strongswan/ipsec.secrets
ファイルは、次の行を含みます:
include /etc/strongswan/ipsec.d/*.secrets
前述の行では、/etc/strongswan
ディレクトリのすべての.conf
および.secrets
ファイルが、Strongswanで使用されるメイン構成およびシークレット・ファイルに自動的にマージされます。
IKEv2の使用について
Oracleは、Internet Key Exchangeバージョン1 (IKEv1)およびバージョン2 (IKEv2)をサポートしています。コンソールでIKEv2を使用するようにIPSec接続を構成する場合、CPEでサポートされているIKEv2および関連するIKEv2暗号化パラメータのみを使用するようにCPEを構成する必要があります。OracleでIKEv1またはIKEv2用にサポートされているパラメータのリストについては、サポートされているIPSecパラメータを参照してください。
次の項のタスク3でIPSec構成ファイルを設定するときに、IKEバージョンを指定します。そのサンプル・ファイルには、IKEv1とIKEv2の構成方法を示すコメントがあります。
構成プロセス
次の構成プロセスでは、Strongswanでのルートベース・トンネルの構成方法について説明します。Oracle VPNのヘッドエンドでは、ルートベースのトンネルが使用されます。仮想トンネル・インタフェース(VTI)の構成構文を使用してStrongswanを構成することをお薦めします。
このドキュメントで使用される特定のパラメータの詳細は、サポートされているIPSecパラメータを参照してください。
使用しているLinuxディストリビューションによっては、Strongswanでクライアントがトラフィックを送受信できるように、インタフェースでIP転送を有効化する必要があります。/etc/sysctl.conf
ファイルで、次の値を設定し、sudo sysctl -p
を使用して更新を適用します。
eth0以外のインタフェースを使用している場合は、次の例のeth0
を、使用しているインタフェースに変更します(行5と7)。
複数のインタフェースを使用している場合は、そのインタフェースの行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.ens3.send_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.ens3.accept_redirects = 0
Strongswan構成では、次の変数を使用します。構成を進める前に値を確認してください。
${cpeLocalIP}
: StrongswanデバイスのIPアドレス。${cpePublicIpAddress}
: StrongswanのパブリックIPアドレス、および外部インタフェースのIPアドレス。ネットワーク・トポロジによっては、この値は${cpeLocalIP}
と異なる場合があります。${oracleHeadend1}
: 最初のトンネル用に、Oracle Consoleから取得したOracleパブリックIPエンドポイント。${oracleHeadend2}
: 2番目のトンネル用に、Oracle Consoleから取得したOracleパブリックIPエンドポイント。${sharedSecret1}
: 最初のトンネルの事前共有キー。IPSec接続をOracle Consoleで設定するとき、デフォルトのOracle提供の事前共有キーを使用するか、独自のキーを指定することができます。${sharedSecret2}
: 2番目のトンネルの事前共有キー。IPSec接続をOracle Consoleで設定するとき、デフォルトのOracle提供の事前共有キーを使用するか、独自のキーを指定することができます。${vcnCidrNetwork}
: VCNのIP範囲。
Strongswan構成では、左と右の概念を使用して、ローカルCPEデバイスとリモート・ゲートウェイの構成パラメータを定義します。接続(Strongswan構成ではconn)のいずれかの側を左または右に指定できますが、その接続の構成は一貫性がある必要があります。この例の場合:
- 左: ローカルStrongswan CPE
- 右: Oracle VPNヘッドエンド
/etc/strongswan/ipsec.conf
ファイルの次のテンプレートを使用します。このファイルでは、IPSec接続を設定するときにOracleによって作成される2つのトンネルを定義します。
CPEが1対1 NATデバイスの背後にある場合、leftid
パラメータのコメントを解除し、${cpePublicIpAddress}
と同じ値に設定します。
# basic configuration
config setup
conn %default
ikelifetime=28800s
keylife=3600s
rekeymargin=3m
keyingtries=%forever
mobike=no
ike=aes256-sha2_384-ecp384!
esp=aes256gcm16-modp1536!
conn oci-tunnel-1
left=${cpeLocalIP}
#leftid=${cpePublicIpAddress} # See preceding note about 1-1 NAT device
leftsubnet=0.0.0.0/0
leftauth=psk
right=${oracleHeadend1}
rightid=${oracleHeadend1}
rightsubnet=0.0.0.0/0
rightauth=psk
type=tunnel
keyexchange=ikev1 # To use IKEv2, change to ikev2
auto=start
dpdaction=restart
mark=13 # Needs to be unique across all tunnels
conn oci-tunnel-2
left={cpeLocalIP}
#leftid=${cpePublicIpAddress}
leftsubnet=0.0.0.0/0
leftauth=psk
right=${oracleHeadend2}
rightid=${oracleHeadend2}
rightsubnet=0.0.0.0/0
rightauth=psk
type=tunnel
keyexchange=ikev1 # To use IKEv2, change to ikev2
auto=start
dpdaction=restart
mark=14 # Needs to be unique across all tunnels
/etc/strongswan/ipsec.secrets
ファイルの次のテンプレートを使用します。IPSec接続ごとに2つの行が含まれます(トンネルごとに1行)。
${cpePublicIpAddress} ${oracleHeadend1}: PSK "${sharedSecret1}"
${cpePublicIpAddress} ${oracleHeadend2}: PSK "${sharedSecret2}"
次のコマンドでは、定義された名前でVTIインタフェースを作成し、ローカルおよびリモートIPを使用してトンネルにバインドします。
ip tunnel add <name> local <local IP> remote <remote IP> mode vti key <mark>
<name>
には、任意の有効なデバイス名(ipsec0、vti0など)を指定できます。ipコマンドは、vti
で始まる名前を、一部のインスタンスで特殊な名前として扱います(デバイス統計の取得時など)。IPアドレスは、IPSecトンネルのエンドポイントです。プライベートIPは、CPEがNATデバイスの背後にある場合に使用できます。-
<mark>
は、接続に対して構成されたマークと一致する必要があります。
VTIの作成後、それを有効化する必要があります(ip link set <name> up
を使用)。その後、次の例に示すように、ルートをインストールしてルーティング・プロトコルを使用できます。
ip tunnel add vti1 mode vti local 10.0.3.78 remote 193.123.68.187 key 13
ip link set vti1 up
IKEデーモンによるルート・インストールを無効にする必要があります。これを行うには、charon.conf
を次のように変更します。
Directory - /etc/strongswan/strongswan.d/Charon.conf
#Uncomment below statement
install_routes = no
構成ファイルおよびシークレット・ファイルを設定した後、Strongswanサービスを再起動する必要があります。次のコマンドを使用します:
Strongswan restart
Strongswanサービスの再起動により、既存のトンネルが影響を受ける可能性があります。
次の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のトラブルシューティングを参照してください。
OCIロギングを有効にしてVPNログにアクセスすることもできます。
トンネル・インタフェース・ステータスの確認
次のコマンドを使用して、Strongswanトンネルの現在の状態を確認します。
strongswan status
返された出力が次の例のようである場合は、トンネルが確立されています。
oci-tunnel-1[591]: ESTABLISHED 43 minutes ago, 10.0.3.78[129.148.216.212]...193.123.68.187[193.123.68.187]
oci-tunnel-1{399}: INSTALLED, TUNNEL, reqid 102, ESP in UDP SPIs: ce6a1525_i 4829c65c_o
oci-tunnel-1{399}: 0.0.0.0/0 === 0.0.0.0/0
今後、Strongswanトンネルに関してOracleのサポート・チケットをオープンする必要がある場合は、strongswan status
コマンドの完全な出力を含めます。
トンネル・インタフェース・ステータスの確認
ifconfig
コマンドまたはip link show
コマンドを使用して、仮想トンネル・インタフェースが稼働中または停止されていることを確認します。インタフェースでtcpdumpなどのアプリケーションを使用することもできます。
使用可能なVTIを示す、実行中のStrongswan実装に関するifconfig
出力の例を次に示します。
ifconfig
<output trimmed>
vti1: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
inet 10.10.10.1 netmask 255.255.255.252 destination 10.10.10.1
inet6 fe80::5efe:a00:34e prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 69209 bytes 4050022 (3.8 MiB)
RX errors 54 dropped 54 overruns 0 frame 0
TX packets 50453 bytes 3084997 (2.9 MiB)
TX errors 1016 dropped 0 overruns 0 carrier 1016 collisions 0
vti2: flags=209<UP,POINTOPOINT,RUNNING,NOARP> mtu 8980
inet 192.168.10.1 netmask 255.255.255.252 destination 192.168.10.1
inet6 fe80::5efe:a00:34e prefixlen 64 scopeid 0x20<link>
tunnel txqueuelen 1000 (IPIP Tunnel)
RX packets 101256 bytes 6494872 (6.1 MiB)
RX errors 12 dropped 12 overruns 0 frame 0
TX packets 70023 bytes 4443597 (4.2 MiB)
TX errors 2142 dropped 0 overruns 0 carrier 2142 collisions 0
ip link show
出力の例を次に示します:
ip link show
<output trimmed>
vti2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ipip 10.0.3.78 peer 139.185.34.172
14: vti1@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ipip 10.0.3.78 peer 193.123.68.187
Strongswanを使用した動的ルーティングの構成
Oracleでは、quaggaを使用してBGPを構成することをお薦めします。quaggaをインストールするには、次のOracle Linuxコマンドを使用します(別のLinuxディストリビューションを使用している場合、コマンドは多少異なる可能性があります):
sudo yum -y install quagga
zebra構成(/etc/quagga/zebra.conf
)を変更して、VTI IPアドレスを定義します。これは、BGPがピアリングを使用するため必要です。zebraの次の変数を定義します:
${vti_name1}
: 使用される最初のVTIの名前。たとえば、vti1です。${vti_name2}
: 使用される2番目のVTIの名前。たとえば、vti2です。${vti_ipaddress1}
: 使用される最初のVTIに割り当てるIPアドレス。${vti_ipaddress2}
: 使用される2番目のVTIに割り当てるIPアドレス。${local_subnet}
: ローカルCPEサブネット。
これらの変数は、次の構成ファイルの抜粋で使用されています:
!
hostname strongswan-centos
log file /var/log/quagga/quagga.log
!
interface ens3
ipv6 nd suppress-ra
!
interface ens5
ipv6 nd suppress-ra
!
interface lo
!
interface <Vti_name1>
ip address ${vti_ipaddress1}
ipv6 nd suppress-ra
!
interface <Vti_name2>
ip address ${vti_ipaddress2}
ipv6 nd suppress-ra
!
ip route ${local_subnet} <Vti_name1>
ip route ${local_subnet} <Vti_name2>
!
ip forwarding
!
!
line vty
!
BGP構成には、bgpd構成ファイルも必要です。bgpdの次の変数を定義します:
${LOCAL_ASN}
: ローカル・ネットワークのBGP ASN。${router-id_ipaddress}
: ローカル・ネットワークのBGP ID。${local_subnet}
: 通知する必要があるローカル・サブネット。${bgp_peer-ip _network}
: OCIのピアIPネットワークの/30 CIDR。${neighbor_peer_ip_address}
: OCI BGPピアのIPアドレス。
これらの変数は、/etc/quagga/bgpd.conf
から抜粋した次の構成ファイルで使用されています:
hostname <host-name>
router bgp ${LOCAL_ASN}
bgp router-id ${router-id_ipaddress}
network ${bgp_peer-ip _network}
network ${bgp_peer-ip _network}
network ${local_subnet}
neighbor ${neighbour_peer_ip_address} remote-as 31898
neighbor ${neighbour_peer_ip_address} ebgp-multihop 255
neighbor ${neighbour_peer_ip_address} next-hop-self
neighbor ${neighbour_peer_ip_address} remote-as 31898
neighbor ${neighbour_peer_ip_address} ebgp-multihop 255
neighbor ${neighbour_peer_ip_address} next-hop-self
log file bgpd.log
log stdout
Strongswanでルートおよび仮想IPを使用できるようにするには、/etc/strongswan/strongswan.d/Charon.conf
を変更する必要があります。
#install_routes = yes
および#install_virtual_ip = yes
という行のコメントを解除し、次のように値を"no"に変更します:
#Tunnels
install_routes = no
#Install virtual IP addresses.
install_virtual_ip = no
zebraおよびBGPDのサービスを有効化および起動するには、次のコマンドを使用します:
systemctl start zebra
systemctl enable zebra
systemctl start bgpd
systemctl enable bgpd