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

412
nyg

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

0
На самом деле вам нужно что-то слушать на порту 8080. Прямо сейчас у вас нет. Michael Hampton 7 лет назад 0
@MichaelHampton Ну да, у меня есть приложение Spring Boot, которое прослушивает порт 8080. Это то, что вы имеете в виду? nyg 7 лет назад 0
Откуда ты знаешь, что он слушает порт 8080? Вы проверили? Michael Hampton 7 лет назад 0
@MichaelHampton Да, я могу, например, сделать `curl 127.0.0.1: 8080` (с машины OpenBSD, используя ssh), и страница будет возвращена правильно ... nyg 7 лет назад 0
Nonono, вы не тестировали подключение IPv6! Это не прослушивание на IPv6. О чем вы спрашивали! Michael Hampton 7 лет назад 0
@MichaelHampton Действительно, `netstat -an` показывает мне, что он слушает только IPv4 ... Я безуспешно пытался заставить Tomcat прослушивать IPv6, возможно, это проблема с OpenBSD & Java ... (Я получаю ошибку Java "семейство протоколов недоступно") nyg 7 лет назад 0

1 ответ на вопрос

0
nyg

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

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 

Похожие вопросы