A razão pela qual seu IP IPv6 externo (aquele que se parece com XXXX:XXXX:XXXX::
) não funciona é devido ao modo como o IPv6 funciona.
Pegue este endereço, por exemplo: 2607:5600:52c:1::
. Esse endereço é globalmente roteável e, na verdade, esse endereço pertence a mim.
Agora temos um endereço IPv6 e queremos nos conectar, por exemplo ... port 1000
.
Os URIs que estamos acostumados a ver são os seguintes: <protocol>://<host>[:<port>]/[<path>][#<hash>]
, o que significa que, para um site IPv6, esperamos usar http://2607:5600:52c:1::/foo#bar
. É aqui que fica interessante.
Poderíamos sempre fazer 2607:5600:52c:1::1000
, mas, na realidade, isso seria traduzido de forma transparente para 2607:5600:052c:0000:0000:0000:1000
, o que é um problema, pois isso significa que não há porta. É aqui que o RFC3986 entra em jogo. Você quer a seção 3.2.2: Host
A host identified by an Internet Protocol literal address, version 6 [RFC3513] or later, is distinguished by enclosing the IP literal within square brackets ("[" and "]"). This is the only place where square bracket characters are allowed in the URI syntax. In anticipation of future, as-yet-undefined IP literal address formats, an implementation may use an optional version flag to indicate such a format explicitly rather than rely on heuristic determination.
Ok. Você me contou sobre o porquê, então como consertá-lo?
Simples. De acordo com a RFC3986, você precisa usar esta notação: [IPv6-ADDRESS]
, o que significa que, no nosso exemplo, você precisa usar isto: http://[2607:5600:52c:1::]
, que funcionará. Isso também significa que podemos nos conectar à porta 1000 usando [2607:5600:52c:1::]:1000