Если вы предполагаете, что в NAT / Firewall ничего не указано, вы правы.
Например, Hole-Punching не будет работать с перегруженным NAT (PAT), насколько я знаю, поскольку порт источника рандомизированУстройство NAT, и оно сопоставляет / совпадает как с публичным адресом назначения, так и с выбранным выбранным исходным портом.
UPnP может работать, но опять же вы должны предположить, что оно существует и включено на устройстве NAT.
На мой взгляд, у вас есть только два варианта, если вы хотите быть универсальными: 1. Настройте NAT.2. Используйте прокси (бот, которого вы упомянули).Например, Skype использует второе, но делает это распределенным образом, используя каждый клиент Skype в качестве потенциального прокси (возможно, только если он обнаружит, что он не находится за NAT или не ограничен им).