regra PF, abrindo a porta 8080 no OpenBSD com IPv6

0

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.

    
por nyg 12.01.2017 / 20:12

1 resposta

0

O problema foi corrigido.

link

Eliminiate with_ipv6 FLAVOR. ipv6 will be included in the main package by default now. However ipv4 will continue to be the default address family in the package. To enable ipv6 (and disable ipv4 in the process), see package README's.

README:

ipv4 to ipv6 address mapping is disabled on OpenBSD. This means the
jdk can only use ipv4 addresses or ipv6 addresses but not both at
the same time. By default ipv4 addresses are enabled. To use ipv6
addresses set the following properties when you start java:

-Djava.net.preferIPv4Stack=false
-Djava.net.preferIPv6Stack=true
-Djava.net.preferIPv6Addresses=true
    
por 23.08.2017 / 19:51