Вызов IPV6 IP с использованием интерфейса WebSocket

[ Я отметил, что этот вопрос должен быть удален модератором, пока я не получу ответ на свой этот вопрос]

Мой клиент javascript отлично работает при разговоре с node.js(на Ubuntu, более здесь) сервером через интерфейс WebSocket с IP-адресом IPV4.

Несмотря на то, что мой провайдер хостинга готов выделить мне IPV4, позвольте мне вместо этого использовать IPV6, поскольку сейчас есть ограниченная поставка IPV4.

При использовании IPV6 IP я получаю эту ошибку:

Соединение с WebSocket с 'ws://[2600: 3c00:: f03c: 91ff: fe73: 2b08]: 31333/' не удалось: ошибка при установлении соединения: нетто:: ERR_ADDRESS_UNREACHABLE

Я проверил, что порт 31333 действительно открыт с помощью инструмента: http://www.subnetonline.com/pages/ipv6-network-tools/online-ipv6-port-scanner.php

Я даже пробовал решение, как в адресе IPv6, дающем синтаксическую ошибку в веб-обозревателе Internet Explorer-10 - то есть: 2600-3c00-0-0-f03c -91ff-fe73-2b08.ipv6-literal.net

Я запустил этот клиент и могу подключиться к серверу, когда оба они работают на удаленном сервере на базе Ubuntu:

var WebSocket = require('ws')
  , ws = new WebSocket('ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333');
ws.on('open', function() {
    ws.send('something');
});
ws.on('message', function(message) {
    console.log('received: %s', message);
});

Однако, когда я запускаю этот же клиент из своей домашней Windows 7, пока сервер удаленный Ubuntu один, он не может подключиться:

> $ node c2.js events.js:85
>       throw er; // Unhandled 'error' event
>             ^ Error: connect ENETUNREACH
>     at exports._errnoException (util.js:746:11)
>     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19)

Я даже запускаю этот код в Google Chrome:

var ws = new WebSocket("ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333");

ws.onerror = function(err)
{ 
    console.log(err);
    alert("Connection is error..."); 
};

Но я получаю ту же ошибку:

Соединение с WebSocket с 'ws://[2600: 3c00:: f03c: 91ff: fe73: 2b08]: 31333/' не удалось: ошибка при установлении соединения: net:: ERR_ADDRESS_UNREACHABLE websocket.html: 37 Событие

В чем может быть проблема?

PS: на данный момент я остановил сервер на порту 31333.

Ответы

Ответ 1

IPv6 не включен на вашем семейном контроллере Realtek PCIe GBE. Если бы это было так, то была бы строка, указывающая "Link-local IPv6 Address" в результате ipconfig.

Перейдите на панель управления > Сеть > Изменить настройки адаптерa > Щелкните правой кнопкой мыши на адаптере > Свойства. Проверьте IPv6.

Ответ 2

В системе должен быть включен IPv6, и каждый маршрутизатор между ним и интернет-провайдером и провайдер должны быть готовы к IPv6 и предоставлять его конечному пользователю. Причина nslookup заключается в том, что она просто возвращает записи AAAA, а не фактически подключается через IPv6. IPv4 не может напрямую взаимодействовать с IPv6 или наоборот. Вы не можете выполнить ping хост IPv6 с хостом IPv4.