🔐

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/ 配下に接続設定ファイルを作成します。

/etc/ipsec.d/office-vpn.conf
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(事前共有鍵)の設定

/etc/ipsec.d/office-vpn.secrets
<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 を構築しました。

ハマりポイント

  1. rightid には RTX の LAN IP を指定(WAN IP ではない)
  2. IKEv1 を使用ikev2=no
  3. secrets ファイルの ID は設定と一致させる
  4. SNMP は snmpv2c host を使用snmp host は v1 専用)

参考リンク


Discussion