发现ubuntu下安装vm tools后不能正常ipv6这个问题已经很久了,之前一直是舍弃vm tools保全ipv6。不过,这两天在用Instant Contiki,vm tools已经安装过了,在虚拟机用Google经常被墙,所以被迫还是得解决ipv6的问题。分享下解决这个问题的经历。
首先检查下虚拟机的网络环境是否是bridged,即网卡直连。vmware的nat方式应该不支持ipv6吧。。
之后,去ubuntu托盘,打开Network Manager,检查ipv6的状态。默认安装过vm tools之后,ipv6是ignore的状态。可以尝试下把Ingore改为Automatic或者Automatic Address Only/Automatic DHCP,不过,在我的网络环境下,IPV6地址是ipv6 stateless address autoconfiguration,尝试了几下均不可以。
继续尝试手动配置,Manual设置Address为2001:cc0:****:1032::999,网关从Windows主机下看到为2001:cc0:****::1,prefix64。此时外部地址依然无法ping通,估计是路由的问题了。route -v -6看下,果断没有下一跳路由。。。看到Network-Manager提供了routes选项,添加了几条路由,均不给力。。
现在看来,应该是vmware tools与Network-Manager的冲突引起的问题了,network-manager木有路由,在自身的routes下添加的路由也不起作用。
尴尬之下,Google看下Network-Manager的工作原理,基本上是在/etc/NetworkManager/system-connections/目录下读取配置,然后转化成相应的配置。。。同时,也会执行/etc/network/if-*.d/目录下的东东。
这样,类比于/etc/network/interfaces的up和down,在/etc/network/if-up/目录下新建一个bugfix,填入如下内容:
#!/bin/sh # set default route for inet6 if [ "$IFACE" = "eth0" ]; then route -A inet6 add 2000::/3 gw 2001:cc0:****:1032::1 fi
这样,开机之后就有inet6的路有了,问题搞定。
当然,根据/etc/network/interfaces与Network-Manager的优先级,也可以直接禁用掉Network-Manager,在/etc/network/interfaces中添加
iface eth0 inet dhcp iface eth0 inet6 static address 2001:cc0:****:1032::999 netmask 64 gateway 2001:cc0:****:1032::1

