Ipv6

我的 nftables 規則阻止 IPv6

  • September 5, 2016

nftables.conf只是執行flush rulesetinclude的防火牆規則。我從 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 firewallping6立即開始按預期工作。如果我然後重新建立 ip6 防火牆表,IPv6 連接不會立即失敗,但等待幾分鐘我發現ping6命令返回上述錯誤。

我的託管服務提供商沒有在網路級別提供任何 IPv6 自動配置或路由器廣告。

以前有人見過這樣的事情嗎?

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 錯誤消息會導致嚴重的延遲甚至阻塞連接,所以最好避免這種情況:)

引用自:https://serverfault.com/questions/801131