すべてのプロダクト
Search
ドキュメントセンター

VPN Gateway:strongSwan の設定

最終更新日:Apr 30, 2026

オープンソースの strongSwan ソフトウェアを使用して、Alibaba Cloud の VPN ゲートウェイとの間に IPsec-VPN 接続を確立し、オンプレミス環境とクラウド環境間のプライベートネットワーク通信を有効化します。

例となるシナリオ

このシナリオでは、データセンター内のゲートウェイデバイスに strongSwan をデプロイし、Alibaba Cloud との間にデュアルトンネル IPsec-VPN 接続を確立します。これにより、データセンターとクラウドリソースが接続されます。

IP アドレス計画

データセンター

  • プライベート CIDR ブロック: 172.16.0.0/16

  • strongSwan デバイス

    • NIC eth0: 172.16.20.80、パブリック送信元 IP アドレス 1: 120.XX.XX.202 にマッピング

    • (任意)NIC eth1: 172.16.21.248、パブリック送信元 IP アドレス 2: 47.XX.XX.127 にマッピング

      説明

      NAT を使用しないシナリオについては、「NIC にパブリック IP アドレスを持つ strongSwan デバイスの設定方法」をご参照ください。

      1 つのパブリック送信元 IP アドレス(シングル送信元)または 2 つのパブリック送信元 IP アドレス(デュアル送信元)を持つデバイスを使用して、デュアルトンネル IPsec-VPN 接続を確立できます。本トピックでは、両方のシナリオの例を示します。

Alibaba Cloud

  • VPC CIDR ブロック: 192.168.0.0/16

    • vSwitch 1 CIDR ブロック: 192.168.10.0/24

    • vSwitch 2 CIDR ブロック: 192.168.20.0/24

    • vSwitch 3 CIDR ブロック: 192.168.40.0/24

    • vSwitch 4 CIDR ブロック: 192.168.50.0/24

    • vSwitch 5 CIDR ブロック: 192.168.55.0/24

  • VPN ゲートウェイ

    • IPsec アドレス 1: 47.XX.XX.151

    • IPsec アドレス 2: 47.XX.XX.87

      説明

      VPN ゲートウェイを作成すると、システムは自動的に 2 つの IPsec アドレスを VPN ゲートウェイインスタンスに割り当てます。

BGP IP アドレス

本トピックでは、静的ルーティングおよび BGP 動的ルーティングを使用する IPsec-VPN 接続向けに strongSwan デバイスを設定する方法について説明します。BGP 動的ルーティングを使用しない場合は、このセクションをスキップできます。次の表は、この例における BGP CIDR ブロック計画を示しています。

リソース

トンネル

BGP トンネル CIDR ブロック

BGP IP アドレス

BGP ASN

VPN ゲートウェイインスタンス

トンネル 1

169.254.10.0/30

説明

同じ VPN ゲートウェイインスタンスにおいて、各トンネルの CIDR ブロックは一意である必要があります。

169.254.10.1

65535

トンネル 2

169.254.20.0/30

169.254.20.1

strongSwan デバイス

トンネル 1

169.254.10.0/30

169.254.10.2

65530

トンネル 2

169.254.20.0/30

169.254.20.2

VPN パラメーター

この例では、両方のトンネルで同じパラメーターを使用します。各トンネルについて、strongSwan デバイスと Alibaba Cloud 上の設定が一致していることを確認してください。

  • 事前共有鍵: ChangeMe***

  • IKE 設定

    • IKE バージョン: ikev2

    • ネゴシエーションモード: main

    • 暗号化アルゴリズム: aes

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA 有効期間(秒): 86400

  • IPsec 設定:

    • 暗号化アルゴリズム: aes

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA 有効期間(秒): 86400

Alibaba Cloud 側の準備

計画するパブリック送信元 IP アドレスの数およびルーティング方式に基づき、Alibaba Cloud 側で以下の設定を完了します。

BGP 動的ルーティングによるデュアルエグレス

VPC とデータセンター間の接続(デュアルトンネルモードおよび BGP 動的ルーティング)」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN 接続の作成、およびBGP 自動ルート広告の有効化

  1. strongSwan デバイスには 2 つのパブリック送信元 IP アドレスがあります。カスタマーゲートウェイを 2 つ作成する必要があります。

  2. IPsec-VPN 接続を作成する際、トンネル 1 をパブリック送信元 1 に、トンネル 2 をパブリック送信元 2 に関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。

デュアル送信元での静的ルーティング

標準 VPN ゲートウェイのクイックスタート」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN 接続の作成、およびVPN ゲートウェイのルート設定

  1. strongSwan デバイスには 2 つのパブリック送信元 IP アドレスがあります。カスタマーゲートウェイを 2 つ作成する必要があります。

  2. IPsec-VPN 接続を作成する際、トンネル 1 をパブリック送信元 1 に、トンネル 2 をパブリック送信元 2 に関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。

シングル送信元 - BGP 動的ルーティング

VPC とデータセンター間の接続(デュアルトンネルモードおよび BGP 動的ルーティング)」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN 接続の作成、およびBGP 自動ルート広告の有効化

  1. strongSwan デバイスには 1 つのパブリック送信元 IP アドレスのみがあります。カスタマーゲートウェイは 1 つだけ作成する必要があります。

  2. IPsec-VPN 接続を作成する際、両方のトンネルを同じカスタマーゲートウェイに関連付けてください。このシナリオでは、ルーティングモードが 宛先ルーティングモード に設定されます。

シングル送信元での静的ルーティング

標準 VPN ゲートウェイのクイックスタート」をご参照のうえ、次の手順を完了してください:VPN ゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN 接続の作成、およびVPN ゲートウェイのルート設定。以下の点にご注意ください。

  1. strongSwan デバイスには 1 つのパブリック送信元 IP アドレスのみがあります。カスタマーゲートウェイは 1 つだけ作成する必要があります。

  2. IPsec-VPN 接続を作成する際、保護対象データフロー モード を使用し、以下のパラメーターを指定する必要があります。両方のトンネルを同じカスタマーゲートウェイに関連付けてください。

    • ローカルネットワーク: Alibaba Cloud 側の VPC の CIDR ブロック(192.168.0.0/16)を入力します。

    • リモートネットワーク: データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。

説明

IPsec-VPN 接続がトランジットルーターに関連付けられているシナリオでは、この方法ではなく BGP 動的ルーティングを使用することを推奨します。

strongSwan デバイスの設定

説明

以下の手順では、CentOS Stream 9 64 ビットオペレーティングシステムを実行する strongSwan デバイスを例として使用します。他のオペレーティングシステムについては、「strongSwan 公式ドキュメント」をご参照ください。

1. ファイアウォールポリシーの設定

strongSwan デバイス上で、ESP プロトコル(IP プロトコル番号 50)、UDP ポート 500、および UDP ポート 4500 を通過するトラフィックを許可します。

iptables -I INPUT -p 50 -j ACCEPT
iptables -I INPUT -p udp --dport 500 -j ACCEPT 
iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2. トラフィック転送の有効化

echo 1 > /proc/sys/net/ipv4/ip_forward
重要

上記のコマンドは一時的なものであり、デバイス再起動後には持続しません。変更を永続化するには、以下の手順に従ってください。

永続的な設定

  1. /etc/sysctl.conf ファイルを開きます。

    vi /etc/sysctl.conf
  2. ファイルに以下の設定を追加します。

    net.ipv4.ip_forward = 1
  3. 設定を有効にするために、以下のコマンドを実行します。

    sudo sysctl -p

3. strongSwan のインストール

dnf install epel-release -y
dnf install strongswan -y

4. デュアルトンネルの設定

静的ルーティングと BGP ルーティングによるデュアルイグレス

重要

デュアル送信元は XFRM 仮想ネットワークインターフェースに基づいています。XFRM 仮想ネットワークインターフェースを使用するには、strongSwan 5.8.0 以降をインストールし、Linux カーネル 4.19 以降および iproute2 5.1.0 以降を使用し、カーネルが xfrm モジュールをサポートしている必要があります。lsmod | grep xfrm コマンドを実行しても結果が返されない場合、xfrm モジュールはサポートされていません。詳細については、「XFRM Interfaces on Linux」をご参照ください。

  1. Alibaba Cloud 側の 2 つの IPsec アドレスへのルートを追加します。これにより、IPsec アドレス 1 宛のトラフィックは eth0 経由でルーティングされ、IPsec アドレス 2 宛のトラフィックは eth1 経由でルーティングされます。

    ip route add 47.XX.XX.151 via 172.16.20.253 dev eth0  #172.16.20.253 は eth0 のプライベートゲートウェイアドレスです。
    ip route add 47.XX.XX.87 via 172.16.21.253 dev eth1   #172.16.21.253 は eth1 のプライベートゲートウェイアドレスです。

    以下の 2 つの IPsec アドレスに PING できることを確認してください。

    ping 47.XX.XX.151 
    ping 47.XX.XX.87 
  2. IPsec-VPN トンネルを確立するための仮想ネットワークインターフェースを 2 つ作成します。

    ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。
    ip link add ipsec1 type xfrm dev eth1 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth1 です。
    ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。
    ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。
    重要

    仮想ネットワークインターフェースを作成する設定は一時的なものです。strongSwan デバイスを再起動した後は、再度設定を追加し、sudo systemctl restart strongswan;swanctl --load-all コマンドを実行する必要があります。このコマンドには root 権限が必要です。strongSwan デバイスの起動スクリプトを追加することで、デバイス再起動後に自動的に仮想ネットワークインターフェースが追加されるようにできます。

    起動スクリプト

    1. 以下のコマンドを実行してスクリプトを作成します。

      vi xfrm.sh
    2. 以下の設定を追加して保存します。

      sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。
      sudo ip link add ipsec1 type xfrm dev eth1 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth1 です。
      sudo ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。
      sudo ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。
    3. 以下のコマンドを実行してスクリプトの絶対パスを確認します。

      sudo find / -name xfrm.sh
    4. sudo vi /etc/rc.d/rc.local コマンドを実行し、/etc/rc.d/rc.local ファイルにスクリプトの絶対パスを追加します。

      i キーを押して挿入モードに入ります。スクリプトの絶対パス(例:/root/xfrm.sh)を /etc/rc.d/rc.local ファイルに追加します。Esc キーを押して挿入モードを終了し、:wq と入力して設定を保存します。

    5. rc.local ファイルおよび xfrm.sh スクリプトに実行権限を付与します。

      sudo chmod +x /etc/rc.d/rc.local
      sudo chmod +x /root/xfrm.sh
  3. strongSwan 設定ファイルを修正します。

    1. 元の strongSwan 設定ファイルをバックアップします。

      mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
    2. strongSwan 設定ファイルを作成します。

      vi /etc/strongswan/swanctl/swanctl.conf
    3. 例となるシナリオで指定された IPsec パラメーターに基づき、以下の設定を追加して保存します。

      重要

      静的ルーティングを使用する場合は、設定ファイル内の updown = /root/connect_1.sh および updown = /root/connect_2.sh コマンドのコメントを外す必要があります。

      connections {
         vco1 {                            # IPsec-VPN トンネル 1 の VPN 設定を追加します。
            version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80       # 最初のローカル NIC の IP アドレス。
            remote_addrs = 47.XX.XX.151       # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。
            over_time = 1800               
            proposals = aes-sha1-modp1024  # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。
            encap = yes
      
            local {
               auth = psk                  # ローカル側の認証方式として PSK を指定します。
               id = 120.XX.XX.202             # 最初のローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。
            }
            remote {
               auth = psk                  # ピア側の認証方式として PSK を指定します。
               id = 47.XX.XX.151             # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024   # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
      
                  if_id_out = 42           # トンネル 1 の XFRM 仮想ネットワークインターフェースを、トンネル 1 の送信および受信インターフェースとして指定します。
                  if_id_in = 42
                  #updown = /root/connect_1.sh         # トンネル 1 の UP/DOWN ステータスに基づいてルートを設定する /root/connect_1.sh スクリプトを実行します。このパラメーターは静的ルーティングを使用する場合にのみ必要です。
               }
            }
         }
        vco2 {                             # IPsec-VPN トンネル 2 の VPN 設定を追加します。
            version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
            local_addrs  = 172.16.21.248        # 2 番目のローカル NIC の IP アドレス。
            remote_addrs = 47.XX.XX.87       # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。
            over_time = 1800               # 
            proposals = aes-sha1-modp1024  # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。
            encap = yes
      
            local {
               auth = psk                  # ローカル側の認証方式として PSK を指定します。
               id = 47.XX.XX.127              # 2 番目のローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。
            }
            remote {
               auth = psk                  # ピア側の認証方式として PSK を指定します。
               id = 47.XX.XX.87             # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024     # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
                  if_id_out = 43           # トンネル 2 の XFRM 仮想ネットワークインターフェースを、トンネル 2 の送信および受信インターフェースとして指定します。
                  if_id_in = 43
                  #updown = /root/connect_2.sh           # トンネル 2 の UP/DOWN ステータスに基づいてルートを設定する /root/connect_2.sh スクリプトを実行します。このパラメーターは静的ルーティングを使用する場合にのみ必要です。
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            id = 47.XX.XX.151               # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。
            secret = ChangeMe***            # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。
         }
         ike-vco2 {
            id = 47.XX.XX.87                # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。
            secret = ChangeMe***            # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。
         }
      }
  4. strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    出力には IPsec-VPN 接続が確立されていることが表示されますが、ルートが設定されていないため、ネットワーク通信はまだ有効になっていません。

    IPsec-VPN

  5. ルートを設定します。

    使用するルーティング方式に基づき、関連する内容をご確認ください。

    BGP 動的ルーティング

    説明

    strongSwan デバイスを再起動した後は、再度 BGP 設定を追加する必要があります。

    1. 以下のコマンドを実行して BGP IP アドレスを設定します。

      ip address add 169.254.10.2/30 dev ipsec0
      ip address add 169.254.20.2/30 dev ipsec1
    2. FRRouting (FRR) ソフトウェアをインストールします。

      yum install -y frr
    3. vi /etc/frr/daemons コマンドを実行して設定ファイルを編集し、BGP 動的ルーティングを有効にします。

      i キーを押して挿入モードに入ります。bgpd パラメーターの値を yes に変更して BGP 動的ルーティングを有効にします。Esc キーを押して挿入モードを終了し、:wq と入力して設定を保存します。

    4. FRR を実行します。

      systemctl enable frr
      systemctl restart frr
    5. BGP 設定を追加します。

      1. 以下のコマンドを実行して設定インターフェースに入ります。

        vtysh
      2. 以下のコマンドを実行して設定モードに入ります。

        config terminal
      3. BGP 設定を追加します。

        コマンドを実行する際、以下の値を実際に使用する値に置き換えてください。

        • "169.254.10.1" および "169.254.20.1" を Alibaba Cloud 側のトンネルの BGP IP アドレスに置き換えます。

        • "65535" をお客様のシナリオにおける VPN ゲートウェイの BGP ASN に置き換えます。

        • "172.16.20.0/24" および "172.16.21.0/24" をデータセンターの CIDR ブロックに置き換えます。

        route-map allow-all permit 1
        exit
        
        router bgp 65530
         bgp router-id 169.254.10.2
         neighbor 169.254.10.1 remote-as 65535   
         neighbor 169.254.10.1 timers 10 30
         neighbor 169.254.20.1 remote-as 65535    
         neighbor 169.254.20.1 timers 10 30
         
         address-family ipv4 unicast
          network 172.16.20.0/24                  
          network 172.16.21.0/24
          neighbor 169.254.10.1 soft-reconfiguration inbound
          neighbor 169.254.10.1 route-map allow-all in
          neighbor 169.254.10.1 route-map allow-all out
          neighbor 169.254.20.1 soft-reconfiguration inbound
          neighbor 169.254.20.1 route-map allow-all in
          neighbor 169.254.20.1 route-map allow-all out
          maximum-paths 32                       
         exit-address-family
        exit
        
    6. exit コマンドを実行して設定モードを終了し、show ip bgp コマンドを実行して BGP ルートを表示します。

      strongSwan デバイスが VPC へのルートを学習しており、データセンターと VPC 間で通信できていることが確認できます。BGP路由

    静的ルーティング

    strongSwan が呼び出してルートを設定し、トラフィック転送を制御するためのスクリプトを 2 つ作成します。

    1. /root/connect_1.sh スクリプトを作成・編集します。

      vi /root/connect_1.sh
    2. 以下の内容を追加して保存します。

      #!/usr/bin/env bash
      if [ x"$PLUTO_VERB" == "xup-client" ]; then
      	echo "ip route add 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec0 metric 100
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 192.168.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec0 metric 100
      fi

      目的:トンネル 1 が UP 状態になると、このスクリプトは Alibaba Cloud VPC(192.168.0.0/16)宛のトラフィックをトンネル 1 の XFRM 仮想ネットワークインターフェース経由でルーティングするルートを追加します。スクリプトはルートメトリックを 100 に設定し、トンネル 2 の XFRM 仮想ネットワークインターフェースを指すルートよりも優先度を高くします。トンネル 1 が DOWN 状態になると、スクリプトはこのルートを削除します。

    3. /root/connect_2.sh スクリプトを作成・編集します。

      vi /root/connect_2.sh
    4. 以下の内容を追加して保存します。

      #!/usr/bin/env bash
      if [ x"$PLUTO_VERB" == "xup-client" ]; then
      	echo "ip route add 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 192.168.0.0/16 dev ipsec1 metric 101
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 192.168.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 192.168.0.0/16 dev ipsec1 metric 101
      fi

      目的:トンネル 2 が UP 状態になると、このスクリプトは Alibaba Cloud VPC(192.168.0.0/16)宛のトラフィックをトンネル 2 の XFRM 仮想ネットワークインターフェース経由でルーティングするルートを追加します。スクリプトはルートメトリックを 101 に設定し、トンネル 1 の XFRM 仮想ネットワークインターフェースを指すルートよりも優先度を低くします。トンネル 2 が DOWN 状態になると、スクリプトはこのルートを削除します。

    5. 2 つのスクリプトに実行権限を付与します。

      sudo chmod +x /root/connect_1.sh
      sudo chmod +x /root/connect_2.sh
    6. strongSwan プロセスを再起動します。

      sudo systemctl restart strongswan
    7. 以下のコマンドを実行してルートが設定されているか確認します。

      route -n

      静态路由

単一エグレスと BGP 動的ルーティング

重要

BGP 動的ルーティングは XFRM 仮想ネットワークインターフェースに基づいています。XFRM 仮想ネットワークインターフェースを使用するには、strongSwan 5.8.0 以降をインストールし、Linux カーネル 4.19 以降および iproute2 5.1.0 以降を使用し、カーネルが xfrm モジュールをサポートしている必要があります。lsmod | grep xfrm コマンドを実行しても結果が返されない場合、xfrm モジュールはサポートされていません。詳細については、「XFRM Interfaces on Linux」をご参照ください。

  1. IPsec-VPN トンネルを確立するための仮想ネットワークインターフェースを 2 つ作成します。

    ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。
    ip link add ipsec1 type xfrm dev eth0 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth0 です。
    ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。
    ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。
    重要

    仮想ネットワークインターフェースを作成する設定は一時的なものです。strongSwan デバイスを再起動した後は、再度設定を追加し、sudo systemctl restart strongswan;swanctl --load-all コマンドを実行する必要があります。このコマンドには root 権限が必要です。strongSwan デバイスの起動スクリプトを追加することで、デバイス再起動後に自動的に仮想ネットワークインターフェースが追加されるようにできます。

    起動スクリプト

    1. 以下のコマンドを実行してスクリプトを作成します。

      vi xfrm.sh
    2. 以下の設定を追加して保存します。

      sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 42、基盤となるインターフェースはパブリックインターフェース eth0 です。
      sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。インターフェース ID は 43、基盤となるインターフェースはパブリックインターフェース eth0 です。
      sudo ip link set ipsec0 up # トンネル 1 用の XFRM 仮想ネットワークインターフェースを起動します。
      sudo ip link set ipsec1 up # トンネル 2 用の XFRM 仮想ネットワークインターフェースを起動します。
    3. 以下のコマンドを実行してスクリプトの絶対パスを確認します。

      sudo find / -name xfrm.sh
    4. sudo vi /etc/rc.d/rc.local コマンドを実行し、/etc/rc.d/rc.local ファイルにスクリプトの絶対パスを追加します。

      i キーを押して挿入モードに入ります。スクリプトの絶対パス(例:/root/xfrm.sh)を /etc/rc.d/rc.local ファイルに追加します。Esc キーを押して挿入モードを終了し、:wq と入力して設定を保存します。

    5. rc.local ファイルおよび xfrm.sh スクリプトに実行権限を付与します。

      sudo chmod +x /etc/rc.d/rc.local
      sudo chmod +x /root/xfrm.sh
  2. strongSwan 設定ファイルを修正します。

    1. 元の strongSwan 設定ファイルをバックアップします。

      mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
    2. strongSwan 設定ファイルを作成します。

      vi /etc/strongswan/swanctl/swanctl.conf
    3. 例となるシナリオで指定された IPsec パラメーターに基づき、以下の設定を追加して保存します。

      connections {
         vco1 {                            # IPsec-VPN トンネル 1 の VPN 設定を追加します。
            version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80    # eth0 インターフェースのプライベート IP アドレス。
            remote_addrs = 47.XX.XX.151    # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。
            over_time = 1800               
            proposals = aes-sha1-modp1024  # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。
            encap = yes
      
            local {
               auth = psk                  # ローカル側の認証方式として PSK を指定します。
               id = 120.XX.XX.202          # eth0 のパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。
            }
            remote {
               auth = psk                  # ピア側の認証方式として PSK を指定します。
               id = 47.XX.XX.151           # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024   # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
      
                  if_id_out = 42           # トンネル 1 の XFRM 仮想ネットワークインターフェースを、トンネル 1 の送信および受信インターフェースとして指定します。
                  if_id_in = 42
               }
            }
         }
        vco2 {                             # IPsec-VPN トンネル 2 の VPN 設定を追加します。
            version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80    # eth0 インターフェースのプライベート IP アドレス。
            remote_addrs = 47.XX.XX.87     # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。
            over_time = 1800               # 
            proposals = aes-sha1-modp1024  # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。
            encap = yes
      
            local {
               auth = psk                  # ローカル側の認証方式として PSK を指定します。
               id = 120.XX.XX.202          # eth0 のパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。
            }
            remote {
               auth = psk                  # ピア側の認証方式として PSK を指定します。
               id = 47.XX.XX.87            # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 側の宛先ルーティングモードの場合、対応する保護対象データフローは 0.0.0.0/0 です。
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024     # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
                  if_id_out = 43           # トンネル 2 の XFRM 仮想ネットワークインターフェースを、トンネル 2 の送信および受信インターフェースとして指定します。
                  if_id_in = 43
                
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            id = 47.XX.XX.151               # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。
            secret = ChangeMe***            # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。
         }
         ike-vco2 {
            id = 47.XX.XX.87               # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。
            secret = ChangeMe***            # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。
         }
      }
  3. strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    出力には IPsec-VPN 接続が確立されていることが表示されますが、ルートが設定されていないため、ネットワーク通信はまだ有効になっていません。

    单出口

  4. BGP 動的ルーティングを設定します。

    説明

    strongSwan デバイスを再起動した後は、再度 BGP 設定を追加する必要があります。

    1. 以下のコマンドを実行して BGP IP アドレスを設定します。

      ip address add 169.254.10.2/30 dev ipsec0
      ip address add 169.254.20.2/30 dev ipsec1
    2. FRRouting (FRR) ソフトウェアをインストールします。

      yum install -y frr
    3. vi /etc/frr/daemons コマンドを実行して設定ファイルを編集し、BGP 動的ルーティングを有効にします。

      i キーを押して挿入モードに入ります。bgpd パラメーターの値を yes に変更して BGP 動的ルーティングを有効にします。Esc キーを押して挿入モードを終了し、:wq と入力して設定を保存します。

    4. FRR を実行します。

      systemctl enable frr
      systemctl restart frr
    5. BGP 設定を追加します。

      1. 以下のコマンドを実行して設定インターフェースに入ります。

        vtysh
      2. 以下のコマンドを実行して設定モードに入ります。

        config terminal
      3. BGP 設定を追加します。

        コマンドを実行する際、以下の値を実際に使用する値に置き換えてください。

        • "169.254.10.1" および "169.254.20.1" を Alibaba Cloud 側のトンネルの BGP IP アドレスに置き換えます。

        • "65535" をお客様のシナリオにおける VPN ゲートウェイの BGP ASN に置き換えます。

        • "172.16.20.0/24" および "172.16.21.0/24" をデータセンターの CIDR ブロックに置き換えます。

        route-map allow-all permit 1
        exit
        
        router bgp 65530
         bgp router-id 169.254.10.2
         neighbor 169.254.10.1 remote-as 65535   
         neighbor 169.254.10.1 timers 10 30
         neighbor 169.254.20.1 remote-as 65535    
         neighbor 169.254.20.1 timers 10 30
         
         address-family ipv4 unicast
          network 172.16.20.0/24                  
          network 172.16.21.0/24
          neighbor 169.254.10.1 soft-reconfiguration inbound
          neighbor 169.254.10.1 route-map allow-all in
          neighbor 169.254.10.1 route-map allow-all out
          neighbor 169.254.20.1 soft-reconfiguration inbound
          neighbor 169.254.20.1 route-map allow-all in
          neighbor 169.254.20.1 route-map allow-all out
          maximum-paths 32                       
         exit-address-family
        exit
        
    6. exit コマンドを実行して設定モードを終了し、show ip bgp コマンドを実行して BGP ルートを表示します。

      strongSwan デバイスが VPC へのルートを学習しており、データセンターと VPC 間で通信できていることが確認できます。BGP路由

静的ルートを使用したシングルエグレス

重要

静的ルーティングを使用するシングル送信元シナリオでは、Alibaba Cloud がアクティブトンネルでリスクを検出した場合、トラフィックをスタンバイトンネルに切り替える可能性があります。これにより、トラフィックが中断する可能性があります。/proc/net/xfrm_stat ファイル内の XfrmInTmplMismatch パラメーターの値を監視することで、Alibaba Cloud がトラフィックをスタンバイトンネルに切り替えたかどうかを判断できます。このパラメーターの値が継続的に変化している場合、トラフィックが切り替えられたことを示します。その場合、/etc/strongswan/swanctl/swanctl.conf ファイル内のスタンバイトンネルの priority パラメーターの値を変更し、データセンターからクラウドへのトラフィックをスタンバイトンネル経由で優先するようにできます。

  1. 元の strongSwan 設定ファイルをバックアップします。

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. strongSwan 設定ファイルを作成します。

    vi /etc/strongswan/swanctl/swanctl.conf
  3. 例となるシナリオ」セクションで指定された設定に基づき、以下の設定を追加して保存します。

    connections {
       vco1 {                              # IPsec-VPN トンネル 1 の VPN 設定を追加します。
          version = 2                      # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
          local_addrs  = 172.16.20.80      # eth0 インターフェースのプライベート IP アドレス。
          remote_addrs = 47.XX.XX.151      # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。
          dpd_delay = 10
          rekey_time = 84600               # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。
          over_time = 1800               
          proposals = aes-sha1-modp1024    # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。
          encap = yes
    
          local {
             auth = psk                    # ローカル側の認証方式として PSK を指定します。
             id = 120.XX.XX.202            # ローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。
          }
          remote {
             auth = psk                    # ピア側の認証方式として PSK を指定します。
             id = 47.XX.XX.151             # Alibaba Cloud 側の IPsec アドレス 1。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。
          }
          children {
             vco_child1 {
                local_ts  = 172.16.0.0/16   # ローカル側の保護対象データフロー。データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。
                remote_ts = 192.168.0.0/16  # Alibaba Cloud 側の保護対象データフロー。VPC CIDR ブロック(192.168.0.0/16)を入力します。
                mode = tunnel
                rekey_time = 85500
                life_time = 86400          # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024   # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
                priority = 1                        # トンネル 1 の優先度を指定します。これにより、アクティブトンネル経由でのトラフィック転送が優先されます。
             }
          }
       }
      vco2 {                             # IPsec-VPN トンネル 2 の VPN 設定を追加します。
          version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 2 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
          local_addrs  = 172.16.20.80    # eth0 インターフェースのプライベート IP アドレス。
          remote_addrs = 47.XX.XX.87     # トンネル 2 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス(IPsec アドレス 2)です。
          dpd_delay = 10
          rekey_time = 84600             # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定の SA 有効期間と同じ値である必要があります。
          over_time = 1800               
          proposals = aes-sha1-modp1024  # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IKE 設定と同じ値である必要があります。group2 は modp1024 に対応します。
          encap = yes
    
          local {
             auth = psk                  # ローカル側の認証方式として PSK を指定します。
             id = 120.XX.XX.202          # ローカルパブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 2 の RemoteId と同じ値である必要があります。
          }
          remote {
             auth = psk                  # ピア側の認証方式として PSK を指定します。
             id = 47.XX.XX.87            # Alibaba Cloud 側の IPsec アドレス 2。Alibaba Cloud 側のトンネル 2 の LocalId と同じ値である必要があります。
          }
          children {
             vco_child2 {
                local_ts  = 172.16.0.0/16     # ローカル側の保護対象データフロー。データセンターのプライベート CIDR ブロック(172.16.0.0/16)を入力します。
                remote_ts =  192.168.0.0/16   # Alibaba Cloud 側の保護対象データフロー。VPC CIDR ブロック(192.168.0.0/16)を入力します。
                mode = tunnel 
                rekey_time = 85500
                life_time = 86400        # トンネル 2 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024     # トンネル 2 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 2 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
                priority = 2                          # トンネル 2 の優先度を指定します。これはトンネル 1 の優先度よりも低くなります。
             }
          }
       }
    }
    
    secrets {
       ike-vco1 {
          id = 47.XX.XX.151               # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。
          secret = ChangeMe***            # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。
       }
       ike-vco2 {
          id = 47.XX.XX.87                # Alibaba Cloud 側の VPN ゲートウェイのトンネル 2 のパブリック IP アドレス。
          secret = ChangeMe***            # トンネル 2 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 2 の事前共有鍵と同じ値である必要があります。
       }
    }
  4. strongSwan プロセスを再起動し、strongSwan 設定を再読み込みした後、トンネルステータスを確認します。

    sudo systemctl restart strongswan
    swanctl --load-all
    watch swanctl --list-sas

    出力には IPsec-VPN 接続が確立されており、データセンターと VPC 間で通信できていることが表示されます。

    单出口

5. 接続性および高可用性のテスト

  1. データセンターと VPC 間の接続性をテストします。

    データセンター内のクライアントから、Alibaba Cloud VPC 内の ECS インスタンスに対して ping を実行します。応答パケットを受信できれば、接続が成功しています。

    ping <VPC 内の ECS インスタンスの IP アドレス>
  2. IPsec-VPN 接続の高可用性をテストします。

    1. PING を実行している間に、IPsec-VPN 接続のアクティブトンネルを中断します。

      アクティブトンネルの事前共有鍵を変更することで、アクティブトンネルを中断できます。トンネルの両端の事前共有鍵が一致しない場合、アクティブトンネルは中断されます。

    2. アクティブトンネルを中断した後、ping コマンドを使用して再度接続性を確認します。ping トラフィックが一時的に中断された後、通信が復旧すれば、トラフィックが自動的にスタンバイトンネルにフェイルオーバーしたことを確認できます。

よくある質問

トランジットルーター接続向けの strongSwan 設定

IPsec-VPN 接続がトランジットルーターに関連付けられている場合、strongSwan デバイスの設定は本トピックで説明したものと同じです。BGP 動的ルーティングを使用することを推奨します。設定が完了したら、strongSwan デバイス上で BGP 経由で学習した VPC ルートを確認できます。IPsec-VPN 接続の 2 つのトンネルは自動的に ECMP ルーティングを確立します。等价路由

IKEv1 のサポート

はい。

/etc/strongswan/swanctl/swanctl.conf ファイルを設定する際、version = 1 を指定してください。

保護対象データフローの指定

/etc/strongswan/swanctl/swanctl.conf ファイルを設定する際、以下の設定で CIDR ブロックを指定してください。また、Alibaba Cloud 側の IPsec-VPN 接続でも保護対象データフロー モードが設定されていることを確認してください。

データセンターまたは Alibaba Cloud VPC に対して複数の CIDR ブロックを指定する必要がある場合、strongSwan デバイスおよび IPsec-VPN 接続の両方が IKEv2 を使用する必要があります。

children {
         vco_child1 {
            local_ts  = 192.168.20.0/24,192.168.50.0/24    # データセンターの CIDR ブロック。
            remote_ts = 10.0.0.0/16    # Alibaba Cloud 側の VPC の CIDR ブロック。
         }
}

NIC にパブリック IP アドレスを持つ strongSwan の設定

strongSwan デバイスのネットワークインターフェースにパブリック IP アドレスが割り当てられている場合(NAT を使用しないシナリオ)、/etc/strongswan/swanctl/swanctl.conf ファイル内の各トンネルの local_addrs フィールドの値をパブリック IP アドレスに変更するだけで済みます。他の設定は変更不要です。

connections {
   vco1 {                            
      local_addrs  = 1.1.XX.XX     # strongSwan デバイスの NIC に割り当てられたパブリック IP アドレス。
   }
}

シングルトンネル設定

重要

ご利用の VPN ゲートウェイがシングルトンネル IPsec-VPN 接続のみをサポートしている場合、「IPsec-VPN 接続をデュアルトンネルモードにスペックアップ」することを推奨します。デュアルトンネル IPsec-VPN 接続は、可用性ゾーン間のディザスタリカバリをサポートし、高可用性を向上させます。

シングルトンネルの例

シングルトンネルの例

例となるシナリオ

以下の図に示すシナリオでは、データセンター内のゲートウェイデバイスに strongSwan ソフトウェアをデプロイし、Alibaba Cloud との間にシングルトンネル IPsec-VPN 接続を確立して、データセンターとクラウドリソース間のネットワーク通信を有効化します。

IP アドレス計画

データセンター側

Alibaba Cloud 側

  • VPC CIDR ブロック: 172.16.0.0/16

    • vSwitch 1 CIDR ブロック: 172.16.1.0/24

    • vSwitch 2 CIDR ブロック: 172.16.2.0/24

  • VPN ゲートウェイ

    • IPsec アドレス: 3.3.XX.XX

      説明

      VPN ゲートウェイを作成すると、システムは自動的に IPsec アドレスを VPN ゲートウェイインスタンスに割り当てます。

VPN パラメーター

strongSwan デバイスと Alibaba Cloud 上の設定が同じであることを確認してください。

  • 事前共有鍵: ChangeMe***

  • IKE 設定

    • IKE バージョン: ikev2

    • ネゴシエーションモード: main

    • 暗号化アルゴリズム: aes

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA 有効期間(秒): 86400

  • IPsec 設定:

    • 暗号化アルゴリズム: aes

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA 有効期間(秒): 86400

Alibaba Cloud 側の準備

strongSwan デバイスを設定する前に、例となるシナリオで指定された設定に基づき、Alibaba Cloud 側で以下の手順を完了してください:VPN ゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN 接続の作成、およびVPN ゲートウェイのルート設定。詳細については、「VPC とデータセンター間の接続(シングルトンネルモード)」をご参照ください。

IPsec-VPN 接続を作成する際、トンネルのルーティングモードを 保護対象データフロー モード に設定します。

  • ローカルネットワーク: Alibaba Cloud 側の VPC の CIDR ブロック(172.16.0.0/16)を入力します。

  • リモートネットワーク: データセンターのプライベート CIDR ブロック(10.0.0.0/16)を入力します。

strongSwan デバイスの設定

説明

以下の手順では、CentOS Stream 9 64 ビットオペレーティングシステムを実行する strongSwan デバイスを例として使用します。他のオペレーティングシステムについては、「strongSwan 公式ドキュメント」をご参照ください。

1. ファイアウォールポリシーの設定

strongSwan デバイス上で、ESP プロトコル(IP プロトコル番号 50)、UDP ポート 500、および UDP ポート 4500 を通過するトラフィックを許可します。

iptables -I INPUT -p 50 -j ACCEPT
iptables -I INPUT -p udp --dport 500 -j ACCEPT 
iptables -I INPUT -p udp --dport 4500 -j ACCEPT

2. トラフィック転送の有効化

echo 1 > /proc/sys/net/ipv4/ip_forward
重要

上記のコマンドは一時的なものであり、デバイス再起動後には持続しません。変更を永続化するには、以下の手順に従ってください。

永続的な設定

  1. /etc/sysctl.conf ファイルを開きます。

    vi /etc/sysctl.conf
  2. ファイルに以下の設定を追加します。

    net.ipv4.ip_forward = 1
  3. 設定を有効にするために、以下のコマンドを実行します。

    sudo sysctl -p

3. strongSwan のインストール

dnf install epel-release -y
dnf install strongswan -y

4. トンネルの設定

保護対象データフローに基づいてトンネルを設定します。

  1. 元の strongSwan 設定ファイルをバックアップします。

    mv /etc/strongswan/swanctl/swanctl.conf /etc/strongswan/swanctl/swanctl.conf.bak
  2. strongSwan 設定ファイルを作成します。

    vi /etc/strongswan/swanctl/swanctl.conf
  3. 例となるシナリオで指定された設定に基づき、以下の設定を追加して保存します。

    connections {
       vco1 {                            # トンネル 1 の VPN 設定を追加します。
          version = 2                    # IKE バージョンを指定します。Alibaba Cloud 側のトンネル 1 の IKE バージョンと同じ値である必要があります。2 は IKEv2 を示します。
          local_addrs  = 10.0.0.1        # ローカル NIC の IP アドレス。
          remote_addrs = 3.3.XX.XX       # トンネル 1 のリモート IP アドレスを指定します。これは Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス(IPsec アドレス 1)です。
          dpd_delay = 10
          rekey_time = 84600             # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IKE 設定の SA 有効期間と同じ値である必要があります。
          over_time = 1800               
          proposals = aes-sha1-modp1024  # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の設定と同じ値である必要があります。group2 は modp1024 に対応します。
          encap = yes
    
          local {
             auth = psk                  # ローカル側の認証方式として PSK を指定します。
             id = 1.1.XX.XX              # パブリック送信元 IP アドレス。Alibaba Cloud 側のトンネル 1 の RemoteId と同じ値である必要があります。
          }
          remote {
             auth = psk                  # ピア側の認証方式として PSK を指定します。
             id = 3.3.XX.XX              # Alibaba Cloud 側の IPsec アドレス。Alibaba Cloud 側のトンネル 1 の LocalId と同じ値である必要があります。
          }
          children {
             vco_child1 {
                local_ts  = 10.0.0.0/16    # ローカル側の保護対象データフロー。
                remote_ts = 172.16.0.0/16    # Alibaba Cloud 側の保護対象データフロー。
                mode = tunnel
                rekey_time = 85500
                life_time = 86400        # トンネル 1 の SA 有効期間を指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定の SA 有効期間と同じ値である必要があります。
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024   # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、DH グループを指定します。Alibaba Cloud 側のトンネル 1 の IPsec 設定と同じ値である必要があります。group2 は modp1024 に対応します。
             }
          }
       }
    
    }
    
    secrets {
       ike-vco1 {
          id = 3.3.XX.XX               # Alibaba Cloud 側の VPN ゲートウェイのトンネル 1 のパブリック IP アドレス。
          secret = ChangeMe***            # トンネル 1 の事前共有鍵を指定します。Alibaba Cloud 側のトンネル 1 の事前共有鍵と同じ値である必要があります。
       }
    }
    
  4. strongSwan プロセスを再起動し、strongSwan 設定を再読み込みします。

    systemctl restart strongswan
    swanctl --load-all
  5. トンネルステータスを確認します。

    watch swanctl --list-sas 

    image

    出力には strongSwan デバイスと VPN ゲートウェイ間で IPsec-VPN 接続が確立されていることが表示されます。

5. 接続性のテスト

strongSwan デバイスと VPC 間の接続性をテストします。

strongSwan デバイスから、Alibaba Cloud VPC 内の ECS インスタンスに対して ping を実行します。応答パケットを受信できれば、接続が成功しています。

ping <VPC 内の ECS インスタンスの IP アドレス>