@whitephantom
Check that the connections themselves are capable of sustaining the needed bandwidth. Install the iPerf3 package on both pfSense boxes and do a transfer test in both directions, use -R switch to reverse directions.
Ensure sure that both sides are AES-NI capable. Without AES-NI encryption performance will be poor. You can test AES performance with openssl.
Run this in the pfSense shell on both sides:
openssl speed -evp aes-256-cbc
And this too:
openssl speed -evp aes-256-gcm
Post your output here.
You should see something like this:
Benchmarked CPU: Intel Celeron Processor N5105
Doing aes-256-cbc for 3s on 16 size blocks: 109174474 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 64 size blocks: 36252639 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 256 size blocks: 9295310 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 1024 size blocks: 2318898 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 8192 size blocks: 289695 aes-256-cbc's in 2.99s
Doing aes-256-cbc for 3s on 16384 size blocks: 145956 aes-256-cbc's in 3.00s
OpenSSL 1.1.1n-freebsd 15 Mar 2022
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-256-cbc 583784.13k 775408.93k 795270.80k 793583.81k 793125.91k 797114.37k
Doing aes-256-gcm for 3s on 16 size blocks: 69574566 aes-256-gcm's in 2.99s
Doing aes-256-gcm for 3s on 64 size blocks: 43887920 aes-256-gcm's in 2.98s
Doing aes-256-gcm for 3s on 256 size blocks: 21807074 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 1024 size blocks: 7073429 aes-256-gcm's in 2.99s
Doing aes-256-gcm for 3s on 8192 size blocks: 952031 aes-256-gcm's in 3.00s
Doing aes-256-gcm for 3s on 16384 size blocks: 475160 aes-256-gcm's in 2.98s
OpenSSL 1.1.1n-freebsd 15 Mar 2022
built on: reproducible build, date unspecified
options:bn(64,64) rc4(16x,int) des(int) aes(partial) idea(int) blowfish(ptr)
compiler: clang
The 'numbers' are in 1000s of bytes per second processed.
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes 16384 bytes
aes-256-gcm 372033.19k 941177.59k 1860870.31k 2420701.01k 2599679.32k 2608593.57k
The aes-256-gcm cipher is probably the best cipher to use for IPSec assuming both sides support it.