Назад | Перейти на главную страницу

Мои правила nftables блокируют IPv6

Мой nftables.conf просто бежит flush ruleset затем includeмои правила брандмауэра. Я скопировал их из вики Arch. Итак, включенный firewall.rules содержит:

# An iptables-like firewall

table firewall {
  chain incoming {
    type filter hook input priority 0;

    # established/related connections
    ct state established,related accept

    # invalid connections
    ct state invalid drop

    # loopback interface
    iifname lo accept

    # icmp
    icmp type echo-request accept

    # open tcp ports
    tcp dport {http, https, ...} accept

    # open udp ports
    udp dport {...} accept

    # drop everything else
    drop
  }
}

table ip6 firewall {
  chain incoming {
    type filter hook input priority 0;

    # established/related connections
    ct state established,related accept

    # invalid connections
    ct state invalid drop

    # loopback interface
    iifname lo accept

    # icmp
    icmpv6 type {echo-request,nd-neighbor-solicit,nd-router-solicit,mld-listener-query} accept

    # open tcp ports
    tcp dport {http, https, ....} accept

    # open udp ports
    udp dport {...} accept

    # drop everything else
    drop
  }
}

Поэтому, когда все загружено, я не могу использовать IPv6, ping6 ошибки с

From ams16s21-in-x0e.1e100.net icmp_seq=1 Destination unreachable: Address unreachable

Однако, если я убегу sudo nft flush table ip6 firewall, ping6 сразу начинает работать как положено. Если я затем восстановлю таблицу брандмауэра ip6, подключение IPv6 не прервется сразу, но подождав несколько минут, я обнаружу ping6 команда, возвращающая вышеупомянутую ошибку.

Мой хостинг-провайдер не предоставляет никаких объявлений об автоконфигурации IPv6 или маршрутизаторов на сетевом уровне fwiw.

Кто-нибудь видел что-нибудь подобное раньше?

Вы отбрасываете слишком много типов ICMPv6. Большинство сообщений об ошибках должно быть разрешено из-за state established,related, но вы отбрасываете объявления о соседях и объявления маршрутизатора. Попробуй это:

icmpv6 type {echo-request,nd-neighbor-solicit,nd-neighbor-advert,nd-router-solicit,
             nd-router-advert,mld-listener-query} accept

Это позволит ввести нежелательные NA и RA, что, вероятно, решит вашу проблему.

Если вы хотите убедиться, что сообщения об ошибках также проходят (я не проверял, state established,related действительно работает для всех сообщений об ошибках ICMPv6), затем добавьте их:

icmpv6 type {echo-request,nd-neighbor-solicit,nd-neighbor-advert,nd-router-solicit,
             nd-router-advert,mld-listener-query,destination-unreachable,
             packet-too-big,time-exceeded,parameter-problem} accept

В этом нет необходимости, но на всякий случай :) Удаление сообщений об ошибках ICMPv6 приведет к серьезным задержкам или даже блокировке соединений, так что лучше этого избегайте :)

Подключение по IPv6 происходит не сразу, но подождав несколько минут, я обнаружил, что команда ping6 возвращает вышеупомянутую ошибку.

Думаю, вы сломали открытие соседки. Первоначально все продолжает работать, потому что у вас уже есть вещи в кеше обнаружения соседей, но позже время ожидания записей истекает.

Вы, кажется, разрешаете сообщения запроса соседа, но не сообщения объявления соседа.