Чего я хочу добиться, так это получить доступ к веб-сайту на моей машине с OpenBSD, на котором есть IPv6, а у меня его нет. Для этого я использую Tunnel Broker и могу успешно подключиться по ssh к машине OpenBSD, используя ее IPv6-адрес.

На этом компьютере запущено веб-приложение с портом 8080, и я хочу получить к нему доступ с моего компьютера (использующего Tunnel Broker). Машина OpenBSD находится за модемом / маршрутизатором, но я разрешил все соединения, поступающие с IPv6, предоставленного мне Tunnel Broker.

Поэтому я предполагаю, что моя проблема связана с брандмауэром OpenBSD ... Я пробовал много разных правил, но ни одно из них не сработало. Вот последний, который я попробовал:

pass in proto tcp from any to nfe0 port 8080

Каждый раз я использую pfctl -nvf /etc/pf.conf для перезагрузки правил. Для проверки соединения я делаю:

$ curl -6 http://[ipv6]:8080
curl: (7) Failed to connect to ... port 8080: Connection refused

Я могу пинг6 машина без проблем ... Любая помощь будет принята с благодарностью :).

Я использую OpenBSD 6.0, и мой компьютер работает на macOS Sierra.

РЕДАКТИРОВАТЬ

Я создал очень простой HTTP-сервер в Java, который пытается прослушивать [::1]:8080, но я получаю следующую ошибку:

$ 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)

(Я получаю ту же ошибку при попытке связать Tomcat с ::1). Мой код:

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

Похоже, что есть проблема с JDK и IPv6 в OpenBSD, даже если они скомпилированы со вкусом with_ipv6 ... На данный момент я использую relayyd (8) для передачи всех пакетов IPv6 на внутренний адрес IPv4, который прослушивает мой сервер.

EDIT3

Проблема должна была быть исправлена в последней версии порта jdk.

1 ответ1

0

Проблема была исправлена.

http://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/devel/jdk/1.8/pkg/README-main?rev=1.2&content-type=text/x-cvsweb-markup

Устранить с_ipv6 вкус. ipv6 теперь будет включен в основной пакет по умолчанию. Однако ipv4 будет оставаться семейством адресов по умолчанию в пакете. Чтобы включить ipv6 (и отключить ipv4 в процессе), см. Пакет 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .