3 Libreswanを使用したVPNの構成

Libreswanは、IPsecプロトコルとInternet Key Exchange (IKE)標準を使用してVPNを実装するソフトウェアです。

Libreswanのインストール

LibreswanでIPsec VPNを構成するには、次のようにパッケージをダウンロードします。

  1. AppStreamリポジトリが有効になっていることを確認します。

  2. Libreswanをインストールします。

    sudo dnf install -y libreswan
  3. 永続サービスとしてipsecを起動します。

    sudo systemctl enable ipsec --now
  4. ipsecサービスをファイアウォール・サービスに追加します。

    sudo firewall-cmd --add-service="ipsec"
    sudo firewall-cmd --runtime-to-permanent

IPsec VPNの構成

VPNの構成は、ホスト間など基本的な設定からサイト全体を含む複雑な設定まで多岐にわたります。

ホストからホストへの接続の作成

構成するVPN接続のタイプに関係なく、一般的だが重要なステップには、エンドポイント間の接続を可能にするRSAキーの取得が伴います。

たとえば、ホスト間接続で、次の手順を実行します。

  1. 次のコマンドを実行してRSAキー・ペアを生成します。

    sudo ipsec newhostkey
    Generated RSA key pair with CKAID 6e6e724aa180b071128632dc09c7d2b25a852d7e was stored in the NSS database

    このコマンドは、特定のckaid値を持つRSAキー・ペアを生成します。

    コマンドは両方のホストで実行する必要があります。

  2. 最初のホストで、leftrsasigkeyキーを表示します。

    ノート:

    通常、libreswanでは、の指定はローカルホストを指し、の指定はリモート・ホストを指します。ただし、両方のホストがピアであるため、この指定は同じ意味で使用できます。

    sudo ipsec showhostkey --list

    出力から、6e6e724aa180b071128632dc09c7d2b25a852d7eなどのckaidを識別し、これを使用して、次のようにleftrsasigkeyキーを表示します。

    sudo ipsec showhostkey --left --ckaid 6e6e724aa180b071128632dc09c7d2b25a852d7e
      # rsakey AwEAAaxdf
      leftrsasigkey=0sAwEAAaxdfaCPrZ72pAm1kjvhAQHHLn3Wg3gAu1Z0U+3FWeh7FN+bHtfy
    ...
    9f8=
  3. 2番目のホストで、rightrsasigkeyキーを表示します。

    sudo ipsec showhostkey --list

    出力から、5dddc2334515702c3a605bc00daed1e44e18767d などのckaidを識別し、これを使用して、次のようにrightrsasigkeyキーを表示します。

    ipsec showhostkey --right --ckaid 5dddc2334515702c3a605bc00daed1e44e18767d
      # rsakey AwEAAb1nC
      rightrsasigkey=0sAwEAAdSSYrNO2QOY8RXgLlJZilBokPb9cFzCbU+VYY7eFcoZMmVWPVI
    ...
    zu+/7BE5kjXHAAI1fvYha+CFbuh6KYAlpoHvX81ALusfQs+6wwTsde5jlfcrXNlqX
  4. 各ホストで、/etc/ipsec.dに構成ファイル(host2host.confなど)を次のエントリで作成します:

    conn tunnel-name
        leftid=@host1-tunnel-id
        left=host1-IPaddress
        leftrsasigkey=host1-leftrsasigkey
        rightid=@host2-tunnel-id
        right=host2-IPaddress
        rightrsasigkey=host2-rightrsasigkey
        authby=rsasig

    構成ファイルと設定可能なその他のパラメータの詳細は、ipsec.conf(5)マニュアル・ページを参照してください。

  5. IPsecサービスを再起動します。

    sudo systemctl restart ipsec
  6. libreswanを起動します。

    sudo ipsec setup start
  7. VPNトンネル接続をロードします。

    sudo ipsec auto --add tunnel-name                        
  8. トンネル接続を確立します。

    sudo ipsec auto --up tunnel-name                        
  9. 構成ファイルに次の行を追加することにより、ipsecサービスの起動時にトンネルを自動的に起動します。

    auto=start

サイトからサイトへの接続の作成

サイト間のVPN接続は、2つのネットワーク間で接続が確立されることを意味します。このタイプの接続に対してホストのペアを構成すると、ホストは事実上、トラフィックが出入りしてネットワーク内の他のホストにアクセスできるゲートウェイになります。

サイト間VPNを構成するには、ホストからホストへの接続の作成で説明されているように、VPNをホストするように構成されたホストがすでに存在し、動作可能である必要があります。

ノート:

Libreswanを使用して、オンプレミス・ネットワークとOracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)間のサイト間VPNを構成できます。OCIへのサイト間VPNの設定ステップは、Oracle Cloud InfrastructureドキュメントのLibreswanで説明されています。

サイト間の接続の構成を続行するには、次の手順に従います。

  1. サイト間接続の構成ファイルとして機能する、ホストからホストへの構成ファイルのコピーを作成します。次に例を示します。

    sudo cp /etc/ipsec.d/host2host.conf /etc/ipsec.d/site2site.conf

    コピーは両方のホストに存在する必要があります。

  2. サブネット情報を追加して、新しい構成ファイルを編集します。次に例を示します。

    conn subnet-name
      also=tunnel-name
      leftsubnet=subnet1-IP
      rightsubnet=subnet2-IP
      auto=start
    
    host connection information...                        

    ノート:

    サブネットはCIDR表記にできます。

VPNサービスのステータスの確認

ipsecサービスが実行中かどうかを確認するには、次のコマンドを入力します。

sudo systemctl status ipsec
ipsec.service - Internet Key Exchange (IKE) Protocol Daemon for IPsec
   Loaded: loaded (/usr/lib/systemd/system/ipsec.service; enabled; vendor prese>
   Active: active (running) since Mon 2021-04-26 02:27:39 PDT; 7h ago
     Docs: man:ipsec(8)
           man:pluto(8)
           man:ipsec.conf(5)
...

ipsec構成の正確さを確認するには、次のコマンドを入力します。

sudo ipsec verify
Verifying installed system and configuration files

Version check and ipsec on-path                         [OK]
Libreswan 3.32 (netkey) on 5.4.17-2036.104.5.el8uek.x86_64
Checking for IPsec support in kernel                    [OK]
 NETKEY: Testing XFRM related proc values
         ICMP default/send_redirects                    [NOT DISABLED]

  Disable /proc/sys/net/ipv4/conf/*/send_redirects or XFRM/NETKEY will act on or
 cause sending of bogus ICMP redirects!

         ICMP default/accept_redirects                  [NOT DISABLED]

  Disable /proc/sys/net/ipv4/conf/*/accept_redirects or XFRM/NETKEY will act on 
or cause sending of bogus ICMP redirects!

         XFRM larval drop                               [OK]
Pluto ipsec.conf syntax                                 [OK]
Checking rp_filter                                      [ENABLED]
 /proc/sys/net/ipv4/conf/all/rp_filter                  [ENABLED]
  rp_filter is not fully aware of IPsec and should be disabled
Checking that pluto is running                          [OK]
 Pluto listening for IKE on udp 500                     [OK]
 Pluto listening for IKE/NAT-T on udp 4500              [OK]
 Pluto ipsec.secret syntax                              [OK]
Checking 'ip' command                                   [OK]
Checking 'iptables' command                             [OK]
Checking 'prelink' command does not interfere with FIPS [OK]
Checking for obsolete ipsec.conf options                [OK]

トンネル接続をテストするには、tcpdumpユーティリティをインストールしてネットワーク・トラフィックをモニターします。

ピアの1つで次のコマンドを実行して、interfaceで明示的にトラフィックをモニターします。このユーティリティは、カプセル化されたセキュリティ・ペイロード(ESP)パケットと、ipsecサービスによって使用されるUDPポート500および4500を通過するトラフィックを追跡します:

tcpdump -n -i interface esp or udp port 500 or udp port 4500
dropped privs to tcpdump
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on interface, link-type EN10MB (Ethernet), capture size 262144 bytes
10:05:53.578884 IP 10.147.25.195 > 10.147.25.196: ESP(spi=0xcba1dd78,seq=0x2325), length 96
10:05:53.579353 IP 10.147.25.196 > 10.147.25.195: ESP(spi=0x979dcdbe,seq=0x2325), length 124
10:05:56.585128 IP 10.147.25.195 > 10.147.25.196: ESP(spi=0xcba1dd78,seq=0x2326), length 96
10:05:56.585527 IP 10.147.25.196 > 10.147.25.195: ESP(spi=0x979dcdbe,seq=0x2326), length 124
...

このユーティリティは、まず、キーを交換するピアによって生成されたトラフィックをレポートします。

tcpdumpの実行中に、もう一方のピアに移動し、ネットワークpingなどのネットワーク操作を最初のホストに対して実行します。トラフィックをモニターしているホストは、2番目のピアからVPN経由でネットワーク・アクティビティをレポートします。

[Ctrl]+[c]を押して、両方のピアの操作を終了します。