On-PとOCI間のIPSec VPN接続のシミュレーション (Libreswanを利用)

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

__初めに__
今回は、Libreswanを使用して、On-P (または他のクラウド) と Oracle Cloud Infrastruture (OCI) 間の IPSec VPN 接続を検証するシミュレーションを紹介します。OCI大阪リージョンをOn-P側 (`左`)、東京リージョンをVPNヘッドエンド側 (`右`)とした例で説明します。 Libreswan は、"Customer Premises Equipment" (CPE) をシミュレートするために、左側でインストールおよび構成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8abdb6d2-f75f-913e-a917-3cf383aab663.png)

__検証環境__
|項目|内容|コメント|
|--|--|--|
|OCI リージョン (左)|大阪|Libreswan CPE<br> (On-Pまたは他のクラウドをシミュレート)|
|OCI リージョン (右)|東京|VPN ヘッドエンド|
|Computeインスタンスの数 |合計３個|左側:２個 (接続元 + Libreswan)<br>右側:１個 (接続先)|
|ComputeインスタンスのOS|Oracle Linux 8||
|Libreswan バージョン|4.5||

- このテストでは、左側が Librswan CPE（接続元）を意味し、右側がVPNヘッドエンド（接続先）を意味します。

- Libreswanインスタンス (CPE) には<font color=blue>パブリックIP</font>が必要なため、<strong>パブリック・サブネット</strong>に作成する必要があります。他の２つのインスタンスについては、パブリック・サブネットまたはプライベート・サブネットのいずれかに作成できます (この例では、全部パブリック・サブネットに作成します)。 左側のクライアントとLibreswanを異なるサブネットに置いても問題ありません。その場合、サブネット間のトラフィックが許可されていることを確保する必要があります。

- OCIアカウントごとに２つの「Always Free Compute VMs」があるため、１つのVMを接続先クライアントとして使用できます (右側)。 その他のネットワーク関連リソース（VCN/サブネット、インターネットGW、DRG、IPSec VPNなど）は無料でご利用いただけます。

__索引__
- [1. 事前準備](#1-事前準備)
  - [1-1. 左側（接続元）](#1-1-左側接続元)
  - [1-2. 右側（接続先）](#1-2-右側接続先)
- [2. CPE（顧客構内機器 ）とIPSec接続の作成 (右)](#2-cpe顧客構内機器とipsec接続の作成-右)
  - [2-1. CPEの作成](#2-1-cpeの作成)
  - [2-2. IPSec接続の作成](#2-2-ipsec接続の作成)
- [3. Libreswanのインストール (左)](#3-libreswanのインストール-左)
- [4. Libreswanの設定 (左)](#4-libreswanの設定-左)
  - [4-1. ファイル sysctl.conf を編集](#4-1-ファイル-sysctlconf-を編集)
  - [4-2. 構成ファイルの作成](#4-2-構成ファイルの作成)
  - [4-3. シークレット・ファイルの作成](#4-3-シークレットファイルの作成)
  - [4-4. Libreswanサービスの起動](#4-4-libreswanサービスの起動)
  - [4-5. IPルーティングの設定](#4-5-ipルーティングの設定)
  - [4-6. VNICの編集](#4-6-vnicの編集)
- [5. 接続テスト(Ping & SSH)](#5-接続テストping--ssh)
  - [5-1. 左から右へ](#5-1-左から右へ)
  - [5-2. 右から左へ](#5-2-右から左へ)
- [トラブル・シューティング](#トラブルシューティング)
  - [問題-1 (IPSec ステータス "停止")](#問題-1-ipsec-ステータス-停止)
  - [問題-2 (Libreswan<==>右)](#問題-2-libreswan右)
  - [問題-3 (Ping 左<==>右)](#問題-3-ping-左右)
  - [問題-4 (SSH 左<==>右)](#問題-4-ssh-左右)
  - [問題-5 (SSH 成功, PING 失敗)](#問題-5-ssh-成功-ping-失敗)

# 1. 事前準備
次のようにネットワーク関連のリソースを作成します。
## 1-1. 左側（接続元）
|タイプ|項目|内容|コメント|
|--|--|--|--|
|VCN|CIDR|192.168.0.0/16||
|Subnet|CIDR|192.168.0.0/24|パブリック|
|Internet GW||||
|Security List|Ingress|XX.XX.XX.XX/32, TCP 22|SSH 経由でインスタンスに接続する IP アドレスを指定|
|||<font color=blue>192.168.0.0/24</font>, 全てのプロトコル|SSH/PINGを含め、内部トラフィック（左側のクライアント<==>Libreswan）を許可|
|||<font color=blue>10.0.0.0/24</font>, 全てのプロトコル|SSH/PINGを含め、右側からのインバウンド・トラフィックを許可|
|||<font color=blue>VPN パブリック IP 1</font>,<br><font color=blue>TCP</font> 500,4500|IPSecトンネル１のエンドポイント (取得方法は、[STEP 2-2](#2-2-ipsec接続の作成)をご参照)|
|||VPN パブリック IP 1,<br><font color=blue>UDP</font> 500,4500|同上|
|||<font color=blue>VPN パブリック IP 2</font>,<br><font color=blue>TCP</font> 500,4500|IPSecトンネル２のエンドポイント (取得方法は、[STEP 2-2](#2-2-ipsec接続の作成)をご参照)|
|||VPN パブリック IP 2,<br><font color=blue>UDP</font> 500,4500|同上|
||Egress|0.0.0.0/0, 全てのプロトコル|
|Route Table|ルール|ターゲット: Internet GW<br>宛先: 0.0.0.0/0|外部からインスタンスを接続するするため|
|||ターゲット: <font color=blue>Libreswan's Private IP</font><br>宛先: <font color=blue>10.0.0.0/24</font>|右側のサブネットのCIDRブロックを指定|

## 1-2. 右側（接続先）
|タイプ|項目|内容|コメント|
|--|--|--|--|
|VCN|CIDR|10.0.0.0/16||
|Subnet|CIDR|10.0.0.0/24|パブリック|
|DRG|Attachment|VCN (Right)||
|Internet GW||||
|Security List|Ingress|XX.XX.XX.XX/32, TCP 22|SSH 経由でインスタンスに接続する IP アドレスを指定|
|||<font color=blue>192.168.0.0/24</font>, 全てのプロトコル|SSH/PINGを含め、左側からのインバウンド・トラフィックを許可|
|||<font color=blue>Libreswan パブリック IP</font>,<br><font color=blue>TCP</font> 500,4500|Libreswanからのインバウンド・トラフィックを許可|
|||Libreswan パブリック IP,<br><font color=blue>UDP</font> 500,4500|同上|
||Egress|0.0.0.0/0, 全てのプロトコル|
|Route Table|ルール|ターゲット: Internet GW<br>宛先: 0.0.0.0/0|外部からインスタンスを接続するするため|
|||ターゲット: <font color=blue>DRG</font><br>宛先: <font color=blue>192.168.0.0/24</font>|左側のサブネットのCIDRブロックを指定|

# 2. CPE（顧客構内機器）とIPSec接続の作成 (右)
## 2-1. CPEの作成
ネットワーキング -> 顧客接続性 -> 顧客構内機器 -> 「顧客構内機器の作成」ボタンを押す

<strong>名前</strong>: CPE名を入力
<strong>Public IP Address</strong>: LibreswanインスタンスのパブリックIPを入力
<strong>ベンダー</strong>: `Libreswan`を選択
<strong>Platform Version</strong>: リストから選択
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1eb28c6d-571e-6012-8530-e16f261c78d8.png", width="600">

## 2-2. IPSec接続の作成
ネットワーキング -> 顧客接続性 -> サイト間VPN ->「IPSec接続の作成」ボタンを押す

以下のように必要な情報を入力し、「IPSec接続の作成」ボタンを押します。
<strong>名前</strong>: IPSec接続名を入力
<strong>CPE</strong>: リストから作成した CPE を選択
<strong>DRG</strong>: リストから既存のDRGを選択。
<strong>オンプレミス・ネットワークへのルート</strong>: 左側のサブネットの CIDR ブロックを入力
<strong>トンネル１と２のルーティング・タイプ</strong>: `静的ルーティング`を指定

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/948af6c8-40b0-d908-9691-3cdd4a5e0ff9.png", width="600">
IPSec接続が作成されたら、次のようにVPNのパブリックIPと秘密鍵を取得します。（これらの情報は[STEP-4](#4-libreswanの設定-左)で使用されます。）

__VPN パブリック IP__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/cacd4724-0984-dac0-5429-87e624c23be3.png)
最初は、各トンネルは<strong>停止状態</strong>(オフライン)になっています。これは、後で追加設定がまだあるためです。 

__秘密鍵__
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e6ccc6f9-e4b0-39cb-885c-34a992cd1a65.png", width="600">
2つのトンネルの秘密鍵をコピーします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/7d2e28a9-6173-299b-a32f-56150bbb3028.png", width="350">


# 3. Libreswanのインストール (左)
インストール用コマンド: `sudo yum -y install libreswan`
バージョンを確認するコマンド: `sudo ipsec --version`

```bash
[opc@linux8-libreswan ~]$ sudo yum -y install libreswan
...
[opc@linux8-libreswan ~]$ sudo ipsec --version
Linux Libreswan 4.5 (XFRM) on 5.4.17-2136.309.5.el8uek.x86_64
[opc@linux8-libreswan ~]$
```

インストール後、以下のファイルとディレクトリが作成されます。
`/etc/ipsec.conf`
`/etc/ipsec.secrets`
`/etc/ipsec.d/`

# 4. Libreswanの設定 (左)
## 4-1. ファイル sysctl.conf を編集
`/etc/sysctl.conf`を開き、次のように内容を追加します。
```bash
[opc@linux8-libreswan ~]$ sudo vi /etc/sysctl.conf
...
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
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.ens3.rp_filter = 0
```
追加後、`sudo sysctl -p`を使用して更新を適用します。

※、`ens3`以外のインターフェイスを使用している場合は、そのインターフェイスに変更します (`ip addr`または`ifconfig`で確認してください)。

## 4-2. 構成ファイルの作成
以下のように構成ファイルを作成します。

ファイル名: `/etc/ipsec.d/oci-ipsec.conf`
例:
```bash
[opc@linux8-libreswan ~]$ sudo vi /etc/ipsec.d/oci-ipsec.conf
conn oracle-tunnel-1
     left=192.168.0.59 # Private IP of Libreswan CPE
     leftid=XX.XX.145.20 # Public IP of Libreswan CPE
     right=XX.XX.57.17 # VPN Public IP 1
     authby=secret
     leftsubnet=192.168.0.0/24
     rightsubnet=10.0.0.0/24
     auto=start
     mark=5/0xffffffff # Needs to be unique across all tunnels
     vti-interface=vti01
     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=192.168.0.59 # Private IP of Libreswan CPE
     leftid=XX.XX.145.20 # Public IP of Libreswan CPE
     right=XX.XX.68.238 # VPN Public IP 2
     authby=secret
     leftsubnet=192.168.0.0/24
     rightsubnet=10.0.0.0/24
     auto=start
     mark=6/0xffffffff # Needs to be unique across all tunnels
     vti-interface=vti02
     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
```

## 4-3. シークレット・ファイルの作成
次のようにシークレット ファイルを作成します。IPSec接続ごとに２つの行が含まれます(トンネルごとに１行)。

ファイル名: `/etc/ipsec.d/oci-ipsec.secrets`
ファイルの中身:
`CPE_Public_IP  VPN_Public_IP_1: PSK "Secret_Key_1"`
`CPE_Public_IP  VPN_Public_IP_2: PSK "Secret_Key_2"`

例:
```bash
[opc@linux8-libreswan ~]$ sudo vi /etc/ipsec.d/oci-ipsec.secrets
XX.XX.145.20 XX.XX.57.17:  PSK "vOO9ICtswi................<omitted>.......................DGPT49"
XX.XX.145.20 XX.XX.68.238: PSK "bM3QiQFPee................<omitted>......................OYY7XGY"
```

## 4-4. Libreswanサービスの起動
コマンド: `sudo systemctl restart ipsec`

```bash
[opc@linux8-libreswan ~]$ sudo systemctl restart ipsec
```
サービスが開始されたら、次のコマンドで結果を確認します。
コマンド: `sudo ipsec verify`
```bash
[opc@linux8-libreswan ~]$ sudo ipsec verify
Verifying installed system and configuration files

Version check and ipsec on-path                         [OK]
Libreswan 4.5 (XFRM) on 5.4.17-2136.309.5.el8uek.x86_64
Checking for IPsec support in kernel                    [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                    [OK]
         ICMP default/accept_redirects                  [OK]
         XFRM larval drop                               [OK]
Pluto ipsec.conf syntax                                 [OK]
Checking rp_filter                                      [OK]
Checking that pluto is running                          [OK]
 Pluto listening for IKE on udp 500                     [OK]
 Pluto listening for IKE/NAT-T on udp 4500              [OK]
 Pluto ipsec.secret syntax                              [OK]
Checking 'ip' command                                   [OK]
Checking 'iptables' command                             [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options                [OK]
```

コマンド: `sudo ipsec status`
以下のように出力結果を絞りこむと、確認しやすいです。
例:
`sudo ipsec status | grep active`
`sudo ipsec status | grep established`
２つのVPNトンネルが立てられることを確認します。
```bash
[opc@linux8-libreswan ~]$ sudo ipsec status | grep active
000 Total IPsec connections: loaded 2, active 2
[opc@linux8-libreswan ~]$ sudo ipsec status | grep established
000 #1: "oracle-tunnel-1":4500 STATE_MAIN_I4 (IKE SA established); REPLACE in 27394s; newest ISAKMP; lastdpd=2s(seq in:0 out:0); idle;
000 #4: "oracle-tunnel-1":4500 STATE_QUICK_I2 (IPsec SA established); REPLACE in 1975s; newest IPSEC; eroute owner; isakmp#1; idle;
000 #2: "oracle-tunnel-2":4500 STATE_MAIN_I4 (IKE SA established); REPLACE in 27153s; newest ISAKMP; lastdpd=2s(seq in:0 out:0); idle;
000 #3: "oracle-tunnel-2":4500 STATE_QUICK_I2 (IPsec SA established); REPLACE in 1984s; newest IPSEC; eroute owner; isakmp#2; idle;
```
コマンド: `ip addr` or `ifconfig`
２つの仮想インターフェイスが追加されていることを確認します。
```bash
[opc@linux8-libreswan ~]$ ip addr
...<omitted>...
3: ip_vti0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
4: vti01@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 192.168.0.59 peer XXX.XXX.57.17
    inet6 fe80::5efe:c0a8:97/64 scope link
       valid_lft forever preferred_lft forever
5: vti02@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 8980 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 192.168.0.59 peer XXX.XXX.68.238
    inet6 fe80::5efe:c0a8:97/64 scope link
       valid_lft forever preferred_lft forever
```
コマンド`ip link`で結果を確認することもできます。`ip addr`の結果と大体同じで、省略させてください。

__IPSec ステータス__
全ての出力が上記のように問題がない場合は、接続先のOCIコンソールからIPSecステータスを確認します。ステータスが「<font color=blue>稼働中</font>」(<font color=blue>Up</font>)になったらOKです。

「稼働中」(Up)の状態が表示されるまで、それほど時間はかかりません。 (私のテストでは数秒しかかかりませんでした。しばらく状態が変更されない場合は、コンソール画面をリフレッシュしてください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/17208c87-b82a-38bf-35e1-12f48cd1f352.png)

## 4-5. IPルーティングの設定
このステップを実施しなかった場合、[このような問題](#問題-2-libreswan右)が発生します。
```bash
[opc@linux8-libreswan ~]$ sudo ip route add 10.0.0.0/24 nexthop dev vti01 nexthop dev vti02
[opc@linux8-libreswan ~]$ ip route show
default via 192.168.0.1 dev ens3
default via 192.168.0.1 dev ens3 proto dhcp src 192.168.0.59 metric 100
10.0.0.0/24
        nexthop dev vti01 weight 1
        nexthop dev vti02 weight 1
...<omitted>...
```
`ip route`コマンドで作成される静的ルートは、再起動後は維持されません。ルートを維持する方法については、使用しているLinuxディストリビューションのドキュメントを参照してください。

## 4-6. VNICの編集
コンピュート → インスタンス → インスタンスの詳細 → アタッチされたVNIC

３ドットのメニューを右クリックし、「VNCIの編集」を選択して、「ソース/宛先チェックのスキップ」をチェックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/4f7d0fd8-fcea-ae6e-752e-98d46f282609.png)
このステップを実行しなかった場合は、Libreswanと右側のクライアントの間で接続できますが、Libreswanを介して左側から右側のクライアントに接続することはできません。

# 5. 接続テスト(Ping & SSH)
## 5-1. 左から右へ
__PING__
```bash
[opc@linux8-onp ~]$ ping 10.0.0.3
PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data.
64 bytes from 10.0.0.3: icmp_seq=1 ttl=252 time=8.67 ms
64 bytes from 10.0.0.3: icmp_seq=2 ttl=252 time=19.2 ms
^C
--- 10.0.0.3 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 8.673/13.923/19.174/5.251 ms
[opc@linux8-onp ~]$
```
__ファイアウォール・サービス__
まず、Libreswan のファイアウォール・サービスを停止します。 そうしないと、Libreswanを経由し左側と右側の間、双方向にSSH接続しようとすると、「No route to host」のような[問題](#問題-4-ssh-左右)を遭遇する可能性があります。

__注意__
- ファイアウォール・サービスの停止は、<font color=blue>Libreswanだけ</font>で行えば問題ありません。左側と右側のクライアントでの停止は<strong>不要</strong>です（誤解される人が多い）。
- Oracle Linux 上のファイアウォール・サービスは、VM再起動後にデフォルトで自動的に開始されます。

```bash
[opc@linux8-libreswan ~]$ sudo systemctl stop firewalld
[opc@linux8-libreswan ~]$ sudo systemctl status firewalld
œ firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Wed 2022-08-24 03:05:32 GMT; 8s ago
     Docs: man:firewalld(1)
  Process: 1462 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 1462 (code=exited, status=0/SUCCESS)
...<omitted>...
```

__SSH 接続__
接続元のクライアントに SSH 秘密鍵を保存しておきます。(例：`/home/opc/.ssh/id_rsa`)
```
[opc@linux8-onp ~]$ ssh 10.0.0.3
The authenticity of host '10.0.0.3 (10.0.0.3)' can't be established.
ECDSA key fingerprint is SHA256:<key_fingerprint_is_omitted>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.0.0.3' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Tue Aug 23 20:39:20 2022 from XXX.XXX.XXX.XXX
[opc@linux8-vpn ~]$
```

## 5-2. 右から左へ
__PING__
```bash
[opc@linux8-vpn ~]$ ping 192.168.0.230
PING 192.168.0.230 (192.168.0.230) 56(84) bytes of data.
64 bytes from 192.168.0.230: icmp_seq=1 ttl=61 time=8.72 ms
64 bytes from 192.168.0.230: icmp_seq=2 ttl=61 time=8.68 ms
^C
--- 192.168.0.230 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 8.681/8.702/8.723/0.021 ms
[opc@linux8-vpn ~]$
```
__SSH 接続__
上記「STEP 5-1」と同じように、Libreswan のファイアウォール・サービスが停止していることと、秘密鍵が右側のクライアントに格納されていることを確認しておいでください。

```
[opc@linux8-vpn ~]$ ssh 192.168.0.230
The authenticity of host '192.168.0.230 (192.168.0.230)' can't be established.
ECDSA key fingerprint is SHA256:<key_fingerprint_is_omitted>.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.230' (ECDSA) to the list of known hosts.
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Aug 24 03:04:35 2022 from XXX.XXX.XXX.XXX
[opc@linux8-onp ~]$
```
__注意__
Libreswanと右側のクライアント間の接続テストをスキップしたけど、実は、STEP 5-1 と STEP 5-2 の前に実施しました。結果はOKだったので、省略します。次の順番で疎通テストを行うことをお勧めします。

- a. Libreswan ==> 右
- b. Libreswan <== 右
- c. 左 ==> 右
- d. 左 <== 右

# トラブル・シューティング
## 問題-1 (IPSec ステータス "停止")
<strong>現象</strong>: IPSecサービスを起動した後、IPSecトンネルのステータスが「停止」のままで、「稼働中」に変更しません。インターフェイス`vti01`と`vti02`も作成されていません。
<strong>可能な原因-1</strong>: TCP/UDP ポート 500と4500ポートがセキュリティ・リストに追加されていません。 それらは両側に追加する必要があります。
<strong>可能な原因-2</strong>: IPSec構成ファイルに、IPアドレスが間違っています。 (パブリック/プライベートIPとCIDRブロックをコピペする時は、気を付けてください。)
<strong>可能な原因-3</strong>: シークレット・ファイルに、IPアドレスまたは PSK キーが間違っています。 (２つのIPSecトンネルに対して2行があり、IPと秘密鍵をコピペする時は気を付けてください。)

## 問題-2 (Libreswan<==>右)
<strong>現象</strong>: IPSecトンネルは「<font color=blue>稼働中 (UP)</font>」の状態を示していますが、Libreswanと右側クライアントの間、PINGができなくて、SSH接続もできません。
<strong>可能な原因-1</strong>: 右側のルート・テーブルにルートを追加する必要があります (宛先: 192.168.0.0/24, ターゲット・タイプ: <font color=blue>DRG</font>)。
<strong>可能な原因-2</strong>: Libreswanインスタンスに IP ルーティングを追加するのを忘れたか ([STEP 4-5](#4-5-ipルーティングの設定))、再起動後に`ip route`コマンドの結果が保持されない可能性があります。
<strong>可能な原因-3</strong>: 「UP」状態は、VPNパブリックIPとCPEパブリックIPの間に、TCP/UDP 500と4500ポート経由の接続が正常であることを意味します。 疎通テストを実施するため、両側のセキュリティ・リスト(あるいはNSG)に、<font color=blue>TCP(22)/ICMP</font>も許可される必要があります（IngressとEgress両方を確認）。

## 問題-3 (Ping 左<==>右)
<strong>現象</strong>: Libreswan と右側クライアントの間で PING とSSH 接続ができますが、左側クライアントと右側クライアントの間、PINGができなくて、SSH接続もできません。
<strong>可能な原因-1</strong>: 「ソース/宛先チェックのスキップ」をチェックする必要があります ([STEP 4-6](#4-6-vnicの編集))。
<strong>可能な原因-2</strong>: 左側クライアントと Libreswan 間の内部トラフィックを許可する必要があります。
<strong>可能な原因-3</strong>: 左側のルート・テーブルにルートを追加する必要があります (宛先: 10.0.0.0/24, ターゲット・タイプ: <font color=blue>Private IP</font>, ターゲット: Libreswan's private IP).

## 問題-4 (SSH 左<==>右)
<strong>現象</strong>: 左側クライアントと右側クライアントの間に、双方向でPINGできますけど、相互にSSH経由で接続することはできません (エラーメッセージは次のように："`connect to host <IP Address> port 22: No route to host`")。 なお、`左側のクライアント<=>Libreswan`と`Libreswan<=>右側のクライアント`の接続は、両方共にOKです。
<strong>可能な原因</strong>: Libreswanインスタンスには、<font color=blue>ファイアウォール・サービス</font>が起動中のため、IPパケット転送が遮断されます。(解決方法は、[STEP 5-1](#5-1-左から右へ)をご参照ください。)
 
## 問題-5 (SSH 成功, PING 失敗)
<strong>現象</strong>: 左右双方向でSSHの接続ができますが、お互いにPINGができません。
<strong>原因と対策</strong>: PINGは、`TCP`ではなく`ICMP`プロトコルを使用します。 デフォルトでは、許可されていません。 上記の事前準備([STEP-1](#1-事前準備)) では、一部のセキュリティ・ルールに対し「<font color=blue>全て</font>のプロトコル」を使用します。「全てのプロトコル」を使用したくない場合は、SSHとPINGを通るため、個別に`TCP/ICMP`を追加してください。

__サマリ__
このシミュレーションは、2つのOCIリージョン間の接続を例にしています。この方法は、On-P (または他のクラウド・ベンダー)とOCI間の接続にも適用できます。その場合、Libreswanと接続元のクライアントは、On-Pか他クラウドにおいていただければよいです。

以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[OCI シングル・テナンシで複数エンドユーザー共同利用のSaaSモデル -- ネットワーク設計編](https://qiita.com/liu-wei/items/1bb4aa2c4885e50b12e0)


__OCI ドキュメント__
[Libreswan](https://docs.oracle.com/ja-jp/iaas/Content/Network/Reference/libreswanCPE.htm#Libreswan)
[Libreswanを使用したその他のクラウドへのアクセス](https://docs.oracle.com/ja-jp/iaas/Content/Network/Concepts/libreswan.htm)