Написал очередную ненужну: программа с одной стороны открывает tun/tap-интерфейс, а с другой стороны использует обычные AF_INET-SOCK_DGRAM-сокеты (без connect(2)-а), снимая ограничение для UDP hole punching. Слегка похоже на SLiRP. TCP предполагается пускать в обычный -j MASQUERADE.
До: Primary: Independent Mapping, Port Dependent Filter, preserves ports, no hairpin
После: Primary: Independent Mapping, Independent Filter, preserves ports, no hairpin
Исходный код, предсобраная версия, краткая инструкция: https://github.com/vi/udpnat


