Was ich erreichen möchte, ist den Zugriff auf eine Website auf meinem OpenBSD-Computer, die über ein IPv6 verfügt, während dies nicht der Fall ist. Hierfür verwende ich Tunnel Broker und kann mit seiner IPv6-Adresse erfolgreich ssh in den OpenBSD-Rechner einbinden.
Auf diesem Computer wird eine Web-App auf Port 8080 ausgeführt, und ich möchte von meinem Computer (der Tunnel Broker verwendet) darauf zugreifen. Die OpenBSD-Maschine befindet sich hinter einem Modem / Router, aber ich habe alle Verbindungen zugelassen, die von IPv6 stammen, das mir Tunnel Broker gegeben hat.
Ich vermute also, mein Problem hat mit der OpenBSD-Firewall zu tun ... Ich habe viele verschiedene Regeln ausprobiert, aber keine hat funktioniert. Hier ist der letzte, den ich ausprobiert habe:
pass in proto tcp from any to nfe0 port 8080
Jedes Mal, wenn ich pfctl -nvf /etc/pf.confdie Regeln nachlade. Um die Verbindung zu testen, mache ich:
$ curl -6 http://[ipv6]:8080 curl: (7) Failed to connect to ... port 8080: Connection refused
Ich kann die Maschine ohne Probleme ping6 ... Jede Hilfe wäre sehr dankbar :).
Ich verwende OpenBSD 6.0 und mein Rechner ist auf macOS Sierra.
BEARBEITEN
Ich habe einen sehr einfachen HTTP-Server in Java erstellt, der versucht, [:: 1]: 8080 abzuhören, aber ich erhalte die folgende Fehlermeldung:
$ 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)
(Ich erhalte dieselbe Fehlermeldung, wenn ich versuche, Tomcat an :: 1 zu binden). Mein Code:
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
Es scheint, dass es ein Problem mit dem JDK und IPv6 unter OpenBSD gibt, selbst wenn mit with_ipv6 kompiliert wird ... Im Moment verwende ich relayd (8), um alle IPv6-Pakete an die interne IPv4-Adresse weiterzuleiten, auf der sich mein Server befindet hören.
EDIT3
Das Problem sollte in der neuesten Version des jdk-Ports behoben sein.
Sie müssen tatsächlich etwas an Port 8080 hören. Im Moment tun Sie das nicht.
Michael Hampton vor 7 Jahren
0
@MichaelHampton Nun ja, ich habe eine Spring Boot-Anwendung, die Port 8080 abhört. Ist das das, was du meinst?
nyg vor 7 Jahren
0
Woher wissen Sie, dass es Port 8080 abhört? Hast du kontrolliert?
Michael Hampton vor 7 Jahren
0
@MichaelHampton Ja, ich kann zum Beispiel `curl 127.0.0.1: 8080` (von der OpenBSD-Maschine mit ssh) machen und die Seite wird korrekt zurückgegeben ...
nyg vor 7 Jahren
0
Nonono, Sie haben die IPv6-Konnektivität nicht getestet! Es hört nicht auf IPv6. Worüber haben Sie gefragt!
Michael Hampton vor 7 Jahren
0
@MichaelHampton Tatsächlich zeigt "netstat -an", dass ich nur IPv4-Abhören lernte ... Ich habe erfolglos versucht, Tomcat auf IPv6-Abhören zu lenken, vielleicht ist dies ein Problem mit OpenBSD & Java ... (Der Java-Fehler bekomme ich ist "Protokollfamilie nicht verfügbar")
nyg vor 7 Jahren
0
Eliminiate with_ipv6 FLAVOUR. ipv6 wird jetzt standardmäßig in das Hauptpaket aufgenommen. Ipv4 ist jedoch weiterhin die Standardadressfamilie im Paket. Informationen zum Aktivieren von ipv6 (und zum Deaktivieren von ipv4 dabei) finden Sie in den README-Paketen des Pakets.
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