2026年7月11日
2026年7月11日
ConoHa と AWS Transit Gateway をつなぐ方法|ConoHa VPS を VPN ルーターにした Site-to-Site VPN 構成
ConoHa のサーバー群と AWS の複数 VPC をプライベートアドレスで通信させたい場合、現実的な方法は「ConoHa 上の VPS を IPsec VPN ルーターにして、AWS Site-to-Site VPN で Transit Gateway に接続する」構成です。この記事では、その構成の考え方、AWS 側と ConoHa 側の設定手順、つまずきやすい点と確認方法を説明します。読み終えるころには、検証環境で ConoHa から VPC 内のサーバーへ ping が通るところまで組めるようになることを目指します。
構成の全体像と前提
ConoHa には、同じリージョン内の VPS 同士をつなぐローカルネットワーク(プライベートネットワーク)の機能がありますが、AWS の Direct Connect のように AWS へ直接つなぐ接続サービスは、公式情報を見る限り提供されていません(2026年10月現在)。サービス内容は変わることがあるので、作業前に ConoHa の公式サイトで最新の機能を確認してください。
そのため、ここでは次の構成を前提にします。
- ConoHa 側:VPN ルーター役の VPS を 1 台用意し、グローバル IP とローカルネットワークの両方に接続する。他の VPS はローカルネットワーク経由でこの VPS を経由して AWS へ向かう。
- AWS 側:Transit Gateway(TGW)に Site-to-Site VPN のアタッチメントを作り、ConoHa の VPS をカスタマーゲートウェイとして登録する。各 VPC は VPC アタッチメントで TGW につながる。
VPC が一つだけなら、TGW を使わず仮想プライベートゲートウェイ(VGW)に VPN をつなぐほうが構成は簡単です。TGW を選ぶ理由は、複数の VPC やアカウントをまとめて ConoHa とつなぎたい、将来的に拠点が増える、といった場合です。TGW はアタッチメントやデータ処理量に応じて料金がかかるため、料金体系は AWS の公式ページで確認してください。
アドレス設計を最初に決める
いちばん後戻りが難しいのがアドレス設計です。ConoHa のローカルネットワークと、TGW につながるすべての VPC の CIDR が重複していると、経路を正しく引けません。例として、この記事では次のように置きます。
- ConoHa ローカルネットワーク:172.16.0.0/24(VPN ルーターの VPS は 172.16.0.10)
- AWS 側の VPC 群:10.0.0.0/16 と 10.1.0.0/16(まとめて 10.0.0.0/8 の範囲に置く)
- ConoHa VPN ルーターのグローバル IP:203.0.113.10(例示用のアドレス)
AWS 側を 10.0.0.0/8 のような大きな範囲にまとめておくと、ConoHa 側の経路やトンネルのトラフィックセレクターを一つで済ませられ、設定が簡潔になります。
AWS 側の設定
カスタマーゲートウェイと VPN 接続を作る
AWS マネジメントコンソールでも作れますが、ここでは AWS CLI の例で流れを示します。ID は自分の環境の値に置き換えてください。
# ConoHa の VPN ルーターをカスタマーゲートウェイとして登録
aws ec2 create-customer-gateway \
--type ipsec.1 \
--public-ip 203.0.113.10 \
--bgp-asn 65000
# TGW に VPN 接続を作成(ここでは静的ルーティング)
aws ec2 create-vpn-connection \
--type ipsec.1 \
--customer-gateway-id cgw-0123456789abcdef0 \
--transit-gateway-id tgw-0123456789abcdef0 \
--options StaticRoutesOnly=true
VPN 接続を作ると、AWS 側にトンネルが 2 本用意され、それぞれの接続先 IP と事前共有鍵が発行されます。コンソールから接続設定ファイルをダウンロードでき、主な機器向けの設定例も選べるので、パラメーター(暗号方式、IKE のバージョン、DPD など)はそのファイルに合わせるのが手戻りの少ない進め方です。
TGW のルートテーブルと VPC のルートテーブル
静的ルーティングの VPN では、TGW のルートテーブルに ConoHa 側の CIDR を VPN アタッチメント宛てとして登録します。
aws ec2 create-transit-gateway-route \
--transit-gateway-route-table-id tgw-rtb-0123456789abcdef0 \
--destination-cidr-block 172.16.0.0/24 \
--transit-gateway-attachment-id tgw-attach-0123456789abcdef0
# 登録内容の確認
aws ec2 search-transit-gateway-routes \
--transit-gateway-route-table-id tgw-rtb-0123456789abcdef0 \
--filters Name=type,Values=static,propagated
見落としやすいのが VPC 側です。各 VPC のサブネットのルートテーブルに「172.16.0.0/24 の宛先は TGW」というルートを追加しないと、行きは届いても戻りの通信が TGW に戻ってきません。さらに、VPC 内のインスタンスのセキュリティグループで、172.16.0.0/24 からの通信を必要な範囲で許可します。
ConoHa 側の設定
VPN ルーターの VPS を準備する
VPN ルーター役の VPS では、ConoHa のセキュリティグループ(パケットフィルター)で、AWS のトンネル接続先 IP からの UDP 500・UDP 4500 と ESP(IP プロトコル 50)を許可します。SSH など管理用のポートは、接続元を自分の作業環境に絞ってください。
パケットを転送するため、IP フォワーディングを有効にします。
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-ipforward.conf
sudo sysctl --system
strongSwan でトンネルを張る
Ubuntu などでは strongSwan の swanctl 形式で設定できます。以下はトンネル 1 本の例です。暗号方式などの値は、AWS からダウンロードした設定ファイルの内容に合わせてください。鍵は例のダミー値ではなく、AWS が発行した値を使い、設定ファイルの権限を root のみに絞ります。
# /etc/swanctl/conf.d/aws.conf
connections {
aws-tunnel1 {
version = 2
local_addrs = 203.0.113.10
remote_addrs = 198.51.100.1
proposals = aes256-sha256-modp2048
dpd_delay = 10s
local {
auth = psk
id = 203.0.113.10
}
remote {
auth = psk
id = 198.51.100.1
}
children {
aws-net {
local_ts = 172.16.0.0/24
remote_ts = 10.0.0.0/8
esp_proposals = aes256-sha256-modp2048
start_action = start
dpd_action = restart
}
}
}
}
secrets {
ike-aws1 {
id = 198.51.100.1
secret = "your-pre-shared-key"
}
}
sudo swanctl --load-all
sudo swanctl --list-sas
AWS のポリシーベースの VPN は、トンネルあたり一組のトラフィックセレクターを前提にしているため、local_ts と remote_ts をそれぞれ一つの範囲にまとめておくと安定します。
冗長化をどう考えるか
AWS 側のトンネルは 2 本あり、AWS 側のメンテナンスで片方が落ちることがあります。静的ルーティングでポリシーベースのまま 2 本を同時に使うと、どちらのトンネルを使うかの制御が難しくなります。本番で使う場合は、ルートベース(XFRM インターフェースや VTI)でトンネルを 2 本張り、FRRouting で BGP を話して経路を交換する構成を検討してください。その場合、VPN 接続は StaticRoutesOnly を指定せずに作成し、TGW ルートテーブルには VPN アタッチメントからの経路伝播を使います。VPN ルーターの VPS 自体も単一障害点なので、重要度に応じて 2 台構成を検討します。
ConoHa の他の VPS から AWS へ向ける
ローカルネットワーク上の他の VPS には、AWS 宛ての経路を VPN ルーター経由に設定します。
sudo ip route add 10.0.0.0/8 via 172.16.0.10
この設定は再起動で消えるため、netplan などで永続化します。注意点として、クラウドのローカルネットワークでは、なりすまし防止のために「そのサーバーに割り当てられていない送信元 IP」のパケットが破棄される場合があります。転送したパケットが途中で消えるときは、ConoHa の仕様を確認し、必要なら VPN ルーターで送信元 NAT(SNAT)をかけて回避します。
疎通確認とつまずきやすい点
確認は内側から外側へ順に行います。
sudo swanctl --list-sasで IKE と CHILD SA が確立しているか。- AWS 側でトンネルの状態を確認する。CLI なら
aws ec2 describe-vpn-connections --vpn-connection-ids vpn-0123456789abcdef0 --query 'VpnConnections[0].VgwTelemetry'で各トンネルの状態が見られます。 - VPN ルーターから VPC 内インスタンスのプライベート IP へ ping。
- ConoHa の別 VPS から同じ宛先へ ping と traceroute。
ping は通るのに Web や SSH の大きな応答が途中で止まる場合は、IPsec のオーバーヘッドによる MTU の問題が疑われます。VPN ルーターで TCP MSS を小さく書き換える(MSS クランプ)のが一般的な対処で、推奨値は AWS の Site-to-Site VPN のドキュメントに記載があるので確認してください。トンネルは張れるのに通信が流れない場合は、TGW のルートテーブルの関連付け(どの VPC アタッチメントがどのルートテーブルを使うか)と、VPC 側の戻りの経路を見直します。
作業は検証用の VPC と VPS で手順を確かめてから本番に適用し、既存のルートテーブルを変更する前には現在の設定を控えておいてください。
まとめ
- ConoHa から AWS へは、VPS を VPN ルーターにして Site-to-Site VPN で TGW に接続するのが現実的な構成。
- 最初に CIDR の重複がないアドレス設計を決め、AWS 側はまとめた範囲にしておくと設定が簡潔になる。
- TGW のルートテーブルだけでなく、各 VPC のルートテーブルとセキュリティグループに戻りの設定を入れる。
- 本番ではトンネル 2 本と BGP による冗長化、VPN ルーターの単一障害点対策を検討する。
- 大きな通信だけ止まるなら MTU・MSS を疑い、送信元 IP の制限があれば SNAT で回避する。