Freebsd

公共 IPv6 在 KVM 網橋上失敗並顯示“沒有可用的緩衝區空間”

  • May 23, 2017

我已經在 Freenode 的 #networking 和 #freebsd IRC 頻道上問過這個問題,但是沒有人能夠回答我的問題並將我轉發到這裡,因為這個問題似乎很容易解決。

我有一個 Proxmox 虛擬機管理程序,其中託管來自 Debian 9、Arch Linux 和 Windows 的 LXC 容器和 KVM 機器。它們都橋接到管理程序,IPv6 堆棧與我的 ISP 提供的公共 IP 地址完美地工作,並直接路由到虛擬機。

我擁有的 VM 之一是 OPNsense 防火牆設備(基於 FreeBSD 11.0-RELEASE-p8)。

與其他 LXC/KVM 不同的是,後者無法 ping 通可直接從網橋訪問的 IPv6 機器之外的任何 IPv6 機器。當我嘗試 ping 我的管理程序的網關(仍在 IPv6 中)或任何其他遙遠的 IPv6 主機(例如 google.com)時,我收到以下錯誤消息:

[...]
ping6: sendmsg: No buffer space available
[...]
  • 起初,我認為問題是由於 VirtIO 驅動程序(與 FreeBSD 捆綁)的問題。所以我切換到模擬 Intel E1000 NIC,但問題仍然存在。(我現在又回到了 VirtIO)。
  • netstat -m 將緩衝區報告為空,因此問題也不來自這裡。
  • 再次關閉和重新啟動介面或重新啟動並不能解決問題
  • 我使用全新的 FreeBSD 和 OpenBSD 安裝進行了測試(以避免 OPNsense 覆蓋),但問題仍然存在。

從橋接器或完全在基礎架構之外的機器 ping 虛擬機沒有響應,也沒有連接(即我在 2222 上啟動了 sshd,但無法連接)。

FreeBSD 主機配置如下:

ifconfig vtnet0 <ipv4>/32
route add <gw ipv4> -iface vtnet0
route add default <gw ipv4>

ifconfig vtnet0 inet6 <ipv6> prefixlen 64
route add -inet6 <gw ipv6> -iface vtnet0
route add -inet6 default <gw ipv6>

請注意,我所有的 GW 都在我的 IP 子網之外。

應用這些行後, netstat -rn 報告的路由對我來說是明智的。沒有什麼不對。

我精確地完全禁用了 pf 防火牆(pfctl -d)。我想確保它在啟用另一個級別的故障之前完美執行。:)

BSD IPv6 堆棧中的某個地方是否存在錯誤,因為 Linux 根本沒有抱怨?這聽起來很奇怪,因為我認為在這種情況下我不是唯一一個,也不是唯一一個在其 IP 範圍之外擁有 GW 的人。

提前感謝您的時間/幫助。

問候。

也在 freebsd-net 郵件列表上詢問

在與 OPNsense 背後的公司的一些人討論之後,我已經能夠解決我的問題。

我的遠端網關在 /56。即使我的 IPv6 不是 /56,使用 /56 前綴而不是 /64 設置我的 IPv6 也解決了我的問題。

這是因為 FreeBSD 的 IPv6 NDP 實現無法找到不被視為直接鄰居的網關 IPv6 地址。

-> 連結到 FreeBSD 郵件列表上的主題。

引用自:https://unix.stackexchange.com/questions/365502