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