Private Space VPN 接続
最終更新日 2022年06月27日(月)
Table of Contents
Heroku Private Spaces および Heroku Shield Spaces では、IPSec VPN を使用して別のプライベートネットワークへの接続を設定できます。これにより、dyno はプライベートネットワーク上のホストに接続でき、その逆も可能になります。接続はパブリックインターネット経由で確立されますが、すべてのトラフィックが IPSec を使用して暗号化されます。
現在、Private Space あたり 1 つの VPN 接続 (2 つの冗長なトンネルを含む) のみがサポートされています。
制約
Private Space VPN 接続を使用するには、プライベートネットワークと VPN ハードウェアまたはソフトウェアが次の制約に従う必要があります。
- ルーティング可能な IP CIDR は、プライベートインターネットに割り当てられている RFC 1918 ブロックのいずれかである必要があります。
- Private Space によってすでに使用されている IP CIDR は使用できません。現在、Private Spaces はデフォルトで
10.0.0.0/16
と172.17.0.0/16
を使用しますが、領域が作成されるときに別のブロックを指定できます。10.1.0.0/16
はまた、ユーザーの領域に Heroku データサービスが追加されている場合にも予約されます。 - ルートは静的に設定する必要があります。Heroku は BGP をサポートしていません。
- VPN ゲートウェイは、静的パブリック IP アドレス経由でパブリックインターネットから到達できる必要があります。
- VPN ゲートウェイの前にファイアウォールがある場合は、Private Space VPN ゲートウェイ IP アドレスからのトラフィックのために UDP
4500
と UDP500
を開く必要があります。 - VPN ゲートウェイでは、仮共有キー (PSK) の認証方法で IKE v1 または v2 を使用する必要があります。
- Heroku は仮共有キーを提供します。このキーを VPN ゲートウェイで設定できる必要があります。Heroku は、別の当事者が生成した仮共有キーを受け付けることができません。
- Heroku によって提供される両方の IPSec トンネルを使用するように VPN ゲートウェイを設定する必要があります。Heroku は、短いメンテナンスウィンドウのために 1 つのトンネルを停止し、2 番目のトンネルを使用して中断のないネットワーク接続を確保する場合があります。
- VPN ゲートウェイは、接続のイニシエーターです。接続は、Private Space VPN ゲートウェイへのパケットの送信を開始するまで確立されません。
- VPN 接続経由ではデータベースサービス (Heroku PostgreSQL など) にアクセスできません。信頼済み IP の許可リストを使用すると、データサービスに直接アクセスできます。
VPN 接続の設定
VPN ゲートウェイのパブリック IP アドレスと、プライベートネットワークの目的のルーティング可能な IP CIDR ブロックがわかっている必要があります。これらの情報を取得したら、次のコマンドを使用して Private Space の VPN ゲートウェイを設定します。
$ heroku spaces:vpn:connect \
--name office \
--ip PUBLIC_IP_OF_YOUR_VPN_GATEWAY \
--cidrs ROUTABLE_CIDRS_OF_YOUR_PRIVATE_NETWORK \
--space SPACE
ゲートウェイの設定には数分かかります。ゲートウェイの準備ができるまで待機するには、wait
コマンドを使用します。
$ heroku spaces:vpn:wait --space SPACE office
ゲートウェイの準備ができたら、次を使用して設定を取得します。
$ heroku spaces:vpn:info --space SPACE office
これにより、VPN 接続のユーザー側の終端を設定するために必要なすべての詳細を含むテーブルが返されます。応答の例を次に示します。
$ heroku spaces:vpn:info --space acme-space office
=== acme-space VPNs
VPN Tunnel Customer Gateway VPN Gateway Pre-shared Key Routable Subnets IKE Version
────────── ──────────────── ───────────── ────────────── ──────────────── ───────────
Tunnel 1 52.91.173.226 34.203.187.158 abcdef12345 10.0.0.0/16 1
Tunnel 2 52.91.173.226 34.227.70.143 123456abcdef 10.0.0.0/16 1
VPN ゲートウェイを設定する方法は、ソフトウェアまたはハードウェアによって異なります。ただし、spaces:vpn:info
コマンドによって返されるテーブルには必要なすべての情報が含まれています。さらに情報が必要な場合、このコマンドには --json
オプションもあります。
後のこのセクションには、これらのパラメータを使用して StrongSwan ソフトウェアの VPN ゲートウェイを設定する方法が示されています。また、Google Cloud Platform に接続するための設定の例も使用できます。
IKE 仮共有キーの変更
VPN トンネルの資格情報が改ざんされていると思われる場合や、その他の理由で資格情報を変更したい場合は、VPN 接続を破棄してから作成し直す必要があります。
$ heroku spaces:vpn:destroy --space SPACE office
VPN 接続を作成し直すには、上記の手順に従います。これにより、新しい PSK と、可能性として新しいゲートウェイ IP アドレスが生成されます。新しい PSK が作成され、IP アドレスが更新されたら、接続のもう一方の終端で VPN 設定を更新して接続を再確立します。
互換性
Heroku VPN は、マネージド AWS VPN 製品に基づいています。VPN ゲートウェイデバイスの互換性についての詳細は、AWS のドキュメントを確認してください。また、AWS ゲートウェイデバイスの要件を具体的に確認してください。
Heroku は、この VPN 機能が、マネージド Google Cloud Platform VPN 機能と互換性があることを検証しました。詳細は、GCP への VPN 接続に関する Dev Center の記事を参照してください。
Heroku と Azure の間でサイト間 VPN 接続をセットアップするには、コミュニティによってメンテナンスされているこのガイドを参照してください。
StrongSwan の設定例
VPN ゲートウェイの 1 つの例として、ほとんどの Linux ディストリビューションで動作する StrongSwan オープンソース VPN ゲートウェイがあります。上記の Heroku VPN 設定から何を入力するかを示すインジケータが含まれている設定ファイルの例を次に示します。
/etc/ipsec.conf
config setup
strictcrlpolicy=no
uniqueids = no
charondebug=all
conn vpn1
type=tunnel
compress=no
keyexchange=ikev1
esp=aes256-sha2-modp2048!
ike=aes256-sha2-modp2048!
ikelifetime=28800s
lifetime=1h
authby=secret
auto=route
left=<private ip of your VPN host, e.g. 172.16.0.2>
leftid=<private ip of your host, e.g. 172.16.0.2>
leftsubnet=<your routable network, e.g. 172.16.0.0/16>
right=<IP address of Private Space tunnel #1>
rightid=<IP address of Private Space tunnel #1>
rightsubnet=<cidr of private space ("Routable Subnets" from config)>
dpddelay=10
dpdtimeout=30
dpdaction=restart
keyingtries=%forever
conn vpn2
type=tunnel
compress=no
keyexchange=ikev1
esp=aes256-sha2-modp2048!
ike=aes256-sha2-modp2048!
ikelifetime=28800s
lifetime=1h
authby=secret
auto=route
left=<private ip of your host, e.g. 172.16.0.2>
leftid=<private ip of your host, e.g. 172.16.0.2>
leftsubnet=<your routable network, e.g. 172.16.0.0/16>
right=<IP address of Private Space tunnel #2>
rightid=<IP address of Private Space tunnel #2>
rightsubnet=<cidr of private space ("Routable Subnets" from config)>
dpddelay=10
dpdtimeout=30
dpdaction=restart
keyingtries=%forever
/etc/ipsec.secrets
<IP address of Private Space tunnel #1> : <pre-shared key for Private Space tunnel #1>
<IP address of Private Space tunnel #2> : <pre-shared key for Private Space tunnel #2>
次のサンプル値があるとします。
- VPN ゲートウェイの設定は上記の JSON ドキュメントから
- ネットワークは
172.16.0.0/16
- VPN ゲートウェイのプライベート IP は
172.16.0.2
- Heroku Space ネットワークは
10.0.0.0/16
設定ファイルは次のようになります。
/etc/ipsec.conf
config setup
strictcrlpolicy=no
uniqueids = no
charondebug=all
conn vpn1
type=tunnel
compress=no
keyexchange=ikev1
esp=aes256-sha2-modp2048!
ike=aes256-sha2-modp2048!
ikelifetime=28800s
lifetime=1h
authby=secret
auto=route
left=172.16.0.2
leftid=172.16.0.2
leftsubnet=172.16.0.0/16
right=34.203.187.158
rightid=34.203.187.158
rightsubnet=10.0.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart
keyingtries=%forever
conn vpn2
type=tunnel
compress=no
keyexchange=ikev1
esp=aes256-sha2-modp2048!
ike=aes256-sha2-modp2048!
ikelifetime=28800s
lifetime=1h
authby=secret
auto=route
left=172.16.0.2
leftid=172.16.0.2
leftsubnet=172.16.0.0/16
right=34.227.70.143
rightid=34.227.70.143
rightsubnet=10.0.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart
keyingtries=%forever
/etc/ipsec.secrets
34.203.187.158 : PSK "abcdef12345"
34.227.70.143 : PSK "123456abcdef"