如何让虚拟机访问外网

简介: 让虚拟机(guest)能够访问外网的方法很多,这里介绍一个我所了解的最简单的办法:macvtap。 1. 设置libvirt的虚机配置xml文件的网络部分如下: 点击(此处)折叠或打开 !-- mac...

让虚拟机(guest)能够访问外网的方法很多,这里介绍一个我所了解的最简单的办法:macvtap。

1. 设置libvirt的虚机配置xml文件的网络部分如下:

点击(此处)折叠或打开

  1. !-- macvtap LAN - direct connection from host to guest -->
  2.       interface type='direct'>
  3.         mac address='02:00:00:12:01:02'/>
  4.         source dev='enccw0.0.f500' mode='bridge'/>
  5.         model type='virtio'/>
  6.         address type='pci' domain='0x0' bus='0x00' slot='0x07' function='0x0'/>
  7.       /interface>
这里的source dev就是guest想利用来上网的host上的网卡。mac address是虚机网卡的mac地址,不和host一样就行。如果是IBM主机,那么需要把address type替换成:

点击(此处)折叠或打开

  1. address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
2. 检查内核模块有没有包含macvtap功能:

lsmod|grep macvtap,如果有,则如下所示:

macvtap                24576  3 vhost_net
macvlan                24576  1 macvtap

如果没有,再检查内核符号表看看macvtap是不是被直接链接进内核里: grep macvtap /proc/kallsyms,如果能找到象macvtap_poll这样的函数,那么说明macvtap已经被链接到内核里。否则说明当前内核没有包含macvtap功能,需要把它加进去。方法同样有两种:

1) 通过模块加入:modprobe macvtap,如果成功,那么lsmod |grep macvtap就会找到内容。否则下载对应的内核版本(git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git),make defconfig,在.config里面加入CONFIG_MACVTAP=m和CONFIG_MACVLAN=m,make && make modules_install。新的模块应该会被安装到/lib/modules目录下,再次运行modprobe macvtap,这次应该可以成功。

2) 直接更新内核。跟1)一样下载内核,在.config里面加入CONFIG_MACVTAP=y和CONFIG_MACVLAN=y,运行make && make modules_install && make install,新的内核会被安装到/boot目录下。修改启动配置文件,让它指向新内核,重启系统。然后检查/proc/kallsyms,可以看到macvtap对应的函数已经在内核里,表示新内核已被安装使用。

3. 运行步骤1中定义的guest,如果xml文件里定义了dhcp网络方式,那么guest 网卡会自动从dhcp服务器获得ip地址,否则就需要自己设置ip地址如下: ifconfig eth0 192.168.0.100/24 up

这里的ip地址和子网掩码要设置成和host的eth0在一个网段里、并且没有使用的ip。

4. 测试网络:通过ping host网段里的其他机器可以知道guest网络是否已经连通,如果host可以连上外网,那么guest这时也应当能够连上外网。

原理如下:

这里App就是qemu。


参考文档:
http://wiki.libvirt.org/page/Networking

https://virt.kernelnewbies.org/MacVTap

目录
相关文章
|
7月前
|
存储 缓存 固态存储
VSAN存储故障导致虚拟机无法访问的VSAN数据恢复案例
VSAN数据恢复环境: 由四台某品牌服务器组建的VSAN集群,每台节点服务器上有两个磁盘组。每个磁盘组中有1块SSD硬盘+5块SAS硬盘,SSD作为闪存,SAS硬盘作为容量盘。 VSAN故障: VSAN集群中一个节点服务器上其中一个磁盘组中的容量盘出现故障离线,VSAN开始数据的重构迁移,数据迁移还没有完成的时候机房停电导致数据迁移中断。来电后启动所有设备后,管理员发现另一个磁盘组中的两块容量盘出现故障离线,VSAN数据存储出现问题。VSAN管理控制台可以登录,但是所有虚拟机都无法访问。
|
Linux 应用服务中间件 虚拟化
Linux系列——VMware虚拟机配置端口转发(端口映射),实现远程访问
Linux系列——VMware虚拟机配置端口转发(端口映射),实现远程访问
|
4月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
4月前
|
虚拟化
vmware虚拟机使用主机代理访问谷歌
vmware虚拟机使用主机代理访问谷歌
|
4月前
|
安全 网络安全
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
|
4月前
|
Ubuntu
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
59 0
|
6月前
|
Java API Maven
使用Java Libvirt API 访问虚拟机信息
使用Java Libvirt API 访问虚拟机信息
|
7月前
|
前端开发 Java 应用服务中间件
在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
在虚拟机的Windows操作系统中:通过Jar方式若依项目,以及在外部的访问!
196 1
|
大数据 Linux 网络安全
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
407 0
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
|
Ubuntu 网络安全 Apache
物理机不能访问虚拟机kali的web服务解决方案记录
物理机不能访问虚拟机kali的web服务解决方案记录
451 0