红联Linux门户
Linux帮助

ubuntu/debian的网络设置对docker虚拟机和Vbox虚拟机的干扰

发布时间:2016-06-24 15:19:41来源:linux网站作者:明智十兵卫光秀

我办公的电脑现在用ubuntu,然后插个无线网卡,共享无线信号给手机和笔记本使用。ubuntu默认的配置无线网工具是network manager,进入方式就是在系统托盘。我用的是cinnamon界面,默认的ubuntu是unity界面,我的托盘在右下角,unity的托盘在右上角。具体这个的步骤我不废话了,网上很多说的。

这个不是问题本身,然而这个造成了一部分的问题。


使用Network manager创建无线网以后,它会把DNS配置更改掉。查看DNS配置可以打开文件/etc/resolv.conf,这个是网络配置好以后就会自动写入的一个配置文件。建议不要手动改写它,因为下次重启它又会被写成系统自动生成的,你改也没用。

但是,vbox虚拟机或者docker容器机,如果使用虚拟局域网上网的话,就有问题了。
vbox里面把这个模式叫NAT网络(NAT是NAT,NAT网络是NAT网络,一定要区分开),docker把这个叫桥接(bridge)。


具体的机理是,vbox或者docker,虚拟出一个局域网,然后你创建的所有虚拟机就在这个局域网里面得到一个IP,穿过这个局域网的模拟路由器(由vbox或者docker生成)连接外网。

但是如果network manager更改了配置,则vbox和docker的虚拟路由器都不能从宿主机器读取到正确的dns配置,这样虚拟出来的机器就没法上网了。


方法是更改vbox和docker的上网模式,让虚拟机的网络完全独立。假设你的工作电脑A通过vbox或者docker创建了一台虚拟机B,你同事的电脑C只要能够连通你的A,他也能一样连通B。如果B共享了文件,那么C也能够看到,无法区分这是真实还是虚拟的电脑。这样B的安全性就要格外留意。

这个模式在vbox里面叫桥接(bridge)或者网卡桥接(刚好和docker的NAT局域网模式叫同样的名字,千万别搞混了),但是在docker里面这个模式叫host。


vbox还有另外一个办法,就是使用NAT(而不是NAT网络),NAT和NAT网络的原理区别是,NAT的每一台虚拟机都分别独占一个虚拟的局域网,NAT网络是所有虚拟机共存在一个虚拟出来的局域网里。假设你有一台真实电脑A,你创建了虚拟机B和虚拟机D。如果你用NAT网络,那么B和D是在同一个虚拟的局域网里,他们可以互相连通。如果你使用NAT,那么你有两个虚拟的网卡,一个是和B专门连通,另外一个和D专门连通,B和D哪怕IP相同,他们彼此之间都不可见,因为完全不是在同一个局域网里。NAT可以自动被vbox连接到外网,靠的是vbox转发。但docker没有这种模式。


本文永久更新地址:http://www.linuxdiyf.com/linux/21801.html