нужно использовать протокол, который открывает сессию и не закрывает (например websocket). Например при http запросе: каждый запрос открывает сессию в NAT (получает внешние IP и порт), потом приходит ответ и сессия NAT закрывается, соответственно новый запрос создаст новую сессию NAT с другим портом и после ответа NAT закроет сессию - удалит у себя привязку своего внешнего порта NAT к тебе.
И вот когда ты добьешься того что сессии NAT не удаляются (так работаю push сообщения), то тогда сможешь со стороны твоего внешнего сервера (с белым IP) передать клиентам куда им друг другу стучаться в ip адреса и порты со стороны NAT. (Так мне сетевик обьяснял, может что-то я не понял)
Это нужно поизучать через Wireshark.
Если сообщения просто для себя - не гонять мегабайты, то проще пересылку сообщений сделать через соцсети - ВК или Телега (через API).