Chcę uzyskać dostęp do strony internetowej na mojej maszynie OpenBSD, która ma IPv6, a ja nie. W tym celu używam programu Tunnel Broker i mogę pomyślnie ssh do maszyny OpenBSD przy użyciu adresu IPv6.
Aplikacja internetowa jest uruchomiona na tym komputerze na porcie 8080 i chciałbym uzyskać do niej dostęp z mojego komputera (używającego programu Tunnel Broker). Maszyna OpenBSD znajduje się za modemem / routerem, ale zezwalam na wszystkie połączenia pochodzące z IPv6 przekazane mi przez Tunnel Broker.
Dlatego zgaduję, że mój problem dotyczy zapory OpenBSD ... Próbowałem wielu różnych reguł, ale żadna z nich nie działała. Oto ostatni próbowałem:
pass in proto tcp from any to nfe0 port 8080
Za każdym razem używam pfctl -nvf /etc/pf.conf
przeładować reguły. Aby przetestować połączenie:
$ curl -6 http://[ipv6]:8080
curl: (7) Failed to connect to ... port 8080: Connection refused
Mogę pingować maszynę bez problemu ... Każda pomoc byłaby bardzo mile widziane :)
Używam OpenBSD 6.0, a mój komputer jest na macOS Sierra.
EDYTOWAĆ
Stworzyłem bardzo prosty serwer HTTP w Javie, który próbuje nasłuchiwać na [:: 1]: 8080, ale pojawia się następujący błąd:
$ 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)
(Otrzymuję ten sam błąd, gdy próbuję powiązać Tomcat z :: 1). Mój kod:
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
Wygląda na to, że istnieje problem z JDK i IPv6 w OpenBSD, nawet gdy jest skompilowany ze smakiem with_ipv6 ... Na razie używam relayd (8) do przekazywania wszystkich pakietów IPv6 na wewnętrzny adres IPv4, do którego mój serwer jest słuchać.
EDIT3
Problem powinien zostać rozwiązany w najnowszej wersji portu jdk.
curl 127.0.0.1:8080
(z maszyny OpenBSD, używając ssh) i strona została poprawnie zwrócona ...