网桥概念
网桥工作在OSI模型中的第二层,即链路层。完成数据帧(frame)的转发,主要目的是在连接的网络间提供透明的通信。网桥的转发是依据数据帧中的源地址和目的地址来判断一个帧是否应转发和转发到哪个端口。帧中的地址称为“MAC”地址或“硬件”地址,一般就是网卡所带的地址。
网桥的作用是把两个或多个网络互连起来,提供透明的通信。网络上的设备看不到网桥的存在,设备之间的通信就如同在一个网上一样方便。由于网桥是在数据帧上进行转发的,因此只能连接相同或相似的网络(相同或相似结构的数据帧),如以太网之间、以太网与令牌环(token ring)之间的互连,对于不同类型的网络(数据帧结构不同),如以太网与X.25之间,网桥就无能为力了。
网桥扩大了网络的规模,提高了网络的性能,给网络应用带来了方便,在以前的网络中,网桥的应用较为广泛。但网桥互连也带来了不少问题:一个是广播风暴,网桥不阻挡网络中广播消息,当网络的规模较大时(几个网桥,多个以太网段),有可能引起广播风暴(broadcasting storm),导致整个网络全被广播信息充满,直至完全瘫痪。第二个问题是,当与外部网络互连时,网桥会把内部和外部网络合二为一,成为一个网,双方都自动向对方完全开放自己的网络资源。这种互连方式在与外部网络互连时显然是难以接受的。问题的主要根源是网桥只是最大限度地把网络沟通,而不管传送的信息是什么。
In the case of isolated, nat, and routed networks, DHCP and DNS are provided on the virtual network by libvirt, and the IP range can be determined by examining the virtual network config with ‘virsh net-dumpxml [networkname]’. There is one virtual network called ‘default’ setup out of the box which does NAT’ing to the default route and has an IP range of 192.168.122.0/255.255.255.0. Each guest will have an associated tun device created with a name of vnetN, which can also be overridden with the element (see overriding the target element).
有关概念的详细介绍,请参看http://blog.csdn.net/gsl371/article/details/78662258
网桥配置
图形方法
通过virt-manager的图形界面方式配置nat或桥接网络还是比较直观和简单的,方法是:
运行virt-manager,选择edit-connection detail
选择virtual network 标签
选择“+”添加,根据提示选择nat或是路由方式,以实现和外部互通;或者孤立网络模式,孤立网络模式可以通过添加host的物理网卡,实现直接和外部互通。
命令方式
下面重点介绍如何通过virsh命令方式实现这两种网络模式配置。具体是nat还是桥接或是路由和隔离模式,取决于你选择的xml模版,下面以Nat为例;其他雷同。
复制配置文件
首先复制一份已存在的网络的xml文件,做适当修改,比如
[root@vmhost networks]# cp default.xml testnet.xml
[root@vmhost networks]# vi testnet.xml
修改后如下:
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
virsh net-edit testnet
or other application using the libvirt API.
-->
<network>
<name>testnet</name>
<uuid>a7884784-5f15-4832-8c49-79b194c592cf</uuid>
<forward dev='em2' mode='nat'>
<interface dev='em2'/>
</forward>
<bridge name='virbr4' stp='on' delay='0'/>
<mac address='72:54:00:7e:c8:55'/>
<domain name='testnet'/>
<ip address='192.169.100.1' netmask='255.255.255.0'>
</ip>
</network>
定义网络
[root@vmhost networks]# vi testnet.xml
[root@vmhost networks]# virsh net-define testnet.xml
Network testnet defined from testnet.xml
创建网络
[root@vmhost networks]# virsh net-create testnet.xml
Network testnet created from testnet.xml
查看网络,没有自动启动
[root@vmhost networks]# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
isbridge active yes yes
osbridge active yes yes
testnet active no yes
添加自动启动
[root@vmhost networks]# virsh net-autostart testnet
Network testnet marked as autostarted
[root@vmhost networks]# virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
isbridge active yes yes
osbridge active yes yes
testnet active yes yes
查看网桥
发现网桥virbr4,已自动生成
[root@vmhost network-scripts]# brctl show
bridge name bridge id STP enabled interfaces
testbr0 8000.000000000000 yes
virbr1 8000.5254007ec855 yes virbr1-nic
vnet0
vnet1
virbr2 8000.525400ed6f8b yes virbr2-nic
virbr4 8000.7254007ec855 yes virbr4-nic
配置虚拟机网络接口
查看虚拟机现有的接口
[root@vmhost network-scripts]# virsh domiflist BlockNode
Interface Type Source Model MAC
-------------------------------------------------------
macvtap2 direct em2 rtl8139 52:54:00:85:06:17
删除这个接口
[root@vmhost network-scripts]# virsh detach-interface BlockNode direct --mac 52:54:00:85:06:17 --config
Interface detached successfully
重启这个虚拟机,接口已被删除,
[root@vmhost network-scripts]# virsh domiflist BlockNode
Interface Type Source Model MAC
-------------------------------------------------------
重新添加虚拟机的接口
[root@vmhost ~]# virsh attach-interface BlockNode network testnet --target ens3
Interface attached successfully
–target指定了vm的tun/tap接口的名字,并被添加到了网络的虚拟网桥中。–mac选项可以指定vm中已存在interface的mac,直接可用。
查看虚拟机的接口卡
[root@vmhost networks]# virsh domiflist BlockNode
Interface Type Source Model MAC
-------------------------------------------------------
ens3 network testnet rtl8139 52:54:00:44:86:8c
已经有了你重新命名,新分配的mac的接口卡,但是还没有ip地址,进入虚拟机可以查看到
[root@localhost ~]# nmcli
virbr0: connected to virbr0
bridge, 52:54:00:EA:83:29, sw, mtu 1500
inet4 192.168.122.1/24
ens3: connecting (getting IP configuration) to ens3
"Realtek RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (QEMU Virtual Machine)"
ethernet (8139cp), 52:54:00:44:86:8C, hw, mtu 1500
给虚拟机指定静态IP的命令行方法目前还没有看到,一般是通过dhcp的方式分配ip;只有启动虚拟机后进去设置了