В очередной раз наступил на грабли, что IPSec-пакеты проходят через таблицу "filter" в iptables/netfilter два раза: один раз как нешифрованные, второй — как шифрованные. При этом такие критерии как "in interface, out interface, src ip, dst ip" могут оставаться одними и теми же при каждом проходе. Соответственно, разрешающие правила тоже следует указывать в двух экземплярах. Так, сперва нужно пропустить исходящий трафик, который только собирается шифроваться, а потом пропустить его же, но уже зашифрованным.
Я и раньше, конечно, об этом знал. Но теория теорией, а практика — практикой. Чтобы не наступать снова, конкретный пример "на будущее". Используем IPSec в транспортном режиме, хотим разрешить через интерфейс "vlan12" только шифрованный трафик и icmp.
И пару слов о реализациях. Большого смысла использовать KLIPS я не вижу, поскольку и Netkey/XFRM вполне себе нормально работает. На Kame-Tools/Racoon без слёз не взглянешь: там багов больше, чем фич. OpenSWAN фактически уже мёртв. Остаётся только StrongSWAN, практически без вариантов.