Михаил, Если мы говорим, что http протокол, то можно вообще не использовать VPN, а настроить Proxy и видеть реальный адрес клиента.
Если все же нужен VPN, то тебе надо написать логер на VPN сервеве который будет логировать все соединения в базу (VPN_IP - SPT), а второй сервер на основании порта подключения доставать из базы реальный IP клиента.
Например так
Добавляем в iptables логирование
iptables -t nat -A POSTROUTING -d $BACKEND_IP -m limit --limit 2/min --limit-burst 10 -p tcp --tcp-flags NEW -j LOG --log-prefix "VPN log: "
В логе сервера получаем что-то типа (или настраиваем отдельный лог через rsyslog)
Feb 18 05:06:29 server kernel: VPN log: IN= OUT=eth1 SRC=4.3.4.5 DST=3.4.5.6 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=22 DPT=59292 WINDOW=14480 RES=0x00 ACK SYN URGP=0
Вешаем на этот лог telegraf который кидает это все в базу influx.
В этом лог будут видны VPN адреса клиентов (адрес внутри тоннеля) и SPT - порт с который клиент использует для подключения к backend, соответственно так же надо написать скрипт который будет добавлять в базу связку Real_IP - VPN_IP. Тот же WireGuard и OpenVPN позволяют запускать скрипты при подключении клиента.
Потом уже SQL запросом (LEFT JOIN) на втором сервере вытягивать нужные данные.
Если оба сервера (VPN и веб-сервер) ваши, то задачу можно решить IPsec IKEv2 в режиме без выдачи IP-адресов. На VPN-сервере добавятся специальные правила маршрутизации, которые маршрутизируют IP-адрес и порт клиента без подмены адреса.
Михаил, Необходимо настроить IPsec IKEv2 на сервере, а клиентом подключиться к VPN-серверу. Сервер настроить в туннельный режим без выдачи виртуального IP-адреса. Далее уже настраивать маршрутизацию на обоих серверах, соответственно задаче. Между серверами тоже должен быть какой-либо туннель, инкапсулирующий IP.