Существуют решения для «динамического» доступа к программному обеспечению на компьютере за NAT, но обычно в основном для связи по UDP.
Одним из них является метод UDP дырокола . Однако это не гарантирует работу в каждой возможной ситуации. Если обе стороны связи находятся за «симметричным конусным NAT», это не так.
Вы можете уменьшить вероятность того, что клиент не сможет общаться, используя UPnP в качестве резервной (или даже основной) альтернативы.
Я недостаточно знаю веб-сервисы и даже не знаю, является ли использование UDP для вашего веб-сервиса одним из вариантов (или если это вообще возможно).
Использование того же метода для непосредственного TCP может привести к сбою (TCP-соединения не являются без сохранения состояния - здесь возникает много проблем).
Альтернативой, использующей ту же технику, может быть настройка некоторого VPN на основе UDP (точно так же как OpenVPN ), но, как вы сказали, вам придется управлять ключами, сертификатами и т. , Это может быть автоматизировано (я сделал это), но все же, это не совсем тривиально.
=== РЕДАКТИРОВАТЬ ===
Если вы действительно хотите использовать TCP, вы можете создать простое «прокси» программное обеспечение на клиентских компьютерах, которое будет служить ретранслятором.
Вы бы имели следующую схему:
- Веб-сервис на клиентских компьютерах за NAT
- Программное обеспечение «прокси» в тех же самых блоках, устанавливающее исходящее (таким образом незаблокированное) TCP-соединение с серверами вашей компании
- На серверах вашей компании также размещается WebService, для которого требуется что-то вроде «идентификатора клиента», чтобы перенаправить запрос на соответствующее установленное TCP-соединение.
- Прокси-программа опрашивает локальный WebService и отправляет ответ на серверы компании, которые также передают ответ исходному запрашивающему.
Альтернативный вариант: вы можете попросить прокси-программное обеспечение напрямую подключиться к запрашивающей стороне, чтобы повысить производительность, но тогда вы можете столкнуться с теми же проблемами NAT, которые пытаетесь избежать.