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

Мой nftables.conf просто бежит flush ruleset затем includeмои правила брандмауэра. Я скопировал их из Arch wiki. Так что включены 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.

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

2 ответа

Решение

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

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

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

Вы отбрасываете слишком много типов 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 приведет к серьезным задержкам или даже блокированию соединений, поэтому лучше избегайте этого:)

Другие вопросы по тегам