Open main menu
首页
专栏
课程
分类
归档
Chat
Sci-Hub
谷歌学术
Libgen
GitHub镜像
登录/注册
搜索
关闭
Previous
Previous
Next
Next
macvtap使用教程
sockstack
/
286
/
2023-11-14 11:50:38
<p><span style="color: red; font-size: 18px">ChatGPT 可用网址,仅供交流学习使用,如对您有所帮助,请收藏并推荐给需要的朋友。</span><br><a href="https://ckai.xyz/?sockstack§ion=detail" target="__blank">https://ckai.xyz</a><br><br></p> <article class="_2rhmJa"><p><a href="https://links.jianshu.com/go?to=sealyun.com" target="_blank">kubernetes一键安装</a></p> <p>macvtap是虚拟机网络虚拟化常用的一种技术,当然容器也可以用. MACVTAP 的实现基于传统的 MACVLAN. 和 TAP 设备一样,每一个 MACVTAP 设备拥有一个对应的 Linux 字符设备,并拥有和 TAP 设备一样的 IOCTL 接口,因此能直接被 KVM/Qemu使用,方便地完成网络数据交换工作. 引入 MACVTAP 设备的目标是:简化虚拟化环境中的交换网络,代替传统的 Linux TAP 设备加 Bridge 设备组合,同时支持新的虚拟化网络技术,如 802.1 Qbg.</p> <p>如kata的虚拟化网络就用了这个技术,以下实践完就会对kata的网络原理比较清楚了,建议对照教程动手实践.</p> <h1>实验环境介绍</h1> <br> <p>此图非常重要,读整篇文章最好脑海里都有</p> <h1>初始化环境</h1> <h2>qemu libvirt环境</h2> <p>我已经做好了qemu libvirt的镜像,大家可以直接使用:<br> 在容器中有非常多的好处,环境如果乱了可以快速恢复干净的环境。<br> 使用设备对也可减少对宿主机网络的影响。</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-jsx"><code class=" language-jsx">docker run <span class="token operator">-</span>d <span class="token operator">--</span>privileged <span class="token operator">-</span>v <span class="token operator">/</span>dev<span class="token punctuation">:</span><span class="token operator">/</span>dev <span class="token operator">-</span>v <span class="token operator">/</span>home<span class="token operator">/</span>fanux<span class="token punctuation">:</span><span class="token operator">/</span>root <span class="token operator">--</span>name qemu<span class="token operator">-</span>vm fanux<span class="token operator">/</span>libvirt<span class="token punctuation">:</span>latest init <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>注意:</p> <ol> <li>网络等操作需要容器有特权模式</li> <li>tap网络需要挂载/dev目录</li> <li>/home/fanux可以作为工作目录,镜像自己编写的libvirt配置等放在里面防止删除容器后丢失</li> <li>由于libvirt需要systemd所以我们在容器中启动init进程</li> </ol> <p>也可自己构建镜像,我提供了一个Dockerfile, -j参数根据你机器CPU来设置编译时的线程数:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-go"><code class=" language-go">FROM centos<span class="token punctuation">:</span><span class="token number">7.6</span><span class="token number">.1810</span> RUN yum install <span class="token operator">-</span>y wget <span class="token operator">&&</span> wget https<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>download<span class="token punctuation">.</span>qemu<span class="token punctuation">.</span>org<span class="token operator">/</span>qemu<span class="token operator">-</span><span class="token number">4.0</span><span class="token number">.0</span><span class="token punctuation">.</span>tar<span class="token punctuation">.</span>xz <span class="token operator">&&</span> \ tar xvJf qemu<span class="token operator">-</span><span class="token number">4.0</span><span class="token number">.0</span><span class="token punctuation">.</span>tar<span class="token punctuation">.</span>xz \ <span class="token operator">&&</span> yum install <span class="token operator">-</span>y automake gcc<span class="token operator">-</span>c<span class="token operator">++</span> gcc <span class="token builtin">make</span> autoconf libtool gtk2<span class="token operator">-</span>devel \ <span class="token operator">&&</span> cd qemu<span class="token operator">-</span><span class="token number">4.0</span><span class="token number">.0</span> \ <span class="token operator">&&</span> <span class="token punctuation">.</span><span class="token operator">/</span>configure \ <span class="token operator">&&</span> <span class="token builtin">make</span> <span class="token operator">-</span>j <span class="token number">72</span> <span class="token operator">&&</span> <span class="token builtin">make</span> install \ <span class="token operator">&&</span> yum install <span class="token operator">-</span>y bridge<span class="token operator">-</span>utils <span class="token operator">&&</span> yum install <span class="token operator">-</span>y net<span class="token operator">-</span>tools tunctl iproute <span class="token operator">&&</span> yum <span class="token operator">-</span>y install openssh<span class="token operator">-</span>clients \ cd <span class="token punctuation">.</span><span class="token punctuation">.</span> <span class="token operator">&&</span> rm qemu<span class="token operator">-</span><span class="token number">4.0</span><span class="token number">.0</span><span class="token punctuation">.</span>tar<span class="token punctuation">.</span>xz <span class="token operator">&&</span> rm <span class="token operator">-</span>rf qemu<span class="token operator">-</span><span class="token number">4.0</span><span class="token number">.0</span> RUN yum install <span class="token operator">-</span>y libvirt virt<span class="token operator">-</span>manager gustfish openssh<span class="token operator">-</span>clients <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <h2>虚拟机镜像</h2> <p>进入容器</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">[root@compute84 libvirt]# docker exec -it qemu-vm bash bash-4.2# cd bash-4.2# ls CentOS-7-x86_64-GenericCloud.qcow2 centos.qcow2 image nohup.out start.sh vm3.xml CentOS-7-x86_64-Minimal-1810.iso cloud-init-start.sh kernel qemu vm.xml Fedora-Cloud-Base-30-1.2.x86_64.qcow2 destroy.sh libvirt run.sh vm2.xml <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>下载虚拟机镜像:</p> <p>openstack已经提供很多已经装过cloud-init的镜像,地址:<br> <a href="https://links.jianshu.com/go?to=https%3A%2F%2Fdocs.openstack.org%2Fimage-guide%2Fobtain-images.html" target="_blank">https://docs.openstack.org/image-guide/obtain-images.html</a></p> <p>我用的一个比较新的centos的qcow2格式镜像:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-cpp"><code class=" language-cpp">wget http<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>cloud<span class="token punctuation">.</span>centos<span class="token punctuation">.</span>org<span class="token operator">/</span>centos<span class="token operator">/</span><span class="token number">7</span><span class="token operator">/</span>images<span class="token operator">/</span>CentOS<span class="token operator">-</span><span class="token number">7</span><span class="token operator">-</span>x86_64<span class="token operator">-</span>GenericCloud<span class="token operator">-</span><span class="token number">1905.</span>qcow2 <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>修改虚拟机root密码:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">virt-customize -a CentOS-7-x86_64-GenericCloud.qcow2 --root-password <span class="token property">password</span><span class="token punctuation">:</span>coolpass <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <h2>启动虚拟机</h2> <p>查看容器网络信息:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">bash<span class="token operator">-</span><span class="token number">4.2</span><span class="token comment"># systemctl start libvirtd</span> bash<span class="token operator">-</span><span class="token number">4.2</span><span class="token comment"># ip addr</span> <span class="token number">1</span><span class="token punctuation">:</span> lo<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">LOOPBACK</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">65536</span> qdisc noqueue state <span class="token constant">UNKNOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>loopback <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> brd <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> inet <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token operator">/</span><span class="token number">8</span> scope host lo valid_lft forever preferred_lft forever inet6 <span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">128</span> scope host valid_lft forever preferred_lft forever <span class="token number">2</span><span class="token punctuation">:</span> virbr0<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">NO</span><span class="token operator">-</span><span class="token constant">CARRIER</span><span class="token punctuation">,</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc noqueue state <span class="token constant">DOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token symbol">:c6</span><span class="token punctuation">:</span><span class="token number">59</span><span class="token punctuation">:</span><span class="token number">47</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> inet <span class="token number">192.168</span><span class="token number">.122</span><span class="token number">.1</span><span class="token operator">/</span><span class="token number">24</span> brd <span class="token number">192.168</span><span class="token number">.122</span><span class="token number">.255</span> scope global virbr0 valid_lft forever preferred_lft forever <span class="token number">3</span><span class="token punctuation">:</span> virbr0<span class="token operator">-</span>nic<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc pfifo_fast master virbr0 state <span class="token constant">DOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token symbol">:c6</span><span class="token punctuation">:</span><span class="token number">59</span><span class="token punctuation">:</span><span class="token number">47</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> <span class="token number">1310</span><span class="token punctuation">:</span> eth0<span class="token variable">@if1311</span><span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc noqueue state <span class="token constant">UP</span> group default link<span class="token operator">/</span>ether <span class="token number">02</span><span class="token punctuation">:</span><span class="token number">42</span><span class="token symbol">:ac</span><span class="token punctuation">:</span><span class="token number">11</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">02</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> link<span class="token operator">-</span>netnsid <span class="token number">0</span> inet <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span><span class="token operator">/</span><span class="token number">16</span> scope global eth0 valid_lft forever preferred_lft forever inet6 fe80<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">42</span><span class="token symbol">:acff</span><span class="token symbol">:fe11</span><span class="token punctuation">:</span><span class="token number">2</span><span class="token operator">/</span><span class="token number">64</span> scope link valid_lft forever preferred_lft forever <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>1,2,3是libvirt创建的可以忽略,最主要是eth0</p> <h3>编写libvirt配置</h3> <p>vm3.xml:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-xml"><code class=" language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>domain</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>kvm<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>vm3<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>memory</span> <span class="token attr-name">unit</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>MiB<span class="token punctuation">'</span></span><span class="token punctuation">></span></span>2048<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>memory</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>currentMemory</span> <span class="token attr-name">unit</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>MiB<span class="token punctuation">'</span></span><span class="token punctuation">></span></span>2048<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>currentMemory</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>os</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>type</span> <span class="token attr-name">arch</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>x86_64<span class="token punctuation">'</span></span><span class="token punctuation">></span></span>hvm<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>type</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>boot</span> <span class="token attr-name">dev</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>hd<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>os</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>clock</span> <span class="token attr-name">offset</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>utc<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>on_poweroff</span><span class="token punctuation">></span></span>destroy<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>on_poweroff</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>on_reboot</span><span class="token punctuation">></span></span>restart<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>on_reboot</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>on_crash</span><span class="token punctuation">></span></span>destroy<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>on_crash</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>devices</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>emulator</span><span class="token punctuation">></span></span>/usr/local/bin/qemu-system-x86_64<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>emulator</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>disk</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>file<span class="token punctuation">'</span></span> <span class="token attr-name">device</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>disk<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>driver</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>qemu<span class="token punctuation">'</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>qcow2<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>source</span> <span class="token attr-name">file</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>/root/CentOS-7-x86_64-GenericCloud.qcow2<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>target</span> <span class="token attr-name">dev</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>vda<span class="token punctuation">'</span></span> <span class="token attr-name">bus</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>virtio<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>disk</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>interface</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>direct<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>source</span> <span class="token attr-name">dev</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>eth0<span class="token punctuation">'</span></span> <span class="token attr-name">mode</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>bridge<span class="token punctuation">'</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>model</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>virtio<span class="token punctuation">'</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>driver</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>vhost<span class="token punctuation">'</span></span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>interface</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>serial</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>pty<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>target</span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>0<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>serial</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>console</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>pty<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>target</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>serial<span class="token punctuation">'</span></span> <span class="token attr-name">port</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>0<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>console</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>devices</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>domain</span><span class="token punctuation">></span></span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>这里配置正确镜像地址,interface的地方是macvtap相关的配置。</p> <h3>启动虚拟机</h3> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">bash<span class="token operator">-</span><span class="token number">4.2</span># virsh define vm3<span class="token punctuation">.</span>xml <span class="token class-name">Domain</span> vm3 defined <span class="token keyword">from</span> vm3<span class="token punctuation">.</span>xml bash<span class="token operator">-</span><span class="token number">4.2</span># virsh start vm3 <span class="token class-name">Domain</span> vm3 started <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>启动完后就可以看到macvtap设备被创建出来了</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby">bash<span class="token operator">-</span><span class="token number">4.2</span><span class="token comment"># ip addr</span> <span class="token number">7</span><span class="token punctuation">:</span> macvtap0<span class="token variable">@eth0</span><span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc pfifo_fast state <span class="token constant">UP</span> group default qlen <span class="token number">500</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">56</span><span class="token symbol">:e4</span><span class="token punctuation">:</span><span class="token number">20</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> inet6 fe80<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">5054</span><span class="token symbol">:ff</span><span class="token symbol">:fe56</span><span class="token symbol">:e420</span><span class="token operator">/</span><span class="token number">64</span> scope link valid_lft forever preferred_lft forever <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>进入到虚拟机:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-jsx"><code class=" language-jsx">virsh console vm3 <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>如果卡在这一步:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-kotlin"><code class=" language-kotlin">A start job <span class="token keyword">is</span> running <span class="token keyword">for</span> LSB<span class="token operator">:</span> Bri<span class="token operator">..</span><span class="token punctuation">.</span> networking cloud<span class="token operator">-</span><span class="token keyword">init</span><span class="token punctuation">[</span><span class="token number">2253</span><span class="token punctuation">]</span><span class="token operator">:</span> <span class="token number">2019</span><span class="token operator">-</span><span class="token number">06</span><span class="token operator">-</span><span class="token number">27</span> <span class="token number">08</span><span class="token operator">:</span><span class="token number">37</span><span class="token operator">:</span><span class="token number">09</span><span class="token punctuation">,</span><span class="token number">971</span> <span class="token operator">-</span> url_helper<span class="token punctuation">.</span>py<span class="token punctuation">[</span>WARNING<span class="token punctuation">]</span><span class="token operator">:</span> Calling <span class="token string">'http://192.168.122.1/latest/meta-data/instance-id'</span> failed <span class="token punctuation">[</span><span class="token number">87</span><span class="token operator">/</span>120s<span class="token punctuation">]</span><span class="token operator">:</span> request error <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>等它超时就好,因为macvtap时我们需要进入虚拟机去配置网络。<br> 然后就可以进入虚拟机了:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">CentOS Linux 7 <span class="token punctuation">(</span>Core<span class="token punctuation">)</span> Kernel 3.10.0-957.1.3.el7.x86_64 on an x86_64 localhost <span class="token property">login</span><span class="token punctuation">:</span> root <span class="token property">Password</span><span class="token punctuation">:</span> Last <span class="token property">login</span><span class="token punctuation">:</span> Thu Jun 27 07<span class="token punctuation">:</span>19<span class="token punctuation">:</span>32 from gateway <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>密码是我们上面设置的镜像密码:coolpass</p> <h3>配置虚拟机IP</h3> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby"><span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip addr</span> <span class="token number">1</span><span class="token punctuation">:</span> lo<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">LOOPBACK</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">65536</span> qdisc noqueue state <span class="token constant">UNKNOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>loopback <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> brd <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> inet <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token operator">/</span><span class="token number">8</span> scope host lo valid_lft forever preferred_lft forever inet6 <span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">128</span> scope host valid_lft forever preferred_lft forever <span class="token number">2</span><span class="token punctuation">:</span> eth0<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc pfifo_fast state <span class="token constant">UP</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">56</span><span class="token symbol">:e4</span><span class="token punctuation">:</span><span class="token number">20</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> inet6 fe80<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">5054</span><span class="token symbol">:ff</span><span class="token symbol">:fe56</span><span class="token symbol">:e420</span><span class="token operator">/</span><span class="token number">64</span> scope link valid_lft forever preferred_lft forever <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby"><span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip addr add 172.17.0.2/16 dev eth0</span> <span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip route add default via 172.17.0.1 dev eth0</span> <span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip addr</span> <span class="token number">1</span><span class="token punctuation">:</span> lo<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">LOOPBACK</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">65536</span> qdisc noqueue state <span class="token constant">UNKNOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>loopback <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> brd <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> inet <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token operator">/</span><span class="token number">8</span> scope host lo valid_lft forever preferred_lft forever inet6 <span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">128</span> scope host valid_lft forever preferred_lft forever <span class="token number">2</span><span class="token punctuation">:</span> eth0<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc pfifo_fast state <span class="token constant">UP</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">56</span><span class="token symbol">:e4</span><span class="token punctuation">:</span><span class="token number">20</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> inet <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span><span class="token operator">/</span><span class="token number">16</span> scope global eth0 valid_lft forever preferred_lft forever inet6 fe80<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">5054</span><span class="token symbol">:ff</span><span class="token symbol">:fe56</span><span class="token symbol">:e420</span><span class="token operator">/</span><span class="token number">64</span> scope link valid_lft forever preferred_lft forever <span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip route </span> default via <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span> dev eth0 <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.0</span><span class="token operator">/</span><span class="token number">16</span> dev eth0 proto kernel scope link src <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span> <span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ping 172.17.0.1</span> <span class="token constant">PING</span> <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span> <span class="token punctuation">(</span><span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">)</span> <span class="token number">56</span><span class="token punctuation">(</span><span class="token number">84</span><span class="token punctuation">)</span> bytes of data<span class="token punctuation">.</span> <span class="token number">64</span> bytes from <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span> icmp_seq<span class="token operator">=</span><span class="token number">1</span> ttl<span class="token operator">=</span><span class="token number">64</span> time<span class="token operator">=</span><span class="token number">0.622</span> ms <span class="token number">64</span> bytes from <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span> icmp_seq<span class="token operator">=</span><span class="token number">2</span> ttl<span class="token operator">=</span><span class="token number">64</span> time<span class="token operator">=</span><span class="token number">0.194</span> ms <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>配置完后就可以ping通网关了。</p> <h4>修改DNS配置</h4> <p>这个不改可能会导致ssh时非常慢:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp"><span class="token punctuation">[</span>root@localhost <span class="token operator">~</span><span class="token punctuation">]</span># cat <span class="token operator">/</span>etc<span class="token operator">/</span>resolv<span class="token punctuation">.</span>conf <span class="token punctuation">;</span> <span class="token class-name">Created</span> by cloud<span class="token operator">-</span>init on instance boot automatically<span class="token punctuation">,</span> <span class="token keyword">do</span> not edit<span class="token punctuation">.</span> <span class="token punctuation">;</span> <span class="token punctuation">;</span> generated by <span class="token operator">/</span>usr<span class="token operator">/</span>sbin<span class="token operator">/</span>dhclient<span class="token operator">-</span>script nameserver <span class="token number">114.114</span><span class="token number">.114</span><span class="token number">.114</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <h4>修改sshd配置</h4> <p>修改/etc/ssh/sshd-config文件,将其中的PermitRootLogin no修改为yes,PubkeyAuthentication yes修改为no,AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉,PasswordAuthentication no修改为yes就可以了。</p> <h4>启动ssh客户端容器</h4> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp">docker run <span class="token operator">--</span>rm <span class="token operator">-</span>it fanux<span class="token operator">/</span>libvirt bash <span class="token punctuation">[</span>root@ee18547e9ed2 <span class="token operator">/</span><span class="token punctuation">]</span># ssh root@<span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span> ssh<span class="token punctuation">:</span> connect to host <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span> port <span class="token number">22</span><span class="token punctuation">:</span> <span class="token class-name">Connection</span> refused <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span></span></code></pre> </div> <p>会发现不通, 这是因为容器里的eth0和虚拟机里的eth0都配置了相同的地址导致,只需要把容器里的eth0地址删掉即可:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-bash"><code class=" language-bash">bash-4.2# ip addr del 172.17.0.2/16 dev eth0 <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>再次ssh即可进入虚拟机:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-ruby"><code class=" language-ruby"><span class="token punctuation">[</span>root<span class="token variable">@ee18547e9ed2</span> <span class="token operator">/</span><span class="token punctuation">]</span><span class="token comment"># ssh root@172.17.0.2</span> <span class="token constant">The</span> authenticity of host <span class="token string">'172.17.0.2 (172.17.0.2)'</span> can't be established<span class="token punctuation">.</span> <span class="token constant">ECDSA</span> key fingerprint is <span class="token constant">SHA256</span><span class="token symbol">:kTk3yy8588WQHNtwpzS</span><span class="token operator">+</span>h6u0W3RELWC8hJQwIwLOkdc<span class="token punctuation">.</span> <span class="token constant">ECDSA</span> key fingerprint is <span class="token constant">MD5</span><span class="token punctuation">:</span><span class="token number">0</span>c<span class="token symbol">:f3</span><span class="token symbol">:b5</span><span class="token punctuation">:</span><span class="token number">69</span><span class="token symbol">:c6</span><span class="token punctuation">:</span><span class="token number">08</span><span class="token punctuation">:</span><span class="token number">05</span><span class="token punctuation">:</span><span class="token number">14</span><span class="token symbol">:f8</span><span class="token symbol">:da</span><span class="token punctuation">:</span><span class="token number">42</span><span class="token punctuation">:</span><span class="token number">2</span>f<span class="token punctuation">:</span><span class="token number">85</span><span class="token punctuation">:</span><span class="token number">29</span><span class="token punctuation">:</span><span class="token number">51</span><span class="token symbol">:d0</span><span class="token punctuation">.</span> <span class="token constant">Are</span> you sure you want to continue connecting <span class="token punctuation">(</span>yes<span class="token operator">/</span>no<span class="token punctuation">)</span><span class="token operator">?</span> yes <span class="token constant">Warning</span><span class="token punctuation">:</span> <span class="token constant">Permanently</span> added <span class="token string">'172.17.0.2'</span> <span class="token punctuation">(</span><span class="token constant">ECDSA</span><span class="token punctuation">)</span> to the list of known hosts<span class="token punctuation">.</span> root@<span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span>'s password<span class="token punctuation">:</span> <span class="token constant">Last</span> login<span class="token punctuation">:</span> <span class="token constant">Thu</span> <span class="token constant">Jun</span> <span class="token number">27</span> <span class="token number">08</span><span class="token punctuation">:</span><span class="token number">38</span><span class="token punctuation">:</span><span class="token number">00</span> <span class="token number">2019</span> <span class="token punctuation">[</span>root<span class="token variable">@localhost</span> <span class="token operator">~</span><span class="token punctuation">]</span><span class="token comment"># ip addr</span> <span class="token number">1</span><span class="token punctuation">:</span> lo<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">LOOPBACK</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">65536</span> qdisc noqueue state <span class="token constant">UNKNOWN</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>loopback <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> brd <span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">00</span> inet <span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token operator">/</span><span class="token number">8</span> scope host lo valid_lft forever preferred_lft forever inet6 <span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token operator">/</span><span class="token number">128</span> scope host valid_lft forever preferred_lft forever <span class="token number">2</span><span class="token punctuation">:</span> eth0<span class="token punctuation">:</span> <span class="token operator"><</span><span class="token constant">BROADCAST</span><span class="token punctuation">,</span><span class="token constant">MULTICAST</span><span class="token punctuation">,</span><span class="token constant">UP</span><span class="token punctuation">,</span><span class="token constant">LOWER_UP</span><span class="token operator">></span> mtu <span class="token number">1500</span> qdisc pfifo_fast state <span class="token constant">UP</span> group default qlen <span class="token number">1000</span> link<span class="token operator">/</span>ether <span class="token number">52</span><span class="token punctuation">:</span><span class="token number">54</span><span class="token punctuation">:</span><span class="token number">00</span><span class="token punctuation">:</span><span class="token number">56</span><span class="token symbol">:e4</span><span class="token punctuation">:</span><span class="token number">20</span> brd ff<span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span><span class="token symbol">:ff</span> inet <span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.2</span><span class="token operator">/</span><span class="token number">16</span> scope global eth0 valid_lft forever preferred_lft forever inet6 fe80<span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">5054</span><span class="token symbol">:ff</span><span class="token symbol">:fe56</span><span class="token symbol">:e420</span><span class="token operator">/</span><span class="token number">64</span> scope link valid_lft forever preferred_lft forever <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <h4>修改虚拟机mac地址</h4> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">[root@localhost ~]# ip link set eth0 address 52<span class="token punctuation">:</span>54<span class="token punctuation">:</span>00<span class="token punctuation">:</span>56<span class="token punctuation">:</span><span class="token property">e4</span><span class="token punctuation">:</span>23 <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>会发现就连不上虚拟机了</p> <p>改回:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">[root@localhost ~]# ip link set eth0 address 52<span class="token punctuation">:</span>54<span class="token punctuation">:</span>00<span class="token punctuation">:</span>56<span class="token punctuation">:</span><span class="token property">e4</span><span class="token punctuation">:</span>20 <span aria-hidden="true" class="line-numbers-rows"><span></span></span></code></pre> </div> <p>又可正常连接了,为啥?</p> <p>这是因为虚拟机的eth0的mac地址是必须与macvtap0的mac地址保持一样,原理很简单</p> <ol> <li>ARP时问IP地址是172.17.0.2的机器mac地址是什么</li> <li>虚拟机回了一个52:54:00:56:e4:20</li> <li>macvtap0是可以理解成挂在网桥端口上的,这样就把包发给macvtap0了(因为mac地址一样,不一样就不会发给macvtap了)</li> <li>macvtap0就把包丢给qemu应用进程(最终到虚拟机eth0)</li> </ol> <h2>裸用qemu</h2> <p>以上是通过libvirt进行使用的,这样屏蔽了很多底层的细节,如果是直接使用qemu命令需要如下操作:</p> <p>创建macvtap设备:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-kotlin"><code class=" language-kotlin">ip link add link eth0 name macvtap0 type macvtap mode bridge ip link <span class="token keyword">set</span> macvtap0 address 1a<span class="token operator">:</span><span class="token number">46</span><span class="token operator">:</span>0b<span class="token operator">:</span>ca<span class="token operator">:</span>bc<span class="token operator">:</span>7b up bash<span class="token operator">-</span><span class="token number">4.2</span># cat <span class="token operator">/</span>sys<span class="token operator">/</span><span class="token keyword">class</span><span class="token operator">/</span>net<span class="token operator">/</span>macvtap0<span class="token operator">/</span>ifindex # 对应下面命令的<span class="token operator">/</span>dev<span class="token operator">/</span>tap2 <span class="token number">2</span> bash<span class="token operator">-</span><span class="token number">4.2</span># cat <span class="token operator">/</span>sys<span class="token operator">/</span><span class="token keyword">class</span><span class="token operator">/</span>net<span class="token operator">/</span>macvtap0<span class="token operator">/</span>address # 与qemu mac地址配置一致 1a<span class="token operator">:</span><span class="token number">46</span><span class="token operator">:</span>0b<span class="token operator">:</span>ca<span class="token operator">:</span>bc<span class="token operator">:</span>7b <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>启动qemu,然后虚拟机里面的地址配置同libvirt,可以通过vnc客户端(vnc viewer)进入虚拟机配置,不在赘述:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-objectivec"><code class=" language-objectivec">bash<span class="token operator">-</span><span class="token number">4.2</span># qemu<span class="token operator">-</span>system<span class="token operator">-</span>x86_64 <span class="token operator">-</span>enable<span class="token operator">-</span>kvm <span class="token operator">/</span>root<span class="token operator">/</span>CentOS<span class="token operator">-</span><span class="token number">7</span><span class="token operator">-</span>x86_64<span class="token operator">-</span>GenericCloud<span class="token punctuation">.</span>qcow2\ <span class="token operator">-</span>netdev tap<span class="token punctuation">,</span>fd<span class="token operator">=</span><span class="token number">30</span><span class="token punctuation">,</span>id<span class="token operator">=</span>hostnet0<span class="token punctuation">,</span>vhost<span class="token operator">=</span>on<span class="token punctuation">,</span>vhostfd<span class="token operator">=</span><span class="token number">4</span> <span class="token number">30</span><span class="token operator"><</span><span class="token operator">></span><span class="token operator">/</span>dev<span class="token operator">/</span>tap2 <span class="token number">4</span><span class="token operator"><</span><span class="token operator">></span><span class="token operator">/</span>dev<span class="token operator">/</span>vhost<span class="token operator">-</span>net \ <span class="token operator">-</span>device virtio<span class="token operator">-</span>net<span class="token operator">-</span>pci<span class="token punctuation">,</span>netdev<span class="token operator">=</span>hostnet0<span class="token punctuation">,</span>id<span class="token operator">=</span>net0<span class="token punctuation">,</span>mac<span class="token operator">=</span><span class="token number">1</span>a<span class="token punctuation">:</span><span class="token number">46</span><span class="token punctuation">:</span><span class="token number">0</span>b<span class="token punctuation">:</span>ca<span class="token punctuation">:</span>bc<span class="token punctuation">:</span><span class="token number">7</span>b \ <span class="token operator">-</span>monitor telnet<span class="token punctuation">:</span><span class="token number">127.0</span><span class="token number">.0</span><span class="token number">.1</span><span class="token punctuation">:</span><span class="token number">5801</span><span class="token punctuation">,</span>server<span class="token punctuation">,</span>nowait VNC server running on <span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token number">1</span><span class="token punctuation">:</span><span class="token number">5900</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <h2>cloud-init介绍</h2> <p>上文提到,通过macvtap技术配置虚拟机网卡地址是需要进入虚拟机配置的, 然而我们实现一个虚拟机管理系统时显然不会手动进入去配置,这就需要cloud-init了</p> <p>它可以帮助我们在虚拟机启动时配置虚拟机,如配置密码,配置网络,执行命令和写一些文件等。<br> 先创建一个user-data文件,里面内容如下:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-cpp"><code class=" language-cpp"><span class="token macro property">#cloud-config</span> write_files<span class="token operator">:</span> <span class="token operator">-</span> content<span class="token operator">:</span> <span class="token operator">|</span> DEVICE<span class="token operator">=</span>eth0 ONBOOT<span class="token operator">=</span>yes TYPE<span class="token operator">=</span>Ethernet USERCTL<span class="token operator">=</span>no IPADDR<span class="token operator">=</span><span class="token number">172.17</span><span class="token punctuation">.</span><span class="token number">0.2</span> NETMASK<span class="token operator">=</span><span class="token number">255.255</span><span class="token punctuation">.</span><span class="token number">0.0</span> GATEWAY<span class="token operator">=</span><span class="token number">172.17</span><span class="token punctuation">.</span><span class="token number">0.1</span> BOOTPROTO<span class="token operator">=</span><span class="token keyword">static</span> DNS1<span class="token operator">=</span><span class="token number">172.17</span><span class="token number">.0</span><span class="token number">.1</span> ONBOOT<span class="token operator">=</span>yes path<span class="token operator">:</span> <span class="token operator">/</span>etc<span class="token operator">/</span>sysconfig<span class="token operator">/</span>network<span class="token operator">-</span>scripts<span class="token operator">/</span>ifcfg<span class="token operator">-</span>eth0 runcmd<span class="token operator">:</span> <span class="token operator">-</span> systemctl start network groups<span class="token operator">:</span> <span class="token operator">-</span> centos<span class="token operator">:</span> <span class="token punctuation">[</span>root<span class="token punctuation">]</span> <span class="token operator">-</span> cloud<span class="token operator">-</span>users ssh_pwauth<span class="token operator">:</span> yes chpasswd<span class="token operator">:</span> expire<span class="token operator">:</span> <span class="token boolean">false</span> list<span class="token operator">:</span> <span class="token operator">|</span> user1<span class="token operator">:</span><span class="token number">222222</span> root<span class="token operator">:</span><span class="token number">333333</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>创建cloud-init镜像文件</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">yum install -y cloud-utils cloud-localds my-seed.img user-data <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>libvirt中使用该镜像</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-xml"><code class=" language-xml"> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>disk</span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>file<span class="token punctuation">'</span></span> <span class="token attr-name">device</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>disk<span class="token punctuation">'</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>driver</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>qemu<span class="token punctuation">'</span></span> <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>raw<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>source</span> <span class="token attr-name">file</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>/root/my-seed.img<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>target</span> <span class="token attr-name">dev</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>vdb<span class="token punctuation">'</span></span> <span class="token attr-name">bus</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">'</span>virtio<span class="token punctuation">'</span></span><span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>disk</span><span class="token punctuation">></span></span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>为了防止cloud-init走网络获取metadata,因为网卡没设置好所以会卡住五分钟,我们直接把网络获取metadata禁止掉:</p> <p>vi /etc/cloud/cloud.cfg.d/05_logging.cfg</p> <p>加上:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-undefined"><code class=" language-undefined">network: config: disabled <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>然后启动虚拟机即可</p> <h2>常见问题</h2> <blockquote> <p>Inappropriate ioctl for device</p> </blockquote> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-undefined"><code class=" language-undefined">qemu-system-x86_64: -net tap,fd=5: TUNGETIFF ioctl() failed: Inappropriate ioctl for device TUNSETOFFLOAD ioctl() failed: Inappropriate ioctl for device <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span></span></code></pre> </div> <p>因为容器没有挂载/dev目录</p> <blockquote> <p>KVM bios被禁</p> </blockquote> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-csharp"><code class=" language-csharp"><span class="token punctuation">[</span>root@helix105 <span class="token operator">~</span><span class="token punctuation">]</span># docker run busybox uname <span class="token operator">-</span>a <span class="token class-name">Could</span> not access <span class="token class-name">KVM</span> kernel module<span class="token punctuation">:</span> <span class="token class-name">No</span> such file or directory qemu<span class="token operator">-</span>lite<span class="token operator">-</span>system<span class="token operator">-</span>x86_64<span class="token punctuation">:</span> failed to initialize KVM<span class="token punctuation">:</span> <span class="token class-name">No</span> such file or directory <span class="token operator">/</span>usr<span class="token operator">/</span>bin<span class="token operator">/</span>docker<span class="token operator">-</span>current<span class="token punctuation">:</span> <span class="token class-name">Error</span> response <span class="token keyword">from</span> daemon<span class="token punctuation">:</span> oci runtime error<span class="token punctuation">:</span> <span class="token class-name">Unable</span> to launch <span class="token operator">/</span>usr<span class="token operator">/</span>bin<span class="token operator">/</span>qemu<span class="token operator">-</span>lite<span class="token operator">-</span>system<span class="token operator">-</span>x86_64<span class="token punctuation">:</span> exit status <span class="token number">1.</span> ERRO<span class="token punctuation">[</span><span class="token number">0001</span><span class="token punctuation">]</span> error getting events <span class="token keyword">from</span> daemon<span class="token punctuation">:</span> net<span class="token operator">/</span>http<span class="token punctuation">:</span> request canceled <span class="token punctuation">[</span>root@helix105 <span class="token operator">~</span><span class="token punctuation">]</span># lsmod <span class="token operator">|</span>grep kvm kvm <span class="token number">598016</span> <span class="token number">0</span> irqbypass <span class="token number">16384</span> <span class="token number">1</span> kvm <span class="token punctuation">[</span>root@helix105 <span class="token operator">~</span><span class="token punctuation">]</span># modprobe kvm<span class="token operator">-</span>intel modprobe<span class="token punctuation">:</span> ERROR<span class="token punctuation">:</span> could not insert <span class="token string">'kvm_intel'</span><span class="token punctuation">:</span> <span class="token class-name">Operation</span> not supported <span class="token class-name">You</span> have mail <span class="token keyword">in</span> <span class="token operator">/</span><span class="token keyword">var</span><span class="token operator">/</span>spool<span class="token operator">/</span>mail<span class="token operator">/</span>root <span class="token punctuation">[</span>root@helix105 <span class="token operator">~</span><span class="token punctuation">]</span># dmesg <span class="token operator">|</span>grep kvm <span class="token punctuation">[</span> <span class="token number">8.239309</span><span class="token punctuation">]</span> kvm<span class="token punctuation">:</span> disabled by bios <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>这个要进bios打开</p> <blockquote> <p>KVM: Permission denied</p> </blockquote> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-css"><code class=" language-css">bash-4.2# virsh start vm_name1 <span class="token property">error</span><span class="token punctuation">:</span> Failed to start domain vm_name1 <span class="token property">error</span><span class="token punctuation">:</span> internal <span class="token property">error</span><span class="token punctuation">:</span> qemu unexpectedly closed the <span class="token property">monitor</span><span class="token punctuation">:</span> Could not access KVM kernel <span class="token property">module</span><span class="token punctuation">:</span> Permission denied 2019<span class="token property">-06-20T07</span><span class="token punctuation">:</span>26<span class="token punctuation">:</span>33.304320Z <span class="token property">qemu-system-x86_64</span><span class="token punctuation">:</span> failed to initialize <span class="token property">KVM</span><span class="token punctuation">:</span> Permission denied <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>解决办法:</p> <div class="_2Uzcx_"> <button class="VJbwyy" type="button" aria-label="复制代码"><i aria-label="icon: copy" class="anticon anticon-copy"><svg viewbox="64 64 896 896" focusable="false" class="" data-icon="copy" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"></path></svg></i></button><pre class="line-numbers language-objectivec"><code class=" language-objectivec"><span class="token macro property">#chown root:kvm /dev/kvm</span> 修改<span class="token operator">/</span>etc<span class="token operator">/</span>libvirt<span class="token operator">/</span>qemu<span class="token punctuation">.</span>conf, <span class="token macro property">#user="root"</span> user<span class="token operator">=</span><span class="token string">"root"</span> <span class="token macro property">#group="root"</span> group<span class="token operator">=</span><span class="token string">"root"</span> 重启服务 <span class="token macro property">#service libvirtd restart,问题解决了</span> <span aria-hidden="true" class="line-numbers-rows"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre> </div> <p>扫码关注sealyun</p> <br> <br> <p>探讨可加QQ群:98488045</p> </article>
macvtap使用教程
作者
sockstack
许可协议
CC BY 4.0
发布于
2023-11-14
修改于
2025-02-23
上一篇:软件:常用 Linux 软件汇总,值得收藏
下一篇:内事不决问百度,外事不决问谷歌
尚未登录
登录 / 注册
文章分类
博客重构之路
5
Spring Boot简单入门
4
k8s 入门教程
0
MySQL 知识
1
NSQ 消息队列
0
ThinkPHP5 源码分析
5
使用 Docker 从零开始搭建私人代码仓库
3
日常开发汇总
4
标签列表
springboot
hyperf
swoole
webman
php
多线程
数据结构
docker
k8s
thinkphp
mysql
tailwindcss
flowbite
css
前端