P2P-соединение смягчено сервером
Я пишу систему на C#, которая состоит из 1 настольного приложения (я называю это "хост"), подключенного к нескольким "клиентским" приложениям через Интернет. "Хост" должен иметь возможность получать информацию о состоянии (по крайней мере, работает ли клиентское приложение), а также отправлять файлы на клиентские компьютеры. Клиентские компьютеры не должны видеть или общаться друг с другом. Клиентские приложения будут работать круглосуточно, но главное приложение будет работать только тогда, когда пользователь захочет проверить ПК, на которых запущены клиентские приложения.
Я довольно много читал о PNRP от Microsoft и думаю, что буду использовать систему, основанную на этом, для смягчения соединений между хостом и клиентами - т.е. каждое клиентское приложение обнаруживает изменение IP WAN и сообщает о своем новом IP linux сервер который у меня есть. Когда хост-приложение хочет подключиться, оно подключится к серверу, аутентифицируется и получит список IP-адресов WAN клиентских приложений.
Отсюда я хотел бы напрямую подключиться из хост-приложения к каждому клиентскому приложению. Чтобы облегчить загрузку на сервер, я не хочу отправлять файлы или информацию о состоянии через сервер. Каков был бы лучший способ сделать это? Каждое клиентское приложение может находиться за брандмауэрами, NAT и т. Д., И у меня не будет возможности вручную перенаправлять порты (хотя я могу использовать uPnP, когда он работает).
PS - Какие альтернативы PNRP вы бы предложили? Я бы использовал PNRP напрямую, за исключением (1) по соображениям безопасности, мне нужно использовать мой собственный начальный сервер (linux) вместо начальных серверов Microsoft PNRP, и я понимаю, что PNRP только для окон и (2) PNRP работает только поверх ipv6, который сети (и интернет-провайдеры) могут не всегда поддерживать.