さくらのクラウド VPNルータ入門 7. サイト間VPN接続でネットワーク同士を接続しよう

さくらのクラウドの「VPNルータ」について、ここまでVPN(仮想プライベートネットワーク)を構成するさまざまな機能を紹介し、単体のクライアントPCから2種類のプロトコル(L2TP/IPSecおよびWireGuard)で実際にVPN接続する方法を解説しました。
今回は「VPNルータ」の締めくくりとして「サイト間VPN接続」を説明します。
- サイト間VPN接続とは
- AWS上のVPNルーターと接続してみよう
- 1.さくらのクラウド側で「サイト間VPN」を設定する
- サイト間VPN接続の設定を変更する
- サイト間VPN接続の設定値を入力する
- サイト間VPN接続を追加して反映する
- 2. EC2側でlibreswanを設定する
- 通信を中継するための注意点
- Libreswanの設定ファイル「ipsec.conf」を編集する
- 共有鍵を指定する
- VPNを起動する
- 接続できているかをテストしてみよう
- うまく接続できないとき(トラブルシューティング)
- 参考リンク
サイト間VPN接続とは
サイト間VPN接続では、さくらのクラウド上に作成した「VPNルータ」を、他のネットワークに設置されたVPN機器と接続します。これまでに説明したVPNが単体のクライアントPCからの接続だったのに対して、今回はネットワーク同士をVPN接続する点が異なります。
さくらのクラウドの「VPNルータ」が対応している「サイト間VPN接続」の仕様は、マニュアルの次のページに記載されています。
👉 サイト間VPN設定 > サイト間VPN機能の概要 > VPNルータの仕様
相手が汎用のIPsecに対応している機器であれば、このページに記載された通信方式に合わせさえすれば、サイト間VPN接続は動作します。さらに、以下に掲載するような一部の主要ルーターについては「動作検証済アプライアンス」としてリストアップされています。
- ヤマハ RTXシリーズ
- Juniper NetScreen/SSGシリーズ
- Vyatta / VyOS
- Cisco ISRシリーズ
- Fortinet FortiGateシリーズ
- アライドテレシス ARシリーズ
AWS上のVPNルーターと接続してみよう
機能検証のためだけに個別のVPNルーターを準備するのはたいへんです。そこで本記事ではAWSを利用し、Amazon EC2上にVPNルーターを構築して「さくらのクラウド」の「VPNルータ」と接続してみます。
具体的にはEC2上にAmazon Linux 2023を起動して、オープンソースのVPN実装ソフトウェア「libreswan」を用いて仮想VPNルーターを構築します。環境を簡単にまとめると次のような構成になります。
さくらのクラウド
VPNルータ
グローバル: 133.125.238.37
プライベート: インターフェース1: 192.168.0.0/24
│ 仮想サーバー: 192.168.0.206
│
IPsec (IKEv1 / PSK)
│
AWS │
Amazon EC2 (Amazon Linux 2023)
Public IP: 18.179.202.175
VPC: 172.31.0.0/16
さくらのクラウド(VPNルータ)側もAWS(Amazon Linux)側も、固定のグローバルIPアドレスを用意しています。グローバルであれば固定アドレスでなくても接続できますが、IPアドレスが変わると設定が変わってしまうので固定のIPアドレスを用意するほうがよいでしょう。
なお、EC2側のグローバルIPアドレス(ここでは18.179.202.175)や、さくらのクラウド側のグローバルIPアドレス(ここでは133.125.238.37)のほか、プライベートネットワークのCIDRなど、この記事で扱うネットワーク設定値は、それぞれ読者の実環境にあわせて書き換えてください。
1.さくらのクラウド側で「サイト間VPN」を設定する
それではサイト間VPN接続を設定していきましょう。さくらのクラウドのコントロールパネルで、まず「VPNルータ」の詳細画面から「サイト間VPN」タブをクリックします。
ここで新しいVPN接続を追加しますが、その前に設定を変更する必要があります。
サイト間VPN接続の設定を変更する
サイト間VPN接続一覧の下部にある「サイト間VPN設定」について、右下の「編集」をクリックして「編集:サイト間VPN設定」画面を開きます。
一番下の「DHグループ」を、デフォルトの「modp1024」から「modp2048」に変更します。
これは検証で使用する「libreswan」がデフォルト値に対応していないためです。それ以外はデフォルト値のままで問題ありません。設定値は以下のようになります。
| 設定項目 | 設定値 |
|---|---|
| ISAKMP SAの寿命 | 28800 |
| IKEキープアライブ(DPD) インターバル | 15 |
| IKEキープアライブ(DPD) タイムアウト | 30 |
| IPSEC SAの寿命 | 1800 |
| 暗号アルゴリズム | AES128 |
| ハッシュアルゴリズム | SHA1 |
| DHグループ | modp2048 |
サイト間VPN接続の設定値を入力する
サイト間VPN接続の設定が変更できたら、一覧の右下にある「追加」ボタンをクリックして、次の「追加:サイト間VPN設定」画面を開きます。
上記の図には今回の例示の値が入力されていますが、本来それぞれの設定項目には次のような値を入力します。
| 項目 | 設定値 |
|---|---|
| 対向IPアドレス | 接続する相手側のVPNルーターに設定されたグローバルIPアドレス |
| 対向ID | 上記と同様に相手側のグローバルIPアドレス |
| Pre Shared Secret | 認証に使用する任意の共有鍵(PSK) |
| 対向Prefix | 相手側VPNルーターの先にあるプライベートネットワークのCIDR |
| ローカルPrefix | さくらのクラウド側のプライベートネットワークのCIDR |
このうち「対向ID」には「対向IPアドレス」と同じ値を入力しますが、これは相手側でもIDとして設定します。また「Pre Shared Secret」に設定した共有鍵についても、相手側で同じ値を設定します。
プライベートネットワークでは「対向Prefix」と「ローカルPrefix」ともに複数のCIDRを指定できます。値を入力し、候補を表示させて確定するインターフェースになっています。
なお、共有鍵は、VPNのメーカーやサービスによって文字数や文字種の条件が異なります。双方の条件を満たす最も長く複雑なランダム文字列を生成することをおすすめします。例えば、AWSでは64文字までですが、さくらのクラウドは上記の「VPNルータの仕様」にあるように40文字までです。文字種も英数字と下線のみとなります。
サイト間VPN接続を追加して反映する
値が入力できたら、右下の「追加」をクリックして接続を一覧へ追加します。
サイト間VPN接続が追加できたら、上部の「反映」をクリックします。
このとき、ステータスがいったん「DOWN」になります。次節で説明するEC2側のlibreswanが設定できれば、ポーリングにより設定は自動で「UP」となります。
2. EC2側でlibreswanを設定する
続いて、さくらのクラウドの「VPNルータ」と接続するVPNルーターをAWS上に構築します。Amazon EC2でAmazon Linuxのホストを立ち上げる手順はここでは説明しませんので、AWSのドキュメントなどを参照してください。
Amazon Linux 2023を導入したホストで以下のコマンドを実行し、まずlibreswanをインストールします。
$ sudo dnf update -y
$ sudo dnf install -y libreswan
次に、IPフォワーディングを有効化します。
$ sudo sysctl -w net.ipv4.ip_forward=1
通信を中継するための注意点
Amazon EC2では、インスタンスがトラフィックのソースか宛先である必要があります。しかし、VPNルーターは通信を中継するため、トラフィックのソースでも宛先でもありません。このとき、送信元/送信先チェックを無効にする必要があります。
インスタンスを選択して、メニューから「アクション」「ネットワーキング」「ソース/宛先チェックを変更」の順に選択します。

「送信元/送信先チェックを変更」画面で「送信元/送信先チェック中」の「停止」にチェックを入れ、右下の「保存」を押してください。
Libreswanの設定ファイル「ipsec.conf」を編集する
先ほどインストールしたAmazon Linux上のLibreswanを設定していきます。設定ファイルの「/etc/ipsec.conf」を次のように作成します。
$ sudo tee /etc/ipsec.conf >/dev/null <<'EOF'
config setup
uniqueids=yes
conn sakura
type=tunnel
authby=secret
ikev2=never
left=%defaultroute
leftid=18.179.202.175
leftsubnet=172.31.0.0/16
right=133.125.238.37
rightid=133.125.238.37
rightsubnet=192.168.0.0/24
ike=aes128-sha1;modp2048
phase2alg=aes128-sha1
pfs=yes
ikelifetime=28800s
salifetime=1800s
dpddelay=15
dpdtimeout=30
dpdaction=restart
auto=start
include /etc/ipsec.d/*.conf
EOF
共有鍵を指定する
さらにIPsecの認証に使用する共有鍵を、次の手順で「ipsec.secrets」ファイルに格納します。
$ sudo tee /etc/ipsec.secrets >/dev/null <<'EOF'
18.179.202.175 133.125.238.37 : PSK "yourStrongPasswordHere"
EOF
先ほどさくらのクラウドの「VPNルータ」の「Pre Shared Secret」欄に入力した共有鍵(PSK)と同じ値を、上記の「yourStrongPasswordHere」の箇所で指定します。
VPNを起動する
ここまででAmazon EC2側の設定は完了しています。VPNを起動してみます。
$ sudo /usr/libexec/ipsec/addconn --config /etc/ipsec.conf --checkconfig
$ sudo systemctl restart ipsec
$ sudo ipsec auto --add sakura
$ sudo ipsec auto --up sakura
次のコマンドで起動を確認します。
$ sudo ipsec status
000 using kernel interface: xfrm
000
000 interface lo UDP [::1]:4500
000 interface lo UDP [::1]:500
000 interface lo UDP 127.0.0.1:4500
000 interface lo UDP 127.0.0.1:500
000 interface ens5 UDP 172.31.40.88:4500
000 interface ens5 UDP 172.31.40.88:500
000
000 fips mode=disabled;
000 SElinux=disabled
000 seccomp=disabled
000
000 config setup options:
000
(省略)
000
000
000 Total IPsec connections: loaded 1, active 1
000
000 State Information: DDoS cookies not required, Accepting new IKE connections
000 IKE SAs: total(1), half-open(0), open(0), authenticated(1), anonymous(0)
000 IPsec SAs: total(5), authenticated(5), anonymous(0)
000
000 #4: "sakura":4500 STATE_MAIN_R3 (IKE SA established); REPLACE in 26663s; newest; lastdpd=2s(seq in:25090 out:0); idle;
000 #7: "sakura":4500 STATE_QUICK_R2 (IPsec SA established); EXPIRE in 3s; ISAKMP SA #4; idle;
000 #7: "sakura" esp.ce3d9831@133.125.238.37 esp.cbca4d1d@172.31.40.88 tun.0@133.125.238.37 tun.0@172.31.40.88 Traffic: ESPin=0B ESPout=0B ESPmax=2^63B
000 #8: "sakura":4500 STATE_QUICK_R2 (IPsec SA established); EXPIRE in 3s; ISAKMP SA #4; idle;
000 #8: "sakura" esp.c6cf59ec@133.125.238.37 esp.366a3357@172.31.40.88 tun.0@133.125.238.37 tun.0@172.31.40.88 Traffic: ESPin=336B ESPout=336B ESPmax=2^63B
000 #9: "sakura":4500 STATE_QUICK_R2 (IPsec SA established); REPLACE in 437s; ISAKMP SA #4; idle;
000 #9: "sakura" esp.c6ac99ca@133.125.238.37 esp.fce03436@172.31.40.88 tun.0@133.125.238.37 tun.0@172.31.40.88 Traffic: ESPin=0B ESPout=0B ESPmax=2^63B
000 #10: "sakura":4500 STATE_QUICK_R2 (IPsec SA established); REPLACE in 675s; ISAKMP SA #4; idle;
000 #10: "sakura" esp.c9af8a37@133.125.238.37 esp.1deb8609@172.31.40.88 tun.0@133.125.238.37 tun.0@172.31.40.88 Traffic: ESPin=168B ESPout=168B ESPmax=2^63B
000 #11: "sakura":4500 STATE_QUICK_R2 (IPsec SA established); REPLACE in 1317s; newest; eroute owner; ISAKMP SA #4; idle;
000 #11: "sakura" esp.cacd8f3a@133.125.238.37 esp.a09bb90@172.31.40.88 tun.0@133.125.238.37 tun.0@172.31.40.88 Traffic: ESPin=0B ESPout=0B ESPmax=2^63B
000
000 Bare Shunt list:
000
このように「Total IPsec connections: loaded 1, active 1」という表示があれば接続成功です。
接続できているかをテストしてみよう
さくらのクラウドとAWSに立ち上げた2つのサイトが、ここまでの作業でVPN接続されているはずです。「VPNルータ」のプライベートな「インターフェース1」上にある仮想サーバーのIPアドレス(ここでは192.168.0.206)に、AWS側からpingが疎通するかを試してみましょう。
$ ping 192.168.0.206
PING 192.168.0.206 (192.168.0.206) 56(84) bytes of data.
64 bytes from 192.168.0.206: icmp_seq=1 ttl=63 time=20.6 ms
64 bytes from 192.168.0.206: icmp_seq=2 ttl=63 time=20.1 ms
64 bytes from 192.168.0.206: icmp_seq=3 ttl=63 time=20.0 ms
64 bytes from 192.168.0.206: icmp_seq=4 ttl=63 time=19.9 ms
^C
--- 192.168.0.206 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 19.942/20.154/20.635/0.281 ms
上記のように表示されれば成功しています。
うまく接続できないとき(トラブルシューティング)
VPNが「UP」にならない場合や、「UP」になっていても通信できない場合は、まず以下を確認してみましょう。
- 接続先のIPアドレスやネットワーク範囲に間違いがないか
- 接続する双方でVPNの設定内容が合っているか
- 通信先まで正しく通信できる設定になっているか
- ログに接続エラーが記録されていないか
設定内容に相違があれば、修正して接続しなおしてみましょう。
参考リンク
本記事では、さくらのクラウドのマニュアルから以下のページを参照しています。
VPNルータの料金については以下サイトをご確認ください。評価・検証で利用した場合、作業終了後に速やかにサービスを削除することでコストを抑えられます。
※プレミアムプラン以上をご利用の場合、上位に「ルータ+スイッチ」が必要となるため「ルータ+スイッチ」の料金も発生します。


