Правило PF, открытие порта 8080 на OpenBSD с IPv6

Чего я хочу добиться, так это получить доступ к веб-сайту на моей машине с 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

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

Я использую 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 ответ

Решение

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

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
Другие вопросы по тегам