如何让虚拟机访问外网

简介: 让虚拟机(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

目录
相关文章
|
8月前
|
大数据 Linux 网络安全
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
VirtualBox虚拟机里安装centos和虚拟机相互通讯和访问外网
|
8月前
|
运维 网络协议 虚拟化
【运维知识基础篇】虚拟机ping不通外网怎么解决
【运维知识基础篇】虚拟机ping不通外网怎么解决
510 0
|
8月前
|
网络协议 网络安全 虚拟化
虚拟机ping不通外网的原因
如果您在虚拟机中无法 ping 通外网,可能会有以下几个常见的原因: 1. 网络连接问题:确保虚拟机的网络连接正常。检查虚拟机的网络适配器设置,确保它已正确配置并连接到主机上的物理网络。 2. 网络设置问题:检查虚拟机的网络设置,确保网络设置正确。如果您使用的是桥接模式或 NAT 模式,请确保网络配置正确,并分配了正确的 IP 地址和网关。 3. 防火墙阻止:检查虚拟机内部和宿主机上的防火墙设置。确保防火墙允许 ICMP(ping)请求通过。 4. DNS 设置问题:检查虚拟机的 DNS 设置。尝试通过在虚拟机中执行 `ping 8.8.8.8` 来诊断,如果可以 ping 通 IP
3015 0
|
9月前
|
Ubuntu 网络协议 网络安全
i.mx287学习笔记-ubuntu虚拟机网络配置同时连接WIFI上外网和连接以太网与i.mx287开发板通信
在学习ARM嵌入式开发过程中,需要在ubuntu虚拟机下进行程序开发和编译,一般需要使用网线直连ARM开发板,或挂载NFS网络文件系统,或通过SSH 、TFTP等网络协议传输在PC端编译完的二进制文件,另一方面又需要使用ubuntu虚拟机连接外网,用来下载一些依赖包或者工具链等,本文介绍一种方法,使得ubuntu虚拟机既可以连接WIFI上外网,又可以连接ARM开发板进行其嵌入式开发。
131 0
|
11月前
|
虚拟化
vmware虚拟机挂起后无ip,无法ping外网
vmware虚拟机挂起后无ip,无法ping外网
113 0
|
Ubuntu Linux
虚拟机在桥接模式下,A类IP地址访问不了外网,C类则可以
虚拟机在桥接模式下,A类IP地址访问不了外网,C类则可以
173 0
虚拟机在桥接模式下,A类IP地址访问不了外网,C类则可以

热门文章

最新文章