AWS EC2からRTX1220 に IPsecした
はじめに
Amazon Linux 2023 上の Libreswan と RTX1220 間で IPsec VPN を構築した時の備忘録です。
対象者
- AWS と オンプレミス拠点を VPN で接続したい方
環境
| 項目 | クラウド側 | オンプレミス側 |
|---|---|---|
| 機器 | AWS EC2 (Amazon Linux 2023) | ヤマハ RTX1220 |
| ソフトウェア | Libreswan 4.12 | RTX1220 Rev.15.04.07 |
| グローバル IP | Elastic IP | 固定 IP |
| ローカル IP | 192.168.0.20 | 172.16.17.254 |
| ローカル サブネット | 192.168.0.0/24 | 172.16.17.0/24 |
IPsec VPN の基礎知識
本題に入る前に、IPsec の基本を押さえておきましょう。
IPsec とは
IPsec(Internet Protocol Security) は、IP 通信を暗号化・認証するためのプロトコル群です。主に以下の2つのフェーズで接続を確立します。
主要な用語
| 用語 | 説明 |
|---|---|
| IKE | 暗号鍵を安全に交換するプロトコル。v1 と v2 がある |
| Phase 1 | 両端が互いを認証し、安全な通信路を確立 |
| Phase 2 | 実際のデータ通信用の暗号化パラメータを交渉 |
| PSK | Pre-Shared Key。事前に共有した秘密の文字列で認証 |
| DPD | Dead Peer Detection。相手の生存確認機能 |
今回の構成図
Libreswan のセットアップ
インストール
Amazon Linux 2023 では dnf でインストールできます。
# インストール
sudo dnf install -y libreswan
# バージョン確認
sudo ipsec --version
# Libreswan 4.12
# サービス有効化
sudo systemctl enable ipsec
sudo systemctl start ipsec
カーネルパラメータの設定
IPsec が正しく動作するために、IP フォワーディングを有効にします。
cat << 'EOF' | sudo tee -a /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.accept_redirects = 0
net.ipv4.conf.default.send_redirects = 0
EOF
sudo sysctl -p
VPN 接続設定
接続設定ファイル
/etc/ipsec.d/ 配下に接続設定ファイルを作成します。
conn office-vpn
# === 認証設定 ===
authby=secret # PSK 認証
auto=start # 起動時に自動接続
type=tunnel # トンネルモード
ikev2=no # IKEv1 を使用(RTX との互換性)
# === ローカル側(EC2)===
left=%defaultroute # デフォルトルートのIPを自動取得(※後述)
leftid=<EC2のEIP> # 自分の識別子
leftsubnet=192.168.0.0/24
# === リモート側(RTX1220)===
right=<RTXのWAN IP> # 接続先
rightid=<RTXのLAN IP> # ★重要:LAN側IPを指定
rightsubnet=172.16.17.0/24
# === 暗号化アルゴリズム ===
ike=aes128-sha1;modp2048
phase2alg=aes128-sha1
# === 有効期間 ===
ikelifetime=8h
salifetime=1h
# === DPD(死活監視)===
dpddelay=30
dpdtimeout=120
dpdaction=restart
設定のポイント
left=%defaultroute とは?
%defaultroute を指定すると、EC2 インスタンスのデフォルトルート(インターネットゲートウェイ)に関連付けられた IP アドレスを自動的に使用します。
EC2 に Elastic IP を割り当てている場合、この EIP が left の値として使われます。IP アドレスを直接書く代わりにこの指定を使うことで、EIP が変わっても設定ファイルを修正する必要がなくなります。
PSK(事前共有鍵)の設定
<EC2のEIP> <RTXのLAN IP> : PSK "YourSecretKey123"
パーミッションを制限します。
sudo chmod 600 /etc/ipsec.d/office-vpn.secrets
RTX1220 側の設定
RTX1220 のコンソールで以下を設定します。
# トンネル設定
tunnel select 1
ipsec tunnel 1
ipsec sa policy 1 1 esp aes-cbc sha-hmac
ipsec ike always-on 1 on
ipsec ike duration ipsec-sa 1 3600
ipsec ike duration isakmp-sa 1 28800
ipsec ike encryption 1 aes-cbc
ipsec ike group 1 modp2048
ipsec ike hash 1 sha
ipsec ike keepalive use 1 on dpd 30 3
ipsec ike local address 1 172.16.17.254
ipsec ike pre-shared-key 1 text YourSecretKey123
ipsec ike remote address 1 <EC2のEIP>
ip tunnel address 172.16.17.254/24
ip tunnel remote address 192.168.0.0/24
tunnel enable 1
SNMP を許可する場合
VPN 経由で SNMP 監視を行う場合は、以下も設定します。
(snmpv2c host anyはトラブル時のチェック項目を減らすために今回はあえてany)
snmpv2c host any
snmpv2c community read-only public
接続確認
VPN の状態確認
# 接続状態を確認
sudo ipsec status
# 期待される出力
# 000 "office-vpn": STATE_QUICK_I2 (IPsec SA established)
STATE_QUICK_I2 または STATE_QUICK_R2 が表示されれば接続成功です。
疎通確認
# RTX の LAN IP に ping
ping 172.16.17.254
# SNMP 確認(監視目的の場合)
snmpwalk -v2c -c public 172.16.17.254 system
トラブルシューティング
ログの確認方法
# リアルタイムでログを監視
sudo journalctl -u ipsec -f
よくあるエラーと対処法
1. "no proposal chosen"
原因: 暗号化アルゴリズムが一致しない
# 解決策:RTX がサポートするアルゴリズムに合わせる
ike=aes128-sha1;modp2048
phase2alg=aes128-sha1
2. "Peer ID mismatch"
原因: rightid が実際の ID と異なる
# ログで相手の ID を確認
sudo journalctl -u ipsec | grep "ID_"
# RTX は LAN IP を ID として使うので
rightid=172.16.17.254 # WAN IP ではなく LAN IP
3. "no connection has been authorized"
原因: secrets ファイルの ID が設定と一致しない
# secrets の形式を確認
# 左側: leftid の値、右側: rightid の値
<EC2のEIP> <RTXのLAN IP> : PSK "..."
4. 接続が頻繁に切れる
原因: DPD が未設定、または AWS セキュリティグループの問題
# DPD を有効化
dpddelay=30
dpdtimeout=120
dpdaction=restart
AWS セキュリティグループで UDP 500, 4500 を許可しているか確認してください。
接続の強制再確立
sudo ipsec auto --down office-vpn
sudo ipsec auto --up office-vpn
# または完全に再起動
sudo systemctl restart ipsec
AWS 側の注意点
セキュリティグループ
以下のインバウンドルールが必要です。
| プロトコル | ポート | ソース |
|---|---|---|
| UDP | 500 | RTX の WAN IP |
| UDP | 4500 | RTX の WAN IP |
EC2 再起動後の動作
-
systemctl enable ipsecで自動起動が有効なら、再起動後も VPN は自動接続されます -
auto=start設定により、ipsec サービス起動時に接続を開始します
まとめ
AWS EC2 (Libreswan) と ヤマハ RTX1220 間で IPsec VPN を構築しました。
ハマりポイント
-
rightidには RTX の LAN IP を指定(WAN IP ではない) -
IKEv1 を使用(
ikev2=no) - secrets ファイルの ID は設定と一致させる
-
SNMP は
snmpv2c hostを使用(snmp hostは v1 専用)
Discussion