1
0

AWS Site to Site VPNとubuntu 22.04/StrongswanによるVPN接続

Last updated at Posted at 2023-11-05

image.png

1.EC2(osaka)作成

大阪リージョン側のstrongswanをインストールするEC2を作成します。

1-1.EC2作成

以下でEC2を作成します。
・OS:ubuntu 22.04
・キーペア:(ED25519形式のキーペア) ※ubuntu仕様
・パブリックIPの自動割当て:有効化 ※別途EIP紐づけ

1-2.EIP関連付け

恒久的にVPNを利用する際はグローバルアドレスを固定したほうが便利なためEIPをEC2に関連付けします。
image.png

1-3.PSK作成

接続で利用するためのPSK用文字列を作成します。
EC2にログインし、以下コマンドを入力して文字列出力します。
なお、S2S-VPNでは2つまでトンネルを作成可能のため、2回実行して2個の文字列を作成します。

urandom
# head -c 24 /dev/urandom | base64
# head -c 24 /dev/urandom | base64


2.Site to Site VPN設定

東京リージョン側でSite to Site VPNをセットアップします。

2-1.仮想プライベートゲートウェイの作成

仮想プライベートゲートウェイを作成します。

image.png

適当な名前を付けて作成します。
image.png

Site to Site VPN接続先となるVPCへアタッチします。
image.png
image.png
image.png


2-2.ルートテーブル編集

VPN接続先VPNのルートテーブルにて、VPN接続元セグメントに対して仮想プライベートゲートウェイを宛先としたルーティングを設定します。

image.png


2-3.Site to Site VPN設定

Site to Site VPN接続を作成します。

image.png


設定項目を入力します。

項目 設定内容
名前タグ (任意)
ターゲットゲートウェイのタイプ 選択式:今回は作成済みの仮想プライベートゲートウェイを選択
カスタマーゲートウェイ 選択式:今回は新規で作成
IPアドレス 接続元(strongswan側)のグローバルIPアドレスを入力
ARN証明書 AWS ACMに登録されている証明書を使用する場合に選択(省略可)
BGP ASN BGP接続する際に設定(省略可)
ルーティングオプション 選択式:今回は静的で設定
静的IPプレフィックス VPCにアドバタイズするIPプレフィックスを入力
ローカルIPv4ネットワークCIDR 接続元(strongswan側)のローカルIPセグメントを入力
リモートIPv4ネットワークCIDR 接続先(S2S-VPN側)のローカルIPセグメントを入力

image.png

項目 設定内容
トンネルxの内部IPv4 CIDR トンネル内で使用するIPv4 CIDR(省略可)
トンネルxの事前共有キー トンネル内で使用するPSK/今回は事前作成したPSKを入力
トンネルxの詳細オプション 選択式:今回はデフォルトのまま
トンネルのメンテナンス AWS側のメンテナンススケジュール制御

image.png

トンネル詳細オプションの内容

image.png

image.png


VPN接続が作成されました。
image.png

このタイミングでトンネル2個分のグローバルIPアドレスが作成されます。
image.png
image.png


2-4.VPNコンフィグダウンロード

VPN設定から設定をダウンロードします。
image.png

image.png

サンプルコンフィグがテキストファイルでダウンロードされます。
image.png



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ファイアーウォールを停止します。

firewall無効化
# 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インストール

以下コマンドにてインストールを実施します。

strongswan-install
# apt update
# apt install -y strongswan

3-4.strongswan設定(/etc/ipsec.conf)

/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については以下形式で表記
image.png
https://docs.strongswan.org/docs/5.9/config/IKEv2CipherSuites.html

その他詳細は以下のマニュアルを参照のこと。


3-5.strongswan設定(/etc/ipsec.secrets)

secret認証を設定します。

/etc/ipsec.secretファイルに認証設定を追加します。
左側アドレス、右側アドレス、認証方式、認証文字列(secret)を記載します。

/etc/ipsec.secrets
# vi /etc/ipsec.secrets
----------------------------
<接続元のグローバルIPアドレス> <接続先のグローバルIPアドレス/トンネル1> : PSK "V8UAMWSzWtF3JYKwEHAJaV6T883VxNVi"
<接続元のグローバルIPアドレス> <接続先のグローバルIPアドレス/トンネル2> : PSK "I0GGy7OCQNcPmKdJYfEqPlYjyi1bGeng"

VPN構成時に/etc/ipsec.secretファイルは権限が600となっている必要があります。

check
# ls -l /etc/ipsec.secrets
-rw------- 1 root root 237 10月 29 20:47 /etc/ipsec.secrets

3-6.strongswan起動

ipsecコマンドを利用してVPN接続を構成します。

ipsec-restart
# ipsec restart

ステータス確認にてSecurity Associations (2 up, 0 connecting):と表示されればVPN接続されています。

ipsec-status
# 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

AWS側からも接続確立が確認できました。
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0