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

VPN Gateway:strongSwanデバイスの設定

最終更新日:Dec 12, 2024

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

strongSwanはオープンソースでIPsecベースのVPNソリューションで、構成が簡単で、主流のLinuxディストリビューションに展開できます。 strongSwanを使用して、Alibaba CloudとのIPsec-VPN接続を確立できます。

説明

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

シナリオ

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

image

サブネット

データセンター

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

  • strongSwanデバイス

    • ネットワークインターフェイスコントローラー (NIC) eth0: 10.0.0.1およびNATマップされたインターネット出口1: 1.1.XX.XX

    • 必要に応じて、 NIC eth1: 10.0.0.2およびNATマップされたインターネット出口2: 2.2.XX.XX

      説明

      NAT以外のシナリオの詳細については、NICにパブリックIPアドレスが割り当てられているstrongSwanデバイスを構成するにはどうすればよいですか?

      このトピックでは、シングル出力strongSwanデバイスとデュアル出力strongSwanデバイスの設定例を示します。 どちらのデバイスを使用しても、Alibaba CloudへのIPsec-VPN接続を確立できます。

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アドレス1: 3.3.XX.XX

    • IPsecアドレス2: 4.4.XX.XX

      説明

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

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での準備

strongSwanデバイスを設定する前に、Alibaba Cloud側でVPNゲートウェイの作成カスタマーゲートウェイの作成IPsec-VPN接続の作成VPNゲートウェイのルートの設定を実行します。 詳細については、「デュアルトンネルモードでVPCをデータセンターに接続する」をご参照ください。

Alibaba Cloud側の設定は、strongSwanデバイスのインターネットアクセス数によって異なります。

シングル出力

  1. 1つのインターネット出口のみが存在するため、1つのカスタマーゲートウェイを作成します。

  2. IPsec-VPN接続:

    1. 各トンネルのルーティングモードには、[保護データフロー] を選択します。

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

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

    2. 同じカスタマーゲートウェイを選択します。

デュアル出力

  1. 2つのインターネットアクセスが存在するため、2つのカスタマーゲートウェイを作成します。

  2. IPsec-VPN接続:

    1. 両方のトンネルに対して宛先ルーティングモードを選択します。

    2. 出口1にトンネル1、出口2にトンネル2を選択します。

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デバイスを再起動した後、コマンドを再度実行する必要があります。 強力なSwanデバイスのトラフィック転送を有効にする場合は、次の手順を実行します。

手順を展開するにはここをクリック

  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 {                            # The VPN configurations of IPsec-VPN Tunnel 1.
          version = 2                    # The IKE version, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. A value of 2 indicates IKEv2. 
          local_addrs=10.0.0.1       # The IP address of the local NIC.
          remote_addrs = 3.3.XX.XX     # Set the remote address of Tunnel 1 to the VPN gateway address of Tunnel 1 on Alibaba Cloud, which is IPsec Address 1. 
          dpd_delay = 10
          rekey_time = 84600             # The SA lifetime of Tunnel 1, which must be the same as that specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. 
          over_time = 1800               
          proposals = aes-sha1-modp1024  # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
          encap = yes
    
          local {
             auth = psk                  # Set the authentication algorithm of the data center to PSK. 
             id = 1.1.XX.XX                # The IP address of the local Internet egress. This value must be the same as RemoteId of Tunnel 1. 
          }
          remote {
             auth = psk                  # Set the authentication algorithm of the VPC to PSK. 
             id = 3.3.XX.XX                # IPsec Address 1 on the Alibaba Cloud side. This value must be the same as LocalId of Tunnel 1. 
          }
          children {
             vco_child1 {
                local_ts  = 10.0.0.0/16    # The local protected data flows. Enter the private CIDR block of the data center, which is 10.0.0.0/16. 
                remote_ts = 172.16.0.0/16  # The protected data flows on the Alibaba Cloud side. Enter the VPC CIDR block, which is 172.16.0.0/16. 
                mode = tunnel
                rekey_time = 85500
                life_time = 86400        # The SA lifetime of Tunnel 1, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. 
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024   # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
             }
          }
       }
      vco2 {                             # The VPN configurations of IPsec-VPN Tunnel 2.
          version = 2                    # The IKE version, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. A value of 2 indicates IKEv2. 
          local_addrs  = 10.0.0.1        # The IP address of the local NIC.
          remote_addrs = 4.4.XX.XX       # The tunnel address, which is IPsec Address 2. 
          dpd_delay = 10
          rekey_time = 84600             # The SA lifetime of Tunnel 2, which must be the same as that specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. 
          over_time = 1800               
          proposals = aes-sha1-modp1024  # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. 
          encap = yes
    
          local {
             auth = psk                  # Set the authentication algorithm of the data center to PSK. 
             id = 1.1.XX.XX              # The public IP address of the local Internet egress. This value must be the same as RemoteId of Tunnel 2. 
          }
          remote {
             auth = psk                  # Set the authentication algorithm of the VPC to PSK. 
             id = 4.4.XX.XX              # IPsec Address 2 on the Alibaba Cloud side. This value must be the same as LocalId of Tunnel 2. 
          }
          children {
             vco_child2 {
                local_ts  = 10.0.0.0/16      # The local protected data flows. Set this value to the CIDR block of the data center, which is 10.0.0.0/16. 
                remote_ts = 172.16.0.0/16    # The protected data flows on the Alibaba Cloud side. Enter the VPC CIDR block, which is 172.16.0.0/16. 
                mode = tunnel 
                rekey_time = 85500
                life_time = 86400        # The SA lifetime of Tunnel 2, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. 
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024     # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IPsec configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. 
             }
          }
       }
    }
    
    secrets {
       ike-vco1 {
          secret = ChangeMe***            # The PSK of Tunnel 1, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. 
       }
       ike-vco2 {
          secret = ChangeMe***            # The PSK of Tunnel 2, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. 
       }
    }
  4. strongSwanプロセスを再起動します。

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

    watch swanctl --list-sas 

    image

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

デュアル出力

重要

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

  1. IPsec Address 1からのアクセスがeth0を通過し、IPsec Address 2からのアクセスがeth1を通過するようにルートを設定します。

    ip route add 3.3.XX.XX via 10.0.0.253 dev eth0  #10.0.0.253 is the IP address of the private gateway.
    ip route add 4.4.XX.XX via 10.0.0.253 dev eth1

    次の2つのIPsecアドレスがpingできることを確認してください。

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

    ip link add ipsec0 type xfrm dev eth0 if_id 42 # Create an XFRM virtual network interface for Tunnel 1, with the interface ID 42 and the public interface eth0 as the underlying interface. 
    ip link add ipsec1 type xfrm dev eth1 if_id 43 # Create an XFRM virtual network interface for Tunnel 2, with the interface ID 43 and the public interface eth1 as the underlying interface. 
    ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1. 
    ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.

    重要
    • 仮想ネットワークインターフェイスを作成するための上記の設定は、一時的な設定です。 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 # Create an XFRM virtual network interface for Tunnel 1, with the interface ID 42 and the public interface eth0 as the underlying interface. 
      sudo ip link add ipsec1 type xfrm dev eth0 if_id 43 # Create an XFRM virtual network interface for Tunnel 2, with the interface ID 43 and the public interface eth0 as the underlying interface. 
      sudo ip link set ipsec0 up # Start the XFRM virtual network interface for Tunnel 1. 
      sudo ip link set ipsec1 up # Start the XFRM virtual network interface for Tunnel 2.

    3. 次のコマンドを実行して、スクリプトの絶対パスを表示します。

      sudo find / -name xfrm.sh
    4. /etc/rc.d/rc.localファイルに絶対パスを追加します。

      sudo vi /etc/rc.d/rc.local # Open the /etc/rc.d/rc.local file. 
      Press the I key to enter the edit mode.
      /root/xfrm.sh  # Add the absolute path to the /etc/rc.d/rc.local file. 
      Press the Esc key, enter :wq, and then press the Enter key to save the change.
    5. 次のコマンドを実行して、rc.localおよびxfrm.shファイルを実行可能にします。

      sudo chmod +x /etc/rc.d/rc.local
      sudo chmod +x /root/xfrm.sh
  3. 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 172.16.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route add 172.16.0.0/16 dev ipsec0 metric 100
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 172.16.0.0/16 dev ipsec0" >> /root/vpn_route.log;ip route del 172.16.0.0/16 dev ipsec0 metric 100
      fi

      スクリプトの目的: Tunnel 1のステータスがUPの場合、Tunnel 1のXFRM仮想ネットワークインターフェイスを介して、データセンターからCIDRブロックが172.16.0.0/16のVPCにトラフィックを送信するルートを追加します。 さらに、このルートのメトリック値を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 172.16.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route add 172.16.0.0/16 dev ipsec1 metric 101
      elif [ x"$PLUTO_VERB" == "xdown-client" ]; then
      	echo "ip route del 172.16.0.0/16 dev ipsec1" >> /root/vpn_route.log;ip route del 172.16.0.0/16 dev ipsec1 metric 101
      fi

      スクリプトの目的: Tunnel 2のステータスがUPの場合、Tunnel 2のXFRM仮想ネットワークインターフェイスを介して、データセンターからCIDRブロックが172.16.0.0/16のVPCにトラフィックを送信するルートを追加します。 さらに、このルートのメトリック値を101に設定して、このルートに、トンネル1のXFRM仮想ネットワークインターフェイスを指すルートよりも低い優先度を割り当てます。 トンネル2のステータスがDOWNの場合、ルートを撤回します。

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

      sudo chmod +x /root/connect_1.sh
      sudo chmod +x /root/connect_2.sh
  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 {                            # The VPN configurations of IPsec-VPN Tunnel 1.
            version = 2                    # The IKE version, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. A value of 2 indicates IKEv2. 
            local_addrs  = 10.0.0.1        # The IP address of the first local NIC.
            remote_addrs = 3.3.XX.XX     # Set the remote address of Tunnel 1 to the VPN gateway address of Tunnel 1 on Alibaba Cloud, which is IPsec Address 1. 
            dpd_delay = 10
            rekey_time = 84600             # The SA lifetime of Tunnel 1, which must be the same as that specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. 
            over_time = 1800               
            proposals = aes-sha1-modp1024  # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
            encap = yes
      
            local {
               auth = psk                  # Set the authentication algorithm of the data center to PSK. 
               id = 1.1.XX.XX              # The public IP address of the first local egress. This value must be the same as RemoteId of Tunnel 1. 
            }
            remote {
               auth = psk                  # Set the authentication algorithm of the VPC to PSK. 
               id = 3.3.XX.XX              # IPsec Address 1 on the Alibaba Cloud side. This value must be the same as LocalId of Tunnel 1. 
            }
            children {
               vco_child1 {
                  local_ts  = 0.0.0.0/0    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. 
                  remote_ts = 0.0.0.0/0    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. 
                  mode = tunnel
                  rekey_time = 85500
                  life_time = 86400        # The SA lifetime of Tunnel 1, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. 
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024   # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
      
                  if_id_out = 42           # Specify that the XFRM virtual network interface of Tunnel 1 is used as the egress port and ingress port of Tunnel 1. 
                  if_id_in = 42
                  updown = /root/connect_1.sh         # Execute the /root/connect_1.sh script to configure routing based on the UP/DOWN status of Tunnel 1. 
               }
            }
         }
        vco2 {                             # The VPN configurations of IPsec-VPN Tunnel 2.
            version = 2                    # The IKE version, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. A value of 2 indicates IKEv2. 
            local_addrs  = 10.0.0.2        # The IP address of the second local NIC. 
            remote_addrs = 4.4.XX.XX     # Set the remote address of Tunnel 2 to the VPN gateway address of Tunnel 2 on Alibaba Cloud, which is IPsec address 2. 
            dpd_delay = 10
            rekey_time = 84600             # The SA lifetime of Tunnel 2, which must be the same as that specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. 
            over_time = 1800               # 
            proposals = aes-sha1-modp1024  # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IKE configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. 
            encap = yes
      
            local {
               auth = psk                  # Set the authentication algorithm of the data center to PSK. 
               id = 2.2.XX.XX              # The public IP address of the second local egress. This value must be the same as RemoteId of Tunnel 2. 
            }
            remote {
               auth = psk                  # Set the authentication algorithm of the VPC to PSK. 
               id = 4.4.XX.XX              # IPsec Address 2 on the Alibaba Cloud side. This value must be the same as LocalId of Tunnel 2. 
            }
            children {
               vco_child2 {
                  local_ts  = 0.0.0.0/0    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0.
                  remote_ts = 0.0.0.0/0    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0.
                  mode = tunnel 
                  rekey_time = 85500
                  life_time = 86400        # The SA lifetime of Tunnel 2, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. 
                  dpd_action = restart
                  start_action = start
                  close_action = start
                  esp_proposals = aes-sha1-modp1024     # The encryption algorithm, authentication algorithm, and DH group of Tunnel 2, which must be the same as those specified in the IPsec configurations of Tunnel 2 on Alibaba Cloud. A value of group2 indicates modp1024. 
                  if_id_out = 43           # Specify that the XFRM virtual network interface of Tunnel 2 is used as the egress port and ingress port of Tunnel 2. 
                  if_id_in = 43
                  updown = /root/connect_2.sh           # Execute the /root/connect_2.sh script to configure routing based on the UP/DOWN status of Tunnel 2. 
               }
            }
         }
      }
      
      secrets {
         ike-vco1 {
            secret = ChangeMe***            # The PSK of Tunnel 1, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. 
         }
         ike-vco2 {
            secret = ChangeMe***            # The PSK of Tunnel 2, which must be the same as that configured for Tunnel 2 on Alibaba Cloud. 
         }
      }
  5. strongSwanプロセスを再起動します。

    vi /etc/strongswan/swanctl/swanctl.conf
  6. ルートを表示

    route -n

    image

  7. トンネルのステータスを確認します。

    watch swanctl --list-sas

    image図に示されるように、IPsec − VPN接続は、ストロングスワン装置とVPNゲートウェイとの間に確立される。

5. 接続性と高可用性のテスト

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

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

    ping <The IP address of an ECS instance in the VPC>
  2. IPsec-VPN接続の高可用性をテストします。

    1. 接続が有効になったら、アクティブなトンネルを閉じます。

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

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

よくある質問

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

はい。

IKEv1を使用するには、/etc/strongswan/swanctl/swanctl.confファイルの設定時にversion = 1を指定します。

保護されたデータフローを指定する方法?

保護されたデータフローを指定するには、/etc/strongswan/swanctl/swanctl.confファイルを設定するときに、次のコードブロックの説明に従ってCIDRブロックを追加します。 保護されたデータフローがAlibaba Cloud側のIPsec-VPN接続に指定されていることを確認します。

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

children {
         vco_child1 {
            local_ts  = 192.168.20.0/24,192.168.50.0/24    # The CIDR block of the data center. 
            remote_ts = 10.0.0.0/16    # The CIDR block of the VPC. 
         }
}

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

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

connections {
   vco1 {                            
      local_addrs  = 1.1.XX.XX     # The public IP address assigned to the NIC of the strongSwan device.
   }
}

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

重要

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

クリックして展開

単一のトンネルを使用するようにFortiGateファイアウォールを設定する

シナリオ

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

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

    • 交渉モード: メイン

    • 暗号化アルゴリズム: 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接続を作成するときは、ルーティングモードを保護データフローに設定します。

  • ローカル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デバイスを再起動した後、コマンドを再度実行する必要があります。 強力なSwanデバイスのトラフィック転送を有効にする場合は、次の手順を実行します。

手順を展開するにはここをクリック

  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 {                            # The VPN configurations of IPsec-VPN Tunnel 1.
          version = 2                    # The IKE version, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. A value of 2 indicates IKEv2. 
          local_addrs  = 10.0.0.1        # The IP address of the local NIC.
          remote_addrs = 3.3.XX.XX     # Set the remote address of Tunnel 1 to the VPN gateway address of Tunnel 1 on Alibaba Cloud, which is IPsec Address 1. 
          dpd_delay = 10
          rekey_time = 84600             # The SA lifetime of Tunnel 1, which must be the same as that specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. 
          over_time = 1800               
          proposals = aes-sha1-modp1024  # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IKE configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
          encap = yes
    
          local {
             auth = psk                  # Set the authentication algorithm of the data center to PSK. 
             id = 1.1.XX.XX              # The IP address of the Internet egress. This value must be the same as RemoteId of Tunnel 1. 
          }
          remote {
             auth = psk                  # Set the authentication algorithm of the VPC to PSK. 
             id = 3.3.XX.XX              # The IPsec address on the Alibaba Cloud side. This value must be the same as LocalId of Tunnel 1. 
          }
          children {
             vco_child1 {
                local_ts  = 10.0.0.0/16    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. 
                remote_ts = 172.16.0.0/16    # Specify that the CIDR block of the protected data flows for the destination-based route mode on Alibaba Cloud is 0.0.0.0/0. 
                mode = tunnel
                rekey_time = 85500
                life_time = 86400        # The SA lifetime of Tunnel 1, which must be the same as that specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. 
                dpd_action = restart
                start_action = start
                close_action = start
                esp_proposals = aes-sha1-modp1024   # The encryption algorithm, authentication algorithm, and DH group of Tunnel 1, which must be the same as those specified in the IPsec configurations of Tunnel 1 on Alibaba Cloud. A value of group2 indicates modp1024. 
             }
          }
       }
    
    }
    
    secrets {
       ike-vco1 {
          secret = ChangeMe***            # The PSK of Tunnel 1, which must be the same as that configured for Tunnel 1 on Alibaba Cloud. 
       }
    }
    
  4. strongSwanプロセスを再起動します。

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

    watch swanctl --list-sas 

    image

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

5. 接続のテストTest the connectivity

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

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

ping <The IP address of an ECS instance in the VPC>