DebianとUbuntuでStrongswanを使用してIPsecベースのVPNを設定する方法


strongSwanは、Linux、FreeBSD、OS X、Windows、Android、およびiOSで実行される、オープンソースのクロスプラットフォームでフル機能の広く使用されているIPsecベースのVPN(仮想プライベートネットワーク)実装です。これは主に、インターネットキーエクスチェンジプロトコル(IKEv1およびIKEv2)をサポートして、2つのピア間にセキュリティアソシエーション(SA)を確立するキーイングデーモンです。

この記事では、UbuntuおよびDebianサーバーでstrongSwanを使用してサイト間IPSecVPNゲートウェイをセットアップする方法について説明します。サイト間とは、各セキュリティゲートウェイの背後にサブネットがあることを意味します。さらに、ピアは事前共有キー(PSK)を使用して相互に認証します。

次のIPを実際のIPに置き換えて、環境を構成することを忘れないでください。

サイト1ゲートウェイ(tecmint-devgateway)

OS 1: Debian or Ubuntu
Public IP: 10.20.20.1
Private IP: 192.168.0.101/24
Private Subnet: 192.168.0.0/24

サイト2ゲートウェイ(tecmint-prodgateway)

OS 2: Debian or Ubuntu
Public IP:  10.20.20.3
Private IP: 10.0.2.15/24
Private Subnet: 10.0.2.0/24

ステップ1:カーネルパケット転送を有効にする

1.まず、両方のセキュリティゲートウェイの/etc/sysctl.conf構成ファイルに適切なシステム変数を追加して、パケット転送を有効にするようにカーネルを構成する必要があります。

$ sudo vim /etc/sysctl.conf

次の行を探してコメントを外し、示されているように値を設定します(詳細については、ファイル内のコメントを参照してください)。

net.ipv4.ip_forward = 1 
net.ipv6.conf.all.forwarding = 1 
net.ipv4.conf.all.accept_redirects = 0 
net.ipv4.conf.all.send_redirects = 0 

2.次に、次のコマンドを実行して、新しい設定をロードします。

$ sudo sysctl -p

3. UFWファイアウォールサービスを有効にしている場合は、いずれかのセキュリティゲートウェイのフィルタールールの直前に、次のルールを/etc/ufw/before.rules構成ファイルに追加する必要があります。

サイト1ゲートウェイ(tecmint-devgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.2.0/24  -d 192.168.0.0/24 -j MASQUERADE
COMMIT

サイト2ゲートウェイ(tecmint-prodgateway)

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING  -s 192.168.0.0/24 -d 10.0.2.0/24 -j MASQUERADE
COMMIT

4.ファイアウォールルールが追加されたら、次に示すようにUFWを再起動して新しい変更を適用します。

$ sudo ufw disable 
$ sudo ufw enable

ステップ2:DebianとUbuntuにstrongSwanをインストールする

5.両方のセキュリティゲートウェイでパッケージキャッシュを更新し、APTパッケージマネージャーを使用してstrongswanパッケージをインストールします。

$ sudo apt update
$ sudo apt install strongswan 

6.インストールが完了すると、インストーラースクリプトがstrongswanサービスを開始し、システムの起動時に自動的に開始できるようにします。次のコマンドを使用して、そのステータスと有効になっているかどうかを確認できます。

$ sudo systemctl status strongswan.service
$ sudo systemctl is-enabled strongswan.service

手順3:セキュリティゲートウェイを構成する

7.次に、/ etc /ipsec.conf構成ファイルを使用してセキュリティゲートウェイを構成する必要があります。

サイト1ゲートウェイ(tecmint-devgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo nano /etc/ipsec.conf 

次の構成をコピーしてファイルに貼り付けます。

config setup
        charondebug="all"
        uniqueids=yes
conn devgateway-to-prodgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.1
        leftsubnet=192.168.0.101/24
        right=10.20.20.3
        rightsubnet=10.0.2.15/24
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

サイト2ゲートウェイ(tecmint-prodgateway)

$ sudo cp /etc/ipsec.conf /etc/ipsec.conf.orig
$ sudo cp /etc/ipsec.conf 

次の構成をコピーしてファイルに貼り付けます。

config setup
        charondebug="all"
        uniqueids=yes
conn prodgateway-to-devgateway
        type=tunnel
        auto=start
        keyexchange=ikev2
        authby=secret
        left=10.20.20.3
        leftsubnet=10.0.2.15/24
        right=10.20.20.1
        rightsubnet=192.168.0.101/24 
        ike=aes256-sha1-modp1024!
        esp=aes256-sha1!
        aggressive=no
        keyingtries=%forever
        ikelifetime=28800s
        lifetime=3600s
        dpddelay=30s
        dpdtimeout=120s
        dpdaction=restart

各構成パラメーターの意味は次のとおりです。

  • config setup – specifies general configuration information for IPSec which applies to all connections.
  • charondebug – defines how much Charon debugging output should be logged.
  • uniqueids – specifies whether a particular participant ID should be kept unique.
  • conn prodgateway-to-devgateway – defines connection name.
  • type – defines connection type.
  • auto – how to handle connection when IPSec is started or restarted.
  • keyexchange – defines the version of the IKE protocol to use.
  • authby – defines how peers should authenticate each other.
  • left – defines the IP address of the left participant’s public-network interface.
  • leftsubnet – states the private subnet behind the left participant.
  • right – specifies the IP address of the right participant’s public-network interface.
  • rightsubnet – states the private subnet behind the left participant.
  • ike – defines a list of IKE/ISAKMP SA encryption/authentication algorithms to be used. You can add a comma-separated list.
  • esp – defines a list of ESP encryption/authentication algorithms to be used for the connection. You can add a comma-separated list.
  • aggressive – states whether to use Aggressive or Main Mode.
  • keyingtries – states the number of attempts that should be made to negotiate a connection.
  • ikelifetime – states how long the keying channel of a connection should last before being renegotiated.
  • lifetime – defines how long a particular instance of a connection should last, from successful negotiation to expiry.
  • dpddelay – specifies the time interval with which R_U_THERE messages/INFORMATIONAL exchanges are sent to the peer.
  • dpdtimeout – specifies the timeout interval, after which all connections to a peer are deleted in case of inactivity.
  • dpdaction – defines how to use the Dead Peer Detection(DPD) protocol to manage the connection.

上記の構成パラメーターの詳細については、コマンドを実行してipsec.confのマニュアルページを参照してください。

$ man ipsec.conf

ステップ4:ピアツーピア認証用にPSKを設定する

8.両方のセキュリティゲートウェイを設定した後、次のコマンドを使用して、ピアが使用するセキュアPSKを生成します。

$ head -c 24 /dev/urandom | base64

9.次に、両方のゲートウェイの/etc/ipsec.secretsファイルにPSKを追加します。

$ sudo vim /etc/ipsec.secrets

次の行をコピーして貼り付けます。

------- Site 1 Gateway (tecmint-devgateway) ------- 

10.20.20.1 10.20.20.3 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

------- Site 2 Gateway (tecmint-prodgateway) -------

10.20.20.3  10.20.20.1 : PSK "qLGLTVQOfqvGLsWP75FEtLGtwN3Hu0ku6C5HItKo6ac="

10. IPSecプログラムを再起動し、そのステータスを確認して接続を表示します。

$ sudo ipsec restart
$ sudo ipsec status

11.最後に、pingコマンドを実行して、いずれかのセキュリティゲートウェイからプライベートサブネットにアクセスできることを確認します。

$ ping 192.168.0.101
$ ping 10.0.2.15

12.さらに、図のようにIPSecを停止および開始できます。

$ sudo ipsec stop
$ sudo ipsec start

13.手動で接続を確立するためのIPSecコマンドなどの詳細については、IPSecヘルプページを参照してください。

$ ipsec --help

それで全部です!この記事では、UbuntuサーバーとDebianサーバーでstrongSwanを使用してサイト間IPSec VPNをセットアップする方法について説明しました。ここでは、両方のセキュリティゲートウェイがPSKを使用して相互に認証するように構成されています。ご質問やご意見がございましたら、以下のフィードバックフォームからお問い合わせください。