在VirtualBox里装了台Linux,NAT模式下虚拟机能上网,可局域网里另一台电脑怎么都连不上它开的服务。把网络改成桥接,问题当场就没了。
桥接网络的意思很直白:让虚拟机的网卡直接接到物理网卡所在的二层网络,和宿主机平起平坐,不再躲在后面。
它和NAT、仅主机差在哪
NAT是虚拟机借宿主机的地址出网,外面主动进不来,要进就得在虚拟化软件里做端口转发。仅主机模式更封闭,只有宿主机和虚拟机之间能通。
桥接最像一台独立机器:虚拟机会向路由器要一个和宿主机同网段的地址,同网段的其他设备能直接访问它,不用做任何转发。
代价是要占一个局域网地址。公司网络如果按MAC地址做准入,虚拟机可能拿不到地址,这不是配置错,是策略拦住了。
拿不到地址先查这几处
笔记本同时插着网线又连着Wi-Fi时,桥接容易绑错网卡。绑之前先在系统里看清当前上网用的是哪一块,名字别选错。
进系统敲一条查地址的命令,如果出现169.254开头的地址,说明DHCP没要到地址,问题在链路层,不在应用。
无线网卡有时不支持这种转发方式,旧驱动尤其明显。换成有线试一次,或者先切回NAT把服务跑通,再回来调网络。
地址会跟着网络变
桥接拿到的地址由路由器分配,换一个网络环境,地址就换一个。做联调时对方按旧地址连,一直连不上,还以为是服务挂了。
稳妥的做法是进路由器后台,按虚拟机的网卡物理地址绑定一个固定地址。这样换宿主机、重启虚拟机,地址都不变,同事的配置也不用改。
还有一种常见情况:换了办公网络,桥接列表里的网卡名字对不上,选了也没反应。回去重新选一次当前在用的那块网卡就行。
做抓包和协议调试时桥接特别方便,虚拟机的流量在物理网卡上就能看到,不用额外配镜像。这也是我在测试环境里优先选它的原因。
选哪种看需求
要让手机、同事的电脑直接访问虚拟机里的服务,选桥接;只让虚拟机上外网,NAT最省事,还不占局域网地址。
做开发测试,我一般加两块网卡:一块NAT保证能更新依赖,一块桥接方便联调,谁也不耽误谁。
判断桥接网络要不要用,只看方向:外部要进来就选它;只要出去,NAT。