Статические и публичные IP-адреса для обычных компьютеров - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу создать приложение обмена сообщениями в браузере, используя WebRTC, но я хочу избавиться от каждой третьей стороны, такой как серверы STUN и TURN (я также хочу избавиться от сигнальных серверов, но обо всем по порядку). Я хочу, чтобы пользователи хранили свои контакты в браузере localStorage способом ключ-значение: имя человека => IP-адрес.

Меня не волнует как пользователи находят свои собственные общедоступные IP-адреса (они могут сделать ipconfig, поскольку нет веб-API для его получения) или как они распространяют его (они могут использовать централизованную службу, такую ​​как Messenger, для передачи своих общедоступных IP-адресов своим друзьям, или они могут использовать QR-код на своей визитной карточке).

Но главная проблема, которую яЯ хочу, чтобы эти общедоступные IP-адреса были статическими, потому что я не хочу уведомлять всех моих друзей об обновлении их файла контактов каждый раз, когда мой шлюз меняет мой общедоступный IP-адрес.

В IPv4 естьслишком мало доступных адресов (всего 4 миллиарда), поэтому общедоступные статические адреса зарезервированы для веб-сайтов и домашних шлюзов. Всякий раз, когда я хочу получить доступ к Интернету, мой шлюз открывает определенный порт для моего компьютера. Например, если мой шлюз имеет публичный адрес 1.2.3.4, «публичный адрес» моего компьютера будет временно 1.2.3.4:3000. Этот процесс называется NAT. Чтобы найти свой «публичный адрес», нужно отправить запрос на сервер STUN, который ответит с каким IPv4-адресом и каким портом он видит. Но шлюз закрывает соединение порта в какой-то момент, так что это не публичный статический адрес, как я хочу.

Но в IPv6 он другой, число возможных адресов невероятно велико (2 ^ 128),таким образом, мы могли бы теоретически дать один статический публичный адрес каждому компьютеру в мире. NAT в основном был бы бесполезен (я не говорю о брандмауэрах здесь). Но опять же, есть проблема, в IPv6 у вас есть один адрес, который является статическим, но не публичным, и у вас есть один или несколько адресов, которые являются публичными, но не статичными. Таким образом, с IPv4 ничего не изменилось, и это все еще не решило мою проблему.

У меня есть 2 вопроса:

  • Как получить общедоступный и статический адрес для обычных компьютеров? Я не хочу, чтобы мои пользователи вмешивались в работу своего маршрутизатора / интернет-провайдера или устанавливали что-либо на свой компьютер.
  • Почему у всех нас уже нет статических и общедоступных адресов IPv6? Есть ли выбор дизайна за этим?

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 29 сентября 2019

Ваш вопрос на самом деле не является вопросом программирования, поэтому я предполагаю, что вам нужно это знать, потому что вы разрабатываете программное обеспечение, использующее IPv6. Глядя на это с точки зрения приложения:

  1. Вам не нужно поворачивать, чтобы найти свой публичный адрес. Без NAT ваш адрес не изменяется сетью, а ваш локальный адрес является вашим публичным адресом. Вам просто нужно позволить своему программному обеспечению спросить у ОС, какие в настоящий момент сконфигурированные адреса.

  2. В IPv6 обычно это не тот шлюз, который выдает адреса подключенным устройствам. Шлюз только передает сетевой префикс (a / 64) в сеть, и все устройства выбирают свои собственные адреса (обычно несколько адресов на устройство).

DHCPv6 существует, но он существуетобычно не используется для настройки адресов IPv6 на устройствах. Он может использоваться в режиме без сохранения состояния для настройки доменных имен, преобразователей DNS и т. Д., Но это не связано с назначением адресов.

Таким образом, устройство выбирает свои собственные адреса в пределах префикса, передаваемого шлюзом. Как это выбрать?

Первоначально устройства использовали MAC-адрес интерфейса для суффикса (используя модифицированный алгоритм EUI-64). Проблема в том, что если у вас, например, круг, то онлайн-сервисы, к которым вы подключаетесь, могут отслеживать ваше устройство. Потому что независимо от того, к какой сети вы подключаетесь, последние 64 бита вашего адреса будут содержать ваш уникальный MAC-адрес. Таким образом можно было отследить ваше устройство от работы до дома, до любимого кафе и т. Д.

В эти дни ОС использует расширения конфиденциальности, чтобы сделать ваш IPv6-адрес недоступным для отслеживания. Часто существует стабильный адрес, связанный с префиксом сети, поэтому каждый раз, когда вы подключаетесь к одной и той же сети, вы получаете один и тот же адрес. Этот адрес полезен для одноранговой связи.

Но они пошли дальше. Часто существует также набор адресов конфиденциальности, которые (полу) случайным образом меняются со временем. Ваше устройство может генерировать новый адрес каждый день или даже каждый час. Это даже усложняет для онлайн-сервисов определение того, существует ли одно устройство, которое изменило свой адрес конфиденциальности, или существует несколько устройств. Поскольку этот адрес со временем меняется, он подходит для коротких исходящих соединений, но не так полезен для приема входящих соединений. Для этого используйте стабильный адрес, который я упомянул в предыдущем параграфе.

Вероятно, самый сложный бит - как спросить у ОС о доступных адресах. Глядя на мое собственное окно macOS, я вижу:

en2: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether c8:e0:eb:5c:af:61
    inet6 fe80::1074:8568:e447:d9e3%en2 prefixlen 64 secured scopeid 0x12
    inet6 2a02:xxxx:xxxx:xxxx:3e:873f:837:1417 prefixlen 64 autoconf secured
    inet6 2a02:xxxx:xxxx:xxxx:b19c:71c5:1de8:8fde prefixlen 64 autoconf temporary

Вы можете видеть как долгосрочный secured адрес, так и краткосрочный temporary адрес.

Не зная, какая ОСВы разрабатываете для и на каком языке программирования я не могу помочь вам дальше. Пожалуйста, измените свой вопрос, чтобы включить эту информацию.

...