O que eu quero alcançar é acessar um site na minha máquina do OpenBSD que tenha um IPv6 enquanto eu não. Para isso, estou usando o Tunnel Broker e consigo fazer ssh com sucesso na máquina do OpenBSD usando seu endereço IPv6.
Um aplicativo da web está sendo executado nesta máquina na porta 8080 e gostaria de acessá-lo da minha máquina (que usa o Tunnel Broker). A máquina do OpenBSD está atrás de um modem / roteador, mas eu permiti todas as conexões vindas do IPv6 que me foram fornecidas pelo Tunnel Broker.
Portanto, eu estou supondo que o meu problema tem a ver com o firewall do OpenBSD ... Eu tentei muitas regras diferentes, mas nenhuma funcionou. Aqui está o último que eu tentei:
pass in proto tcp from any to nfe0 port 8080
Sempre que utilizo pfctl -nvf /etc/pf.conf
para recarregar as regras. Para testar a conexão que faço:
$ curl -6 http://[ipv6]:8080
curl: (7) Failed to connect to ... port 8080: Connection refused
Eu posso pingar a máquina sem problemas ... Qualquer ajuda seria muito apreciada:).
Eu uso o OpenBSD 6.0 e minha máquina está no macOS Sierra.
EDITAR
Eu criei um servidor HTTP muito simples em Java que tenta escutar em [:: 1]: 8080, mas recebo o seguinte erro:
$ java -Djava.net.preferIPv4Stack=false -Djava.net.preferIPv6Addresses=true SimpleServer ::1
Exception in thread "main" java.net.SocketException: Protocol family unavailable
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:387)
at java.net.ServerSocket.bind(ServerSocket.java:375)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at SimpleServer.main(SimpleServer.java:13)
(Eu recebo o mesmo erro quando tento ligar o Tomcat a :: 1). Meu código:
public class SimpleHTTPServer {
public static void main(String args[]) throws Exception {
try (ServerSocket serverSocket = new ServerSocket(8080, 10, Inet6Address.getByName(args[0]))) {
String line;
String content = "Hello World!";
String response = "HTTP/1.0 200 OK\nContent-Type: text/plain\nContent-Length: " + content.length() + "\n\n" + content;
while (true) {
Socket socket = serverSocket.accept();
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeBytes(response);
}
}
}
}
EDIT2
Parece que há um problema com o JDK e IPv6 no OpenBSD, mesmo quando compilado com o sabor with_ipv6 ... No momento estou usando o relayd (8) para passar todos os pacotes IPv6 para o endereço IPv4 interno para o qual meu servidor está escutando.
EDIT3
O problema deve ter sido corrigido na última versão da porta do jdk.