Freebsd

在主機 ping 來賓之前,Bhyve + IPv6 無法從來賓 ping 到主機

  • October 20, 2017

主機/來賓都使用 FreeBSD 11.1,我使用vm-byhbe創建了 VM 。

這是主機配置/etc/rc.conf

ifconfig_igb0_ipv6="inet6 2a01:4f8:150:84ec::1 prefixlen 64"
ipv6_activate_all_interfaces="YES"
ipv6_defaultrouter="fe80::1%igb0"
rtadvd_enable="YES"

/etc/rtadvd.conf

igb0:\
       :addrs#1:addr="2a01:4f8:150:84ec::"\
       :prefixlen#64\
       :tc=ether\
       :rltime#0\
       :rdnss="2a01:4f8:150:84ec::1":

這是bhyve客人/etc/rc.conf

ifconfig_vtnet0_ipv6="inet6 accept_rtadv"
ipv6_defaultrouter="fe80::1%vtnet0"
rtsold_enable="YES"

這是ifconfig bridge0主機上的輸出:

bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   description: vm-public
   ether 02:e0:41:b7:a4:00
   nd6 options=1<PERFORMNUD>
   groups: bridge
   id 00:00:00:00:00:00 priority 0 hellotime 2 fwddelay 15
   maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
   root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
   member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
           ifmaxaddr 0 port 7 priority 128 path cost 2000000
   member: igb0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
           ifmaxaddr 0 port 1 priority 128 path cost 2000000[/CODE]

我發現的第一個問題是,在啟動VM後,需要一段時間才能獲得IP,在某些情況下我需要重新啟動rtadvd才能獲得IP,我在日誌中的錯誤是這個:

rtadvd[1871]: <getconfig> inet_pton failed for 2a01:4f8:150:84ec::

VM 獲得 IP 後,我可以 ping 其他主機,例如2001:4860:4860::8844,但不能 ping 主機本身,因此我無法解析到任何域,這是因為我在主機上使用unbound並且是我定義的 DNS (/etc/resolve.conf)。

到目前為止,我發現解決此問題的唯一方法是從主機 ping 到客戶機上的 IPv6,之後一切都按預期工作。

有什麼想法可能是錯的嗎?為了測試,我禁用了pf ( pfctl -d) 但仍然無法正常工作。

提前致謝。

我設法解決了這個問題,主要技巧是只使用橋接介面並啟用auto_linklocal它,如下所示:

ifconfig_bridge0_ipv6="inet6 2a01:4f8:350:84ec::1 prefixlen 64 auto_linklocal"
rtadvd_enable="YES"
rtadvd_interfaces="bridge0"

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