主机/客户都使用FreeBSD 11.1,我使用vm-byhbe创build了虚拟机。
这是/etc/rc.conf主机configuration
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 guest /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]
我发现的第一个问题是启动虚拟机后,需要一段时间才能获得一个IP,在某些情况下,我需要重新启动rtadvd ,然后才能获得一个IP,我在日志中的错误是这样的:
rtadvd[1871]: <getconfig> inet_pton failed for 2a01:4f8:150:84ec::
虚拟机获得IP后,我可以ping其他主机,例如2001:4860:4860 :: 8844 ,但不是主机本身,因此我无法parsing到任何域,这是因为我在主机上使用unbound是我定义的DNS(/etc/resolve.conf)。
到目前为止,我发现解决这个问题的唯一方法是在客户端从主机ping到IPv6之后,一切按预期工作。
任何想法可能是错的? 为了testing,我禁用了pf ( pfctl -d ),但仍然无法正常工作。
提前致谢。
我设法解决这个问题 ,主要技巧是只使用网桥接口,并启用auto_linklocal ,就像这样:
ifconfig_bridge0_ipv6="inet6 2a01:4f8:350:84ec::1 prefixlen 64 auto_linklocal" rtadvd_enable="YES" rtadvd_interfaces="bridge0"