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

VPN Gateway:strongSwan デバイスを構成する

最終更新日:Jun 06, 2025

このトピックでは、strongSwan デバイスを Alibaba Cloud 上の Elastic Compute Service (ECS) インスタンスに接続する方法について説明します。

strongSwan は、構成が容易で、主要な Linux ディストリビューションにデプロイできる、オープンソースの IPsec ベースの VPN ソリューションです。 strongSwan を使用して、Alibaba Cloud との IPsec 接続を確立できます。

説明

この例では、デュアルトンネルモードの VPN ゲートウェイを使用して、IPsec 接続を確立します。 VPN ゲートウェイがシングルトンネルモードのみをサポートしている場合は、このトピックの「シングルトンネルを使用するように strongSwan デバイスを構成する」セクションを参照してください。

シナリオ

次のシナリオは例です。オンプレミスゲートウェイで strongSwan を構成して、Alibaba Cloud へのデュアルトンネル IPsec 接続を確立できます。

image

サブネット化

データセンター側

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

  • strongSwan デバイス

Alibaba Cloud 側

  • VPC CIDR ブロック: 192.168.0.0/16

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

    • vSwitch 2 CIDR ブロック: 192.168.10.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 接続を確立するように 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 構成

2 つのトンネルは同じ構成を使用します。 Alibaba Cloud と strongSwan デバイスの VPN 構成は、各トンネルで同じである必要があります。

  • 事前共有鍵: ChangeMe***

  • IKE 構成

    • IKE バージョン: ikev2

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

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

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA ライフタイム (秒): 86400

  • IPsec 構成:

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

    • 認証アルゴリズム: sha1

    • DH グループ: group2

    • SA ライフタイム (秒): 86400

Alibaba Cloud での準備

インターネット出口の数とルーティング方法に基づいて、Alibaba Cloud での構成を完了します。

2 つの出口と BGP 動的ルーティング

VPC をデュアルトンネルモードでデータセンターに接続し、BGP 動的ルーティングを有効にする注:カスタマーゲートウェイを作成するIPsec 接続を作成するヒント:を参照して、「VPN ゲートウェイの作成」、「カスタマーゲートウェイの作成」、「IPsec 接続の作成」、および「BGP 自動ルートアドバタイズメントの有効化」の手順を完了します。

  1. strongSwan デバイスには 2 つのインターネット出口 IP アドレスがあります。したがって、2 つのカスタマーゲートウェイを作成する必要があります。

  2. IPsec 接続を作成するときは、出口 1 にはトンネル 1 を、出口 2 にはトンネル 2 を選択します。この例では、宛先ルーティングモードが選択されています。

2 つの出口と静的ルーティング

VPC をデュアルトンネルモードでデータセンターに接続する/wp-json/wp/v2/commentsヒント:"Hello, World!"VPN ゲートウェイルーティングを設定するを参照して、「VPN ゲートウェイの作成」、「カスタマーゲートウェイの作成」、「IPsec 接続の作成」、および「VPN ゲートウェイルーティングの構成」の手順を完了します。

  1. strongSwan デバイスには 2 つのインターネット出口 IP アドレスがあります。したがって、2 つのカスタマーゲートウェイを作成する必要があります。

  2. IPsec 接続を作成するときは、出口 1 にはトンネル 1 を、出口 2 にはトンネル 2 を選択します。この例では、宛先ルーティングモードが選択されています。

1 つの出口と BGP 動的ルーティング

デュアルトンネルモードで VPC をデータセンターに接続し、BGP 動的ルーティングを有効にするを参照して、[VPN ゲートウェイの作成][カスタマーゲートウェイの作成][IPsec 接続の作成][BGP 自動ルート広告の有効化] の手順を完了します。

  1. strongSwan デバイスには 1 つのインターネット出口 IP アドレスしかありません。したがって、1 つのカスタマーゲートウェイを作成するだけで済みます。

  2. IPsec 接続を作成するときは、同じカスタマーゲートウェイの 2 つのトンネルを選択します。この例では、宛先ルーティングモードが選択されています。

1 つの出口と静的ルーティング

VPC をデュアルトンネルモードでデータセンターに接続するVPN ゲートウェイを作成するカスタマーゲートウェイを作成するIPsec 接続を作成するVPN ゲートウェイルーティングを設定するを参照して、「VPN ゲートウェイの作成」、「カスタマーゲートウェイの作成」、「IPsec 接続の作成」、および「VPN ゲートウェイルーティングの構成」の手順を完了します。

  1. strongSwan デバイスには 1 つのインターネット出口 IP アドレスしかありません。したがって、1 つのカスタマーゲートウェイを作成するだけで済みます。

  2. IPsec 接続を作成するときは、保護されたデータフローを構成します。同じカスタマーゲートウェイの 2 つのトンネルを選択します。

    • ローカル CIDR ブロックには、VPC の CIDR ブロック (192.168.0.0/16) を入力します。

    • ピア CIDR ブロックには、データセンターの CIDR ブロック (172.16.0.0/16) を入力します。

説明

IPsec 接続が転送ルーターに関連付けられているシナリオでは、この方法は推奨されません。 BGP 動的ルーティングを使用することをお勧めします。

[strongSwan デバイス]を構成する

説明

次の例では、CentOS Stream 9 64 ビットを実行する strongSwan デバイスを使用します。他のオペレーティングシステムの詳細については、strongSwan ドキュメントを参照してください。

1. 許可ファイアウォールポリシーを構成する

UDP ポート 500 および UDP ポート 4500 で ESP (IP プロトコル 50) の許可ポリシーを構成します。

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
重要

上記のコマンドは一時的なコマンドです。 strongSwan デバイスを再起動した後、コマンドを再度実行する必要があります。 strongSwan デバイスのトラフィック転送を永続的に有効にするには、次の手順を実行します。

ここをクリックして手順を展開する

  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-5.9.10 -y

4. トンネルを構成する

2 つの出口 - 静的ルーティングと BGP 動的ルーティング

重要

デュアル出口は XFRM インターフェースに基づいています。 XFRM インターフェースを使用するには、strongSwan バージョンが 5.8.0 以後、Linux カーネルバージョンが 4.19 以後、iproute2 バージョンが 5.1.0 以後である必要があり、カーネルは XFRM モジュールをサポートしている必要があります。 lsmod | grep xfrm が表示されない場合、XFRM インターフェースはサポートされていません。詳細については、Linux 上の XFRM インターフェースを参照してください。

  1. 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.20.253 は eth1 のプライベートゲートウェイアドレスです。

    次の 2 つの IPsec アドレスに ping できることを確認します。

    ping 47.XX.XX.151
    ping 47.XX.XX.87
  2. IPsec トンネルを確立するための 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. 詳細については、「WordPress REST API ハンドブック」をご参照ください。

      重要

      静的ルートを使用する予定の場合は、構成ファイルで updown = /root/connect_1.sh コマンドと updown = /root/connect_2.sh コマンドを有効にします。

      connections {
         vco1 {                            // IPsec-VPN トンネル 1 の VPN 構成。
            version = 2                    // IKE バージョン。Alibaba Cloud でトンネル 1 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80       // 最初のローカル NIC の IP アドレス。
            remote_addrs = 47.XX.XX.151       // トンネル 1 のリモートアドレスを、Alibaba Cloud 上のトンネル 1 の VPN ゲートウェイアドレス(IPsec アドレス 1)に設定します。
            dpd_delay = 10
            rekey_time = 84600             // トンネル 1 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。
            over_time = 1800               
            proposals = aes-sha1-modp1024  // トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、および DH グループ。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。group2 の値は modp1024 を示します。
            encap = yes
      
            local {
               auth = psk                  // データセンターの認証アルゴリズムを PSK に設定します。
               id = 120.XX.XX.202             // 最初のローカル出口のパブリック IP アドレス。この値は、トンネル 1 の RemoteId と同じである必要があります。
            }
            remote {
               auth = psk                  // VPC の認証アルゴリズムを PSK に設定します。
               id = 47.XX.XX.151             // Alibaba Cloud 側の IPsec アドレス 1。この値は、トンネル 1 の LocalId と同じである必要があります。
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    // Alibaba Cloud 上の宛先ベースルートモードの保護対象データフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  remote_ts = 0.0.0.0/0    // Alibaba Cloud 上の宛先ベースルートモードの保護対象データフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        // トンネル 1 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IPsec 構成で指定されているものと同じである必要があります。
                  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         // /root/connect_1.sh スクリプトを実行して、トンネル 1 の UP/DOWN ステータスに基づいてルーティングを構成します。このパラメーターは、静的ルーティングを使用する場合にのみ必要です。
               }
            }
         }
        vco2 {                             // IPsec-VPN トンネル 2 の VPN 構成。
            version = 2                    // IKE バージョン。Alibaba Cloud でトンネル 2 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
            local_addrs  = 172.16.21.248        // 2 番目のローカル NIC の IP アドレス。
            remote_addrs = 47.XX.XX.127       // トンネル 2 のリモートアドレスを、Alibaba Cloud 上のトンネル 2 の VPN ゲートウェイアドレス(IPsec アドレス 2)に設定します。
            dpd_delay = 10
            rekey_time = 84600             // トンネル 2 の SA ライフサイクル。Alibaba Cloud 上のトンネル 2 の IKE 構成で指定されているものと同じである必要があります。
            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.87              // 2 番目のローカル出口のパブリック IP アドレス。この値は、トンネル 2 の RemoteId と同じである必要があります。
            }
            remote {
               auth = psk                  // VPC の認証アルゴリズムを PSK に設定します。
               id = 47.XX.XX.127             // Alibaba Cloud 側の IPsec アドレス 2。この値は、トンネル 2 の LocalId と同じである必要があります。
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    // Alibaba Cloud 上の宛先ベースルートモードの保護対象データフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  remote_ts = 0.0.0.0/0    // Alibaba Cloud 上の宛先ベースルートモードの保護対象データフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        // トンネル 2 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IPsec 構成で指定されているものと同じである必要があります。
                  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           // /root/connect_2.sh スクリプトを実行して、トンネル 2 の UP/DOWN ステータスに基づいてルーティングを構成します。このパラメーターは、静的ルーティングを使用する場合にのみ必要です。
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            secret = ChangeMe***            // トンネル 1 の PSK。Alibaba Cloud でトンネル 1 に構成されているものと同じである必要があります。
         }
         ike-vco2 {
            secret = ChangeMe***            // トンネル 2 の PSK。Alibaba Cloud でトンネル 2 に構成されているものと同じである必要があります。
         }
      }
  4. WordPress の使い方については、WordPress の使い方 をご覧ください。

    sudo systemctl restart strongswan
    swanctl --load-all
    // すべての swanctl セキュリティアソシエーションを表示します。
    watch swanctl --list-sas

    ヒント: ブラウザの開発者ツールを使用して、REST API のレスポンスを確認できます。

    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. frr をインストールします。

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

      i を押して、編集モードに入ります。yesbgpd パラメーターの値を変更して、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 の場合、CIDR ブロックが 192.168.0.0/16 の VPC にデータセンターからトラフィックを送信するルートを、トンネル 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 の場合、CIDR ブロックが 192.168.0.0/16 の VPC にデータセンターからトラフィックを送信するルートを、トンネル 2 の XFRM 仮想ネットワークインターフェイス経由で追加します。さらに、このルートのメトリック値を 101 に設定して、トンネル 1 の XFRM 仮想ネットワークインターフェイスを指すルートよりも低い優先順位を割り当てます。トンネル 2 のステータスが DOWN の場合は、ルートを撤回します。

    5. 次のコマンドを実行して、スクリプトを実行可能にします。

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

      sudo systemctl restart strongswan
    7. 次のコマンドを実行して、構成ファイルの変更が有効になっているかどうかを確認します。

      route -n

      静态路由

1 つの出口 - BGP 動的ルーティング

重要

BGP 動的ルーティングは XFRM インターフェースに基づいています。XFRM インターフェースを使用するには、strongSwan のバージョンが 5.8.0 以降、Linux カーネルのバージョンが 4.19 以降、iproute2 のバージョンが 5.1.0 以降である必要があり、カーネルが XFRM モジュールをサポートしている必要があります。lsmod | grep xfrm が表示されない場合、XFRM インターフェースはサポートされていません。詳細については、「Linux 上の XFRM インターフェース」をご参照ください。

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

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

    重要

    仮想ネットワークインターフェースを作成するための前述の構成は一時的な構成です。 strongSwan デバイスを再起動した後、構成を再度追加し、sudo systemctl restart strongswan;swanctl --load-all コマンドを実行する必要があります。コマンドには root 権限が必要です。 strongSwan デバイスの再起動後に仮想ネットワークインターフェースを自動的に作成するためにシステム起動時に実行されるスクリプトを構成する場合は、次の手順を実行します。

    ヒント: ブラウザの開発者ツールを使用して、REST API のレスポンスを確認できます。

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

      vi xfrm.sh
    2. 次の構成を追加して保存します。

      sudo ip link add ipsec0 type xfrm dev eth0 if_id 42 # インターフェース ID 42、パブリックインターフェース eth0 を基盤となるインターフェースとして、トンネル 1 用の XFRM 仮想ネットワークインターフェースを作成します。
      sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # インターフェース ID 43、パブリックインターフェース eth0 を基盤となるインターフェースとして、トンネル 2 用の XFRM 仮想ネットワークインターフェースを作成します。
      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. 例に基づいて次の構成を追加して保存します。

      connections {
         vco1 {                            # IPsec-VPN トンネル 1 の VPN 構成。
            version = 2                    # IKE バージョン。Alibaba Cloud 上のトンネル 1 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80    # eth0 のプライベート IP アドレス。
            remote_addrs = 47.XX.XX.151    # トンネル 1 のリモートアドレスを、Alibaba Cloud 上のトンネル 1 の VPN ゲートウェイアドレス(IPsec アドレス 1)に設定します。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 1 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。
            over_time = 1800               
            proposals = aes-sha1-modp1024  # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、および DH グループ。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。値 group2 は modp1024 を示します。
            encap = yes
      
            local {
               auth = psk                  # データセンターの認証アルゴリズムを PSK に設定します。
               id = 120.XX.XX.202          # eth0 のインターネット出口の IP アドレス。この値は、トンネル 1 の RemoteId と同じである必要があります。
            }
            remote {
               auth = psk                  # VPC の認証アルゴリズムを PSK に設定します。
               id = 47.XX.XX.151           # Alibaba Cloud 側の IPsec アドレス 1。この値は、トンネル 1 の LocalId と同じである必要があります。
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 上の宛先ベースのルートモードの保護されたデータフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 上の宛先ベースのルートモードの保護されたデータフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        # トンネル 1 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IPsec 構成で指定されているものと同じである必要があります。
                  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 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
            local_addrs  = 172.16.20.80    # eth0 のプライベート IP アドレス。
            remote_addrs = 47.XX.XX.87     # トンネル 2 のリモートアドレスを、Alibaba Cloud 上のトンネル 2 の VPN ゲートウェイアドレス(IPsec アドレス 2)に設定します。
            dpd_delay = 10
            rekey_time = 84600             # トンネル 2 の SA ライフサイクル。Alibaba Cloud 上のトンネル 2 の IKE 構成で指定されているものと同じである必要があります。
            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 アドレス。この値は、トンネル 2 の RemoteId と同じである必要があります。
            }
            remote {
               auth = psk                  # VPC の認証アルゴリズムを PSK に設定します。
               id = 47.XX.XX.87            # Alibaba Cloud 側の IPsec アドレス 2。この値は、トンネル 2 の LocalId と同じである必要があります。
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    # Alibaba Cloud 上の宛先ベースのルートモードの保護されたデータフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  remote_ts = 0.0.0.0/0    # Alibaba Cloud 上の宛先ベースのルートモードの保護されたデータフローの CIDR ブロックを 0.0.0.0/0 に指定します。
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        # トンネル 2 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IPsec 構成で指定されているものと同じである必要があります。
                  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 {
            secret = ChangeMe***            # トンネル 1 の PSK。Alibaba Cloud 上のトンネル 1 に構成されているものと同じである必要があります。
         }
         ike-vco2 {
            secret = ChangeMe***            # トンネル 2 の PSK。Alibaba Cloud 上のトンネル 2 に構成されているものと同じである必要があります。
         }
      }
  3. strongSwan プロセスを再起動し、トンネル [ステータス] を表示します。

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

    次の図では、strongSwan デバイスと VPN ゲートウェイは 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. frr をインストールします。

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

      iヒント: を押して、[編集モード] に入ります。 パラメーターの値を 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路由

1 つの出口 - 静的ルーティングと BGP 動的ルーティング

重要

このメソッドを使用し、Alibaba Cloud 上のアクティブなトンネルがダウンした場合、トラフィックはスタンバイ トンネルに自動的にフェイルオーバーされます。これにより、サービス中断が発生する可能性があります。 /proc/net/xfrm_stat ファイル内の XfrmInTmplMismatch の値を確認することで、トラフィックがスタンバイ トンネルにフェイルオーバーされたかどうかを判断できます。 また、/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 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
          local_addrs  = 172.16.20.80      # eth0 のプライベート IP アドレス。
          remote_addrs = 47.XX.XX.151      # トンネル 1 のリモートアドレスを、Alibaba Cloud 上のトンネル 1 の VPN ゲートウェイアドレス(IPsec アドレス 1)に設定します。
          dpd_delay = 10
          rekey_time = 84600             # トンネル 1 の SA ライフタイム。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。
          over_time = 1800               
          proposals = aes-sha1-modp1024  # トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、および DH グループ。Alibaba Cloud 上のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。値 group2 は modp1024 を示します。
          encap = yes
    
          local {
             auth = psk                   # データセンターの認証アルゴリズムを PSK に設定します。
             id = 120.XX.XX.202            # ローカルインターネット出口の IP アドレス。この値は、トンネル 1 の RemoteId と同じである必要があります。
          }
          remote {
             auth = psk                  # VPC の認証アルゴリズムを PSK に設定します。
             id = 120.XX.XX.202            # Alibaba Cloud 側の IPsec アドレス 1。この値は、トンネル 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 構成で指定されているものと同じである必要があります。
                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 の優先度。トンネル 1 を優先します。
             }
          }
       }
      vco2 {                             # IPsec-VPN トンネル 2 の VPN 構成。
          version = 2                    # IKE バージョン。Alibaba Cloud 上のトンネル 2 に構成されているものと同じである必要があります。値 2 は IKEv2 を示します。
          local_addrs  = 172.16.20.80    # eth0 のプライベート IP アドレス。
          remote_addrs = 47.XX.XX.87     # トンネル 2 のリモートアドレスを、Alibaba Cloud 上のトンネル 2 の VPN ゲートウェイアドレス(IPsec アドレス 2)に設定します。
          dpd_delay = 10
          rekey_time = 84600             # トンネル 2 の SA ライフタイム。Alibaba Cloud 上のトンネル 2 の IKE 構成で指定されているものと同じである必要があります。
          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 アドレス。この値は、トンネル 2 の RemoteId と同じである必要があります。
          }
          remote {
             auth = psk                  # VPC の認証アルゴリズムを PSK に設定します。
             id = 47.XX.XX.87            # Alibaba Cloud 側の IPsec アドレス 2。この値は、トンネル 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 構成で指定されているものと同じである必要があります。
                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 {
          secret = ChangeMe***            # トンネル 1 の PSK。Alibaba Cloud 上のトンネル 1 に構成されているものと同じである必要があります。
       }
       ike-vco2 {
          secret = ChangeMe***            # トンネル 2 の PSK。Alibaba Cloud 上のトンネル 2 に構成されているものと同じである必要があります。
       }
    }
  4. strongSwan プロセスを再起動し、トンネルステータスを表示します。

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

    次の図では、strongSwan デバイスと VPN ゲートウェイが IPsec 接続を介して接続されています。データセンターと VPC は通信できます。

    单出口

5. 接続性と高可用性をテストする

  1. 詳細については、「投稿の更新」をご参照ください。

    データセンターのクライアントから VPC 内の ECS インスタンスに ping を実行した後にエコー応答パケットが返された場合、接続は確立されています。

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

    1. 接続が確立されている場合は、アクティブなトンネルを閉じます。

      アクティブなトンネルの事前共有鍵を変更することで、アクティブなトンネルを閉じることができます。トンネルの両側で異なる事前共有鍵を使用すると、アクティブなトンネルは閉じられます。

    2. アクティブなトンネルが閉じられた後、ping コマンドを実行して接続性を確認できます。ping を ECS インスタンスに実行した後にエコー応答パケットが返された場合、これはアクティブなトンネルがダウンした後にスタンバイ トンネルが引き継いだことを示します。

よくある質問

IPsec 接続が転送ルータに関連付けられている場合、strongSwan デバイスをどのように構成すればよいですか?

前の手順を参照して、strongSwan デバイスを構成します。 BGP 動的ルーティングを使用することをお勧めします。 strongSwan デバイスで VPC から学習したルートを表示できます。 IPsec 接続の 2 つのトンネルは、ECMP ルーティングに使用されます。 等价路由

strongSwan を使用して作成された IPsec 接続で IKEv1 はサポートされていますか?

はい。VPN ゲートウェイは、VPC の異なるゾーンにデプロイされている Elastic Compute Service (ECS) インスタンスのトラフィックを転送できます。

IKEv1 を使用するには、/etc/strongswan/swanctl/swanctl.conf ファイルを構成するときに version = 1 を指定します。

保護されたデータフローを指定するにはどうすればよいですか?

保護されたデータフローを指定するには、/etc/strongswan/swanctl/swanctl.conf ファイルを構成するときに、次のコードブロックに示すように CIDR ブロックを追加します。 Alibaba Cloud 側の IPsec 接続に対して保護されたデータフローが指定されていることを確認してください。

データセンター側または Alibaba Cloud 側で複数の CIDR ブロックを指定する必要がある場合、strongSwan デバイスと Alibaba Cloud 側の IPsec 接続は IKEv2 を使用する必要があります。

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

NIC にパブリック IP アドレスが割り当てられている strongSwan デバイスを構成するにはどうすればよいですか?

このような非 NAT シナリオでは、strongSwan デバイスで表示される IP アドレスはパブリック IP アドレスです。 /etc/strongswan/swanctl/swanctl.conf ファイルの各トンネルの local_addrs フィールドを対応するパブリック IP アドレスに変更する必要があります。

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

シングルトンネルモードを構成するにはどうすればよいですか?

重要

VPN ゲートウェイがシングルトンネル IPsec 接続のみをサポートしている場合は、VPN ゲートウェイをスペックアップしてデュアルトンネルモードを有効にすることをお勧めします。 デュアルトンネルモードの IPsec 接続は、ゾーン間のディザスタリカバリをサポートしています。 これにより、ネットワークの高可用性が効果的に向上します。 詳細については、「VPN ゲートウェイをスペックアップしてデュアルトンネルモードを有効にする」をご参照ください。

クリックして展開

FortiGate ファイアウォールを構成して単一トンネルを使用する

シナリオ

次のシナリオは例です。 オンプレミスゲートウェイで strongSwan を構成して、Alibaba Cloud へのデュアルトンネル IPsec 接続を確立できます。

image

サブネット化

データセンター側

Alibaba Cloud 側

  • VPC CIDR ブロック: 172.16.0.0/16

    • vSwitch1 CIDR ブロック: 172.16.1.0/24

    • vSwitch2 CIDR ブロック: 172.16.2.0/24

  • VPN ゲートウェイ

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

      説明

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

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 ゲートウェイルートの構成。 詳細については、「シングルトンネルモードで VPC をデータセンターに接続する」をご参照ください。

IPsec 接続を作成するときは、ルーティングモードを 保護されたデータフロー に設定します。

  • ローカル CIDR ブロックには、VPC の CIDR ブロック (172.16.0.0/16) を入力します。

  • ピア CIDR ブロックには、データセンターの CIDR ブロック (10.0.0.0/16) を入力します。

strongSwan デバイスの構成

説明

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

1. 許可ファイアウォールポリシーを構成する

UDP ポート 500 および UDP ポート 4500 で ESP (IP プロトコル 50) の許可ポリシーを構成します。

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
重要

上記のコマンドは一時的なコマンドです。 strongSwan デバイスを再起動した後、コマンドを再度実行する必要があります。 strongSwan デバイスのトラフィック転送を永続的に有効にする場合は、次の手順を実行します。

ここをクリックしてプロシージャを展開する

  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-5.9.10 -y

4. トンネルを構成する

strongSwan で保護されたデータフローに基づいて構成を開始します。

  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 トンネル 1 の VPN 構成。
          version = 2                    // IKE バージョン。Alibaba Cloud のトンネル 1 で構成されているものと同じである必要があります。 値 2 は IKEv2 を示します。
          local_addrs  = 10.0.0.1        // ローカル NIC の IP アドレス。
          remote_addrs = 3.3.XX.XX     // トンネル 1 のリモートアドレスを、Alibaba Cloud のトンネル 1 の VPN ゲートウェイアドレス (IPsec アドレス 1) に設定します。
          dpd_delay = 10
          rekey_time = 84600             // トンネル 1 の SA ライフタイム。Alibaba Cloud のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。
          over_time = 1800               
          proposals = aes-sha1-modp1024  // トンネル 1 の暗号化アルゴリズム、認証アルゴリズム、および DH グループ。Alibaba Cloud のトンネル 1 の IKE 構成で指定されているものと同じである必要があります。 値 group2 は modp1024 を示します。
          encap = yes
    
          local {
             auth = psk                  // データセンターの認証アルゴリズムを PSK に設定します。
             id = 1.1.XX.XX              // インターネット出力の IP アドレス。 この値は、トンネル 1 の RemoteId と同じである必要があります。
          }
          remote {
             auth = psk                  // VPC の認証アルゴリズムを PSK に設定します。
             id = 3.3.XX.XX              // Alibaba Cloud 側の IPsec アドレス。 この値は、トンネル 1 の LocalId と同じである必要があります。
          }
          children {
             vco_child1 {
                local_ts  = 10.0.0.0/16    // Alibaba Cloud の宛先ベースルートモードの保護されたデータフローの CIDR ブロックが 0.0.0.0/0 であることを指定します。
                remote_ts = 172.16.0.0/16    // Alibaba Cloud の宛先ベースルートモードの保護されたデータフローの CIDR ブロックが 0.0.0.0/0 であることを指定します。
                mode = tunnel
                rekey_time = 85500
                life_time = 86400        // トンネル 1 の SA ライフタイム。Alibaba Cloud のトンネル 1 の IPsec 構成で指定されているものと同じである必要があります。
                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 {
          secret = ChangeMe***            // トンネル 1 の PSK。Alibaba Cloud のトンネル 1 で構成されているものと同じである必要があります。
       }
    }
    
  4. strongSwan プロセスを再起動します。

    systemctl restart strongswan
  5. トンネルの状態を確認します。

    watch swanctl --list-sas 

    image

    図に示すように、strongSwan デバイスと VPN ゲートウェイの間に IPsec 接続が確立されます。

5. 接続性をテストする

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

strongSwan デバイスから VPC 内の ECS インスタンスに ping を実行した後にエコー応答パケットが返された場合、接続は確立されています。

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