大家好,又见面了,我是你们的朋友全栈君。
安装 qemu/kvm
代码语言:javascript复制yum install qemu-img qemu-kvm qemu-kvm-tools virt-manager virt-viewer virt-v2v virt-top libvirt libvirt-python libvirt-client python-virtinst bridge-utils tunctl
接下来就可以通过命令或者界面操 虚拟机
命令操作可参考虚拟化之KVM virsh常用命令篇 – 某电商首席日志工程师 – 博客园
安装成功后界如下
虚拟机与宿主机 通信
使用桥接方式
先在宿主集卡安装命令如下:
代码语言:javascript复制yum install bridge-utils.x86_64
(1)在宿主机创建一个桥接virbr0,并分配给其一个ip
代码语言:javascript复制brctl addbr virbr0
ifconfig br0 192.168.122.1
宿主机器ifconfig
(2)宿主机中把一个 网卡和桥接口绑定
代码语言:javascript复制brctl addif virbr0 p9p1
查看
但是自己测试宿主机不绑定也可以
(3)设置虚拟机通过桥接virbr0与宿主机桥接
(4)在虚拟机中给一个网卡分配ip,ip必须和virbr0的ip在一个网段
创建完就可以 和宿主机 互相ping了或者ssh了
网上资料如下:
原文https://blog.csdn.net/u013451404/article/details/84929816
我们继续来讨论怎么将虚拟机中的网络桥接到宿主机的物理网卡。虚拟机使用桥接方式上网的示意图如下(注:本图是借用来的,如有侵权请联系我删除,感谢!),多个虚拟机都可以承载在宿主机的一个网卡上,每个虚拟机都可以有一个独立的ip地址,虚拟机可以访问外部网络,外部网络的设备也可以访问虚拟机。
虚拟机桥接宿主机的示意图
1、用ifconfig命令查看一下宿主机物理网卡对应的接口,我的服务器中有一个名为ens5的接口对应我的网卡。
[linux@Centos ~] ifconfig ens5 ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 1c:c1:de:9b:e9:ff txqueuelen 1000 (Ethernet) RX packets 4 bytes 316 (316.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12 bytes 928 (928.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 17 [linux@Centos ~]
2、在宿主机中安装网桥管理工具bridge-utils
yum install bridge-utils.x86_64
3、在宿主机中创建一个名为br0的桥接接口
sudo brctl addbr br0
4、在宿主机中将ens5添加到桥接组br0中
sudo brctl addif br0 ens5
5、检查桥接配置是否成功,可以看到ens5已经添加到了br0中了
[linux@Centos qemu] sudo brctl show bridge name bridge id STP enabled interfaces br0 8000.1cc1de9be9ff no ens5 virbr0 8000.52540099455c yes virbr0-nic [linux@Centos qemu]
6、为br0接口添加一个ip地址,我配置的是10.0.0.3
[linux@Centos qemu] sudo ifconfig br0 10.0.0.3 [linux@Centos qemu] sudo ifconfig br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.3 netmask 255.0.0.0 broadcast 10.255.255.255 inet6 fe80::1ec1:deff:fe9b:e9ff prefixlen 64 scopeid 0x20<link> ether 1c:c1:de:9b:e9:ff txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7 bytes 578 (578.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens5: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 1c:c1:de:9b:e9:ff txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7 bytes 578 (578.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 17
7、验证宿主机桥接接口是否可以正常通信,ens5接口连接的对端设备的地址是10.0.0.10,我们在宿主机上ping一下这个地址,如果桥接配置成功是可以通过桥接接口ping通对端的,对端也可以ping能我们br0的10.0.0.3
[linux@Centos ~] ping 10.0.0.10 PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data. 64 bytes from 10.0.0.10: icmp_seq=1 ttl=64 time=0.557 ms 64 bytes from 10.0.0.10: icmp_seq=2 ttl=64 time=0.534 ms ^C — 10.0.0.10 ping statistics — 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.534/0.545/0.557/0.026 ms [linux@Centos ~]
8、用virsh edit CentOS命令修改我们的虚拟机的配置,添加一个桥接类型的网卡,并且桥接到br0口,添加文本如下,更多XML文件格式说明参考https://libvirt.org/formatdomain.html
<interface type=’bridge’> <source bridge=’br0’/> <target dev=’vnet1’/> <mac address=”00:11:22:33:44:55″/> </interface>
9、用virsh start CentOS命令打开我们的虚拟机,登录虚拟机系统后可以看到虚拟机中多了一个MAC地址为00:11:22:33:44:55的网卡,在我的虚拟机里它叫eth2。
备注:此时打开虚拟机可能会报桥接口通信失败,进而导致虚拟机打开失败,则需要输入如下命令允许虚拟机使用桥接通信。
echo “allow br0” >> /etc/qemu-kvm/bridge.conf
下面是虚拟机开机后的网口信息:
[root@localhost ~]# ifconfig -a eth1 Link encap:Ethernet HWaddr 52:54:00:97:86:46 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) eth2 Link encap:Ethernet HWaddr 00:11:22:33:44:55 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) Interrupt:10 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@localhost ~]#
10、为eth2配置一个ip地址,并ping宿主机和宿主机的ens5连接的对端设备,测试通信是否正常。可以看到我这里无论是ping10.0.0.10和是10.0.0.3都是可以正常ping通的,说明虚拟机与宿主机和宿主机的对端设备通信都是正常的。至此就完成了为虚拟机桥接到宿主机物理网卡的所有工作。
[root@localhost ~]# ifconfig eth2 10.0.0.5 eth2: link up, 100Mbps, full-duplex, lpa 0x05E1 [root@localhost ~]# [root@localhost ~]# ping 10.0.0.10 PING 10.0.0.10 (10.0.0.10) 56(84) bytes of data. 64 bytes from 10.0.0.10: icmp_seq=1 ttl=64 time=2.09 ms 64 bytes from 10.0.0.10: icmp_seq=2 ttl=64 time=1.02 ms — 10.0.0.10 ping statistics — 2 packets transmitted, 2 received, 0% packet loss, time 1851ms rtt min/avg/max/mdev = 1.023/1.557/2.092/0.535 ms [root@localhost ~]# [root@localhost ~]# ping 10.0.0.3 PING 10.0.0.3 (10.0.0.3) 56(84) bytes of data. 64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.625 ms 64 bytes from 10.0.0.3: icmp_seq=2 ttl=64 time=0.815 ms 64 bytes from 10.0.0.3: icmp_seq=3 ttl=64 time=0.817 ms — 10.0.0.3 ping statistics — 3 packets transmitted, 3 received, 0% packet loss, time 2360ms rtt min/avg/max/mdev = 0.625/0.752/0.817/0.092 ms
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171594.html原文链接:https://javaforall.cn