Макс, я делаю это ответом на твой вопрос.
Какие компьютеры, к которым вы можете подключиться, настроены в сети или недоступны, не могут быть переопределены программным обеспечением на компьютере. Это было бы нарушением безопасности и могло бы стать причиной конфликтов адресов, потому что в разных NAT-зонах могут использоваться одни и те же IP-адреса.
Итак, вы не можете видеть компьютеры за маршрутизатором, если этот маршрутизатор использует NAT.
Маршрутизатор не объявляет эти адреса.
Цель NAT - создать специальный остров IP-адресов, который никто не может видеть за пределами раздела NAT. Таким образом, компания может использовать меньше уникальных IP-адресов, чтобы иметь хорошо работающую сеть. Другая цель - безопасность. Маршрутизатор также скрывает MAC-адреса компьютеров внутри области NAT. Маршрутизатор может скрывать многие вещи.
Компьютеры внутри NAT-области могут инициировать контакт с компьютерами вне NAT ((если разрешено), маршрутизатор запомнит компьютер и сохранит для него преобразование адреса), но компьютер вне NAT не может адресовать компьютер внутри NAT. Он может отвечать только на компьютер изнутри. Он делает это, отвечая на маршрутизатор, и маршрутизатор узнает, какому компьютеру в области NAT переслать ответ.
Go не предоставляет библиотеки, которые могут решить эти внешние ограничения. Живи с этим. Вы ничего не можете сделать.
Как объясняет JBuchel, модель Skype может работать, если есть некоторые дополнительные условия, такие как открытые порты UDP, дополнительный сервер / компьютер и т. Д. Это на самом деле перестановка конфигурации сети, что невозможно сделать без помощи системные / сетевые администраторы.
Но если есть поддержка на этом уровне, решение будет намного проще, просто отключите компьютер от NAT и дайте ему IP-адрес, который виден для другого компьютера.