R86S レビューシリーズ
- R86S レビュー (Ubuntu 22.10 編 その1) - 外部記憶装置
- R86S レビュー(Ubuntu 22.10 編 その2 NAPT他) - 外部記憶装置
- R86S レビュー(OpenBSD 編) - 外部記憶装置
- R86S レビュー(pfSense 編 その1 初期設定) - 外部記憶装置
- R86S レビュー(pfSense 編 その2 Firewall, NAT) - 外部記憶装置
- R86S レビュー(pfSense 編 その3 IPSec VPN) - 外部記憶装置 ← この記事
前回までのあらすじと今回の内容
前回、Firewall と NAT について速度計測を行った。 今回は、pfSense に付属している IPSec VPN サーバーを試してみる。
IPSec VPN
IPSec は、VPNに用いられるプロトコルであり、トンネリング及び認証・暗号化を提供するプロトコルである。
pfSense での設定
公式に Site-to-Site な IPSec VPN の設定手順が掲載されているため、これに従って設定する。
想定するネットワーク
前回までのネットワークを利用する。192.168.14.128/25 を IPSec で接続するLANとし、 WAN 側のIPアドレスとして、R86S は 192.168.14.1/25、IPSec で接続する負荷生成マシンのWAN側を 192.168.14.2/25 とする。負荷生成マシンの LAN のアドレスは 192.168.15.1/24 とする。
下準備
前回、NATの設定をしていたが今回は利用しないため、設定を初期状態に戻しておく。

Phase 1 の設定
初期状態では何も設定されていないため、"Add P1" から設定を追加する。

Remote Gateway にトンネルの対向である負荷生成マシンのWAN側IPアドレス(192.168.14.2)を指定する。 AESについては、"256bits"を指定するようにマニュアルに記載されているため、その通りに指定する。Pre-Shared Key については "Generate new Pre-Shared Key" から自動で生成することが出来る。



Phase 2 の設定
Phase 2 の設定を行う。追加した Phase 1 の設定から、"Add P2" を選択する。

"Local Network" は IPSec で接続するローカル側のネットワークを指定する。 ここでは、OPT1 のサブネットを接続するため、"OPT1 subnet" を選択している。 "Remote Network" では、負荷生成マシン側のLANアドレス(192.168.15.0/24)を指定する。

"Encryption Algorithms" は、マニュアルの指示に従い、"AES256-GCM" を key length "128bits" のみ指定する。

設定内容を変更するために、"Apply Changes" を選択する。

Firewall の設定
IPSec 用の Firewall を設定しておく。ここでは、IPSec で接続するネットワークについて、双方向に通信を許可する設定をしている。

Ubuntu での IPSec 設定(strongswan)
strongswan を用いて IPSec 接続を行う。IPv4 のフォワーディングを許可する設定を行っておく。
$ sudo vim /etc/sysctl.conf net.ipv4.ip_forward=1 (コメントアウトを外す) $ sudo sysctl -p /etc/sysctl.conf net.ipv4.ip_forward = 1
IPSec の接続情報を追加する。left が自身、right が接続先である。
$ sudo apt install strongswan $ sudo vim /etc/ipsec.conf conn pfsense-ipsec type=tunnel keyexchange=ikev2 left=192.168.14.2 leftsubnet=192.168.15.0/24 leftid=192.168.14.2 leftauth=psk right=192.168.14.1 rightsubnet=192.168.14.128/25 rightid=192.168.14.1 rightauth=psk ike=aes256-sha256-modp2048 esp=aes256gcm16-modp2048 ikelifetime=31680s lifetime=31680s auto=start $ sudo vim /etc/ipsec.secrets 192.168.14.2 192.168.14.1 : PSK "a3ee7ee313ef23bdb3bc4578ede0d618ea549626bab6109d48c72b54" $ sudo ipsec restart $ sudo ip a add 192.168.15.1/32 dev lo
接続の確認
設定が正常に反映されていれば、pfSense 側では以下のような表示になる。

Ubuntu 側でも以下のように接続が確立していることを確認できる。
$ sudo ipsec status Security Associations (1 up, 0 connecting): pfsense-ipsec[1]: ESTABLISHED 5 minutes ago, 192.168.14.2[192.168.14.2]...192.168.14.1[192.168.14.1] pfsense-ipsec{1}: INSTALLED, TUNNEL, reqid 1, ESP SPIs: ca1fb313_i c4bacbd3_o pfsense-ipsec{1}: 192.168.15.0/24 === 192.168.14.128/25
XFRM に、対応するポリシが追加されていることも確認できる。
$ sudo ip xfrm policy src 192.168.15.0/24 dst 192.168.14.128/25 dir out priority 374911 tmpl src 192.168.14.2 dst 192.168.14.1 proto esp spi 0xc4bacbd3 reqid 1 mode tunnel src 192.168.14.128/25 dst 192.168.15.0/24 dir fwd priority 374911 tmpl src 192.168.14.1 dst 192.168.14.2 proto esp reqid 1 mode tunnel src 192.168.14.128/25 dst 192.168.15.0/24 dir in priority 374911 tmpl src 192.168.14.1 dst 192.168.14.2 proto esp reqid 1 mode tunnel ...
iperf3 での速度計測
iperf3 を用いて IPSec を通したマシン間の通信スループットを計測した。
負荷生成マシンへの経路の追加
負荷生成マシン(192.168.14.130/25)へ IPSec を通す経路を追加しておく。
$ sudo ip route add 192.168.15.0/24 via 192.168.14.129
IPSec で接続されたマシン(192.168.15.1)への疎通が取れることを確認する。
$ ping 192.168.15.1 PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data. 64 bytes from 192.168.15.1: icmp_seq=1 ttl=63 time=0.822 ms 64 bytes from 192.168.15.1: icmp_seq=2 ttl=63 time=0.924 ms 64 bytes from 192.168.15.1: icmp_seq=3 ttl=63 time=0.765 ms
計測結果(AES-NI なし)
デフォルト設定では、Intel CPU の AES 演算支援機構である AES-NI が無効化されている。 まず、その状態で計測を行った。

双方向同時に計測し、最大で 170 Mbps 前後であった。 前回の NAT での計測に比べてかなり速度が低下していることが分かる。

CPU 使用率については、NAT時と同様に1コアを使い切っている。

計測結果(AES-NI あり)
"System" -> "Advanced" -> "Miscellaneous" -> "Cryptographic & Thermal Hardware" から AES-NI を有効化する。ここでは、 "AES-NI and BSD Crypto Device (aesni, cryptodev)" を選択した。

AES と SHA についてハードウェアアクセラレーションが有効になっていることが分かる。

計測した結果、双方向合計で最大 2.3 Gbps 程度は出ていることが分かる。 forward と reverse で偏りがあるが、個別に計測した場合はどちらも 2Gbps 程度は出ていたため、なにかしらの影響によりこのような結果となっていると考えられる。

CPU使用率は AES-NI が無効な場合と比べて若干減少し、内訳も割り込み("interrupt")が中心となった。

まとめ
pfSense の IPSec サーバー機能を試してみた。 性能計測の結果より、MTU1500 な環境ではスループットは1Gbpsにも届いていない。 そのため、10Gbps な環境におけるトンネリング用デバイスとして利用するには厳しいが、 一般家庭の10G回線用に利用する分には十分に思う。