1.EC2(osaka)作成
大阪リージョン側のstrongswanをインストールするEC2を作成します。
1-1.EC2作成
以下でEC2を作成します。
・OS:ubuntu 22.04
・キーペア:(ED25519形式のキーペア)
※ubuntu仕様
・パブリックIPの自動割当て:有効化
※別途EIP紐づけ
1-2.EIP関連付け
恒久的にVPNを利用する際はグローバルアドレスを固定したほうが便利なためEIPをEC2に関連付けします。
1-3.PSK作成
接続で利用するためのPSK用文字列を作成します。
EC2にログインし、以下コマンドを入力して文字列出力します。
なお、S2S-VPNでは2つまでトンネルを作成可能のため、2回実行して2個の文字列を作成します。
# head -c 24 /dev/urandom | base64
# head -c 24 /dev/urandom | base64
2.Site to Site VPN設定
東京リージョン側でSite to Site VPNをセットアップします。
2-1.仮想プライベートゲートウェイの作成
仮想プライベートゲートウェイを作成します。
Site to Site VPN接続先となるVPCへアタッチします。
2-2.ルートテーブル編集
VPN接続先VPNのルートテーブルにて、VPN接続元セグメントに対して仮想プライベートゲートウェイを宛先としたルーティングを設定します。
2-3.Site to Site VPN設定
Site to Site VPN接続を作成します。
設定項目を入力します。
項目 | 設定内容 |
---|---|
名前タグ | (任意) |
ターゲットゲートウェイのタイプ | 選択式:今回は作成済みの仮想プライベートゲートウェイを選択 |
カスタマーゲートウェイ | 選択式:今回は新規で作成 |
IPアドレス | 接続元(strongswan側)のグローバルIPアドレスを入力 |
ARN証明書 | AWS ACMに登録されている証明書を使用する場合に選択(省略可) |
BGP ASN | BGP接続する際に設定(省略可) |
ルーティングオプション | 選択式:今回は静的で設定 |
静的IPプレフィックス | VPCにアドバタイズするIPプレフィックスを入力 |
ローカルIPv4ネットワークCIDR | 接続元(strongswan側)のローカルIPセグメントを入力 |
リモートIPv4ネットワークCIDR | 接続先(S2S-VPN側)のローカルIPセグメントを入力 |
項目 | 設定内容 |
---|---|
トンネルxの内部IPv4 CIDR | トンネル内で使用するIPv4 CIDR(省略可) |
トンネルxの事前共有キー | トンネル内で使用するPSK/今回は事前作成したPSKを入力 |
トンネルxの詳細オプション | 選択式:今回はデフォルトのまま |
トンネルのメンテナンス | AWS側のメンテナンススケジュール制御 |
このタイミングでトンネル2個分のグローバルIPアドレスが作成されます。
2-4.VPNコンフィグダウンロード
サンプルコンフィグがテキストファイルでダウンロードされます。
3.strongswan設定
接続元側EC2のStrongswan等の設定を行います。
以降はroot
権限で操作を実行します。
3-1.NW設定
今回はAWS SecurityGroup側で制御を行うため、ubuntu側はファイアーウォール設定を無効化しておきます。
まずはAWS SecurityGroupでインバウンド通信の許可を設定します。
■SSH(TCP22)
タイプ:SSH
■ipsec(UDP500)
タイプ:カスタムUDP
ポート範囲:500
■ipsec(UDP4500)
タイプ:カスタムUDP
ポート範囲:4500
その後、ubuntuファイアーウォールを停止します。
# ufw disable
3-2.カーネルパラメータ設定
# vi /etc/sysctl.conf
----------------------------
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
# sysctl -p
# sysctl -a
parameter | 設定内容 |
---|---|
net.ipv4.ip_forward = 1 | あるNICから来たパケットを別のNICへ送出する(IPv4) |
net.ipv6.conf.all.forwarding = 1 | あるNICから来たパケットを別のNICへ送出する(IPv6) |
net.ipv4.conf.all.accept_redirects = 0 | ICMPリダイレクトされたパケットの受入無効化 |
net.ipv4.conf.all.send_redirects = 0 | ICMPリダイレクトされたパケットの送出無効化 |
3-3.strongswanインストール
以下コマンドにてインストールを実施します。
# apt update
# apt install -y strongswan
3-4.strongswan設定(/etc/ipsec.conf)
# vi /etc/ipsec.conf
----------------------------
config setup
charondebug="all"
uniqueids=yes
conn Tunnel1
type=tunnel
auto=start
keyexchange=ikev2
authby=psk
leftid=<接続元のグローバルIPアドレス>
leftsubnet=10.0.1.0/24
right=<接続先のグローバルIPアドレス/トンネル1>
rightsubnet=172.16.1.0/24
aggressive=no
ikelifetime=28800s
lifetime=3600s
margintime=270s
rekey=yes
rekeyfuzz=100%
fragmentation=yes
replay_window=1024
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
ike=aes128-sha1-modp1024
esp=aes128-sha1-modp1024
keyingtries=%forever
conn Tunnel2
type=tunnel
auto=start
keyexchange=ikev2
authby=psk
leftid=<接続元のグローバルIPアドレス>
leftsubnet=10.0.1.0/24
right=<接続先のグローバルIPアドレス/トンネル2>
rightsubnet=172.16.1.0/24
aggressive=no
ikelifetime=28800s
lifetime=3600s
margintime=270s
rekey=yes
rekeyfuzz=100%
fragmentation=yes
replay_window=1024
dpddelay=30s
dpdtimeout=120s
dpdaction=restart
ike=aes128-sha1-modp1024
esp=aes128-sha1-modp1024
keyingtries=%forever
parameter | 設定内容 |
---|---|
charondebug | ログ出力量設定 |
uniqueids | 接続IDについて枯渇時に再利用を許可するか |
conn | 接続名 |
type | 接続タイプ(tunnel,transport,passthrough,drop) |
auto | 接続自動設定(start,add,ignore) |
keyexchange | ikeプロトコルバージョン(ikeのみ) |
authby | 認証方式(secret,never,null,rsasig,...) |
leftid | 自身のVPN用IPアドレス |
leftsubnet | 自身側のプライベートサブネット |
right | 他方のVPN用IPアドレス |
rightsubnet | 他方側のプライベートサブネット |
aggressive | アグレッシブモードの使用 |
ikelifetime | 再認証間隔 |
lifetime | 接続最長時間 |
margintime | ローカル側の接続最長時間 |
rekey | コネクション再接続是非 |
rekeyfuzz | marginbytes、marginpackets、marginintimeの増加係数 |
fragmentation | IKEフラグメンテーションの許可 |
replay_window | IPSecウインドウサイズ |
dpddelay | ハートビート間隔 |
dpdtimeout | タイムアウト間隔 |
dpdaction | タイムアウト時の動作(restart,hold,clear) |
ike | アルゴリズム指定(※) |
esp | アルゴリズム指定(※) |
keyingtries | 認証試行回数 |
(※)アルゴリズム指定については以下のような形式で記載
encryption - integrity[-prf] - dhgroup
dhgroupについては以下形式で表記
https://docs.strongswan.org/docs/5.9/config/IKEv2CipherSuites.html
その他詳細は以下のマニュアルを参照のこと。
3-5.strongswan設定(/etc/ipsec.secrets)
secret認証を設定します。
/etc/ipsec.secret
ファイルに認証設定を追加します。
左側アドレス、右側アドレス、認証方式、認証文字列(secret)を記載します。
# vi /etc/ipsec.secrets
----------------------------
<接続元のグローバルIPアドレス> <接続先のグローバルIPアドレス/トンネル1> : PSK "V8UAMWSzWtF3JYKwEHAJaV6T883VxNVi"
<接続元のグローバルIPアドレス> <接続先のグローバルIPアドレス/トンネル2> : PSK "I0GGy7OCQNcPmKdJYfEqPlYjyi1bGeng"
VPN構成時に/etc/ipsec.secret
ファイルは権限が600
となっている必要があります。
# ls -l /etc/ipsec.secrets
-rw------- 1 root root 237 10月 29 20:47 /etc/ipsec.secrets
3-6.strongswan起動
ipsec
コマンドを利用してVPN接続を構成します。
# ipsec restart
ステータス確認にてSecurity Associations (2 up, 0 connecting):
と表示されればVPN接続されています。
# ipsec status
Security Associations (2 up, 0 connecting):
Tunnel2[2]: ESTABLISHED 77 seconds ago, 10.0.1.11[<接続元GIP>]...<接続先GIP1>[<接続先GIP1>]
Tunnel2{2}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c3d08fff_i cd91a79f_o
Tunnel2{2}: 10.0.1.0/24 === 172.16.1.0/24
Tunnel1[1]: ESTABLISHED 78 seconds ago, 10.0.1.11[<接続元GIP>]...<接続先GIP2>[<接続先GIP2>]
Tunnel1{1}: INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: c1819185_i cd9f2a38_o
Tunnel1{1}: 10.0.1.0/24 === 172.16.1.0/24