Развернул сеть в виртуалках: клиент 1 - фаервол (ipfire1) - роутер - фаервол (ipfire2) - клиент 2.
Настроил ipsec vpn. Теперь если слать пинг с машины клиент 1 на машину клиент 2, то на роутере можно видеть еспшки, значит все работает. Плюс айпифаера общаются между собой (isakmp пакеты каждые сек 10).
На машине с ipfire2 я смотрю процессы: там есть демон charon и сам charon, запущенный демоном. Больше никаких процессов, дочерних процессов нет, которые относились бы к strongswan. Я инжектирую хуки во второй процесс на функции read, write, send, sendto, sendmsg, recv, recvfrom, recvmsg. Хуки работают, так как ловят информационные пакеты между фаерволами (isakmp).
Но вот в чем проблема: когда начинаю слать пинг с одной машины на другую, то никакого выхлопа нет, хуки молчат.
По идее либо другой процесс держит туннель, либо функции отправки и приема пакетов дергаются другие в обход хуков. Вроде никаких процессов нет, я смотрел и древо процессов и весь лист, их только 2. Насчет других функций отправки тоже сомнительно както, потому что а как иначе strongswan пишет в сокет, если не сендами или врайтами.
Исходный код strongswan смотрел, там они сделали на си аля плюсы, чтото на подобии классов, и объекту socket подключают методы send, receive, но в этих методах как именно они работают с файловыми дескрипторами сокета я не нашел.
На сколько я знаю, ipsec реализован как часть TCP/IP в ядре. User space демоны нужны лишь для инициализации и управления ключами. Остальной ВПН трафик расшифровывается в ядре и дальше уже расшифрованный трафик попадает непосредственно адресату (клиентскому приложению).
Поэтому вы в хуках и не видите собственно трафика, а только пакеты isakmp.
res2001, ну должен же быть процесс, который держит сокет для прослушивания, если смотреть выхлоп нетстата, то 4500 и 500 порты держит процесс charon, порожденный демоном starter charon
brbwk, а лиунксе IPsec ядерный, charon только настраивает его, как именно не скажу, не вдавался в такие подробности
некоторые вещи можно смотреть через ip xfrm, например ip xfrm monitor мониторит то, что происходит в ядре, но как-то не густо, а через ip xfrm state можно увидеть что-то типа:
proto esp spi 0x2cd57622 reqid 1 mode tunnel
encap type espinudp sport 4500 dport 4500 addr 0.0.0.0
ну должен же быть процесс, который держит сокет для прослушивания
Не факт. Например если трафик по ВПН приходит транзитный, то он из ядра не выходит - сразу перенаправляется на другой интерфейс с помощью таблицы маршрутизации и/или фаервола.
Если трафик предназначен для этого же хоста, тогда такой процесс есть. Только это не charon или strongswan, а например апач или любое другое приложение - зависит от трафика.
Если что, ответ на пинг то же генерируется ядром самостоятельно.
isakmp (Internet Security Associations and Key Management Protocol), равно как и его последователь IKE (Internet Key Exchange) - это вспомогательные протоколы для установки соединения. Вообще-то, если все сделать руками - заработает и без них, они только удобство повышают.
IPSec работает по протоколам ESP/AH и работает в основном в ядре - там делается формирование политик, управление ключами, шифровка-расшифровка.