Xen的虚拟网卡

Networking-eth0, lo, peth0, vif0.0, vif1.0,virbr0,xenbr0

Step 0 : Xen底下的�W路架��
Step 1 : ��M�是���w
Step 2 : network-bridge
Step 3 : network-nat
Step 4 : network-route
Step 5 : �⒖季W�

Step 0 : Xen底下的�W路架��
在��M化下的�h境就�倬W路�b置最�檠}�s�y懂,不�^模式大致可以��分成 3 �N

1.network-bridge ,

2.network-nat

3.network-route


最主要就是看的懂��M�c���H的�W路�b置是怎�N���的(Logical NICs <-> Physical NICs).

Networking - zhuzhu - 五事九思  (大连Linux主机维护)
不管是 Xen �是 VMware ��M化下的�W路�b置,主要都是透�^�@ 3 �N不同的模式� Guest OS 的��M�W路�b置透�^���w的�W路接出去.�@�我直接以 RHEL5  Xen 的�h境下�碜稣f明.���_始使用 Xen 的人一定����於他的�W路架��搞不清楚.光是在 Dom0 用 ifconfig 就可以看到好多以前�]看�^的�b置出�F,因�� Dom0 能直接�c Hypervisor �贤ㄋ�以所有 DomU 所�a生的��M�b置都��在在�@�e秀出��.
[root@benjr ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:02:B3:9D:87:65
.... 略 ....
lo Link encap:Local Loopback
.... 略 ....
peth0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
.... 略 ....
vif0.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
.... 略 ....
vif1.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
.... 略 ....
virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
.... 略 ....
xenbr0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF
.... 略 ....

一般的 Linux 下的�W路�b置名�Q�� eth0,eth1...,但是在 Xen 底下�S多的硬�w�b置都是��M出�淼�(包括 Dom0 下的�W路�b置也是). �@�e你��看到 eth0, lo, peth0, vif0.0, vif1.0, virbr0, xenbr0. �@些是什�N�|西阿,我��直接�砜聪旅孢@一���D你��清楚了解 Xen 底下的�W路�b置是怎�N一回事.下面我����γ恳豁�做�f明.

Networking - zhuzhu - 五事九思  (大连Linux主机维护)

因�槭褂貌煌�的模式��有不同的��M�b置出�F,所以上面的�D示是使用 RHEL5 所�A�O的 network-bridge 模式,上�D我只列出了 eth0, peth0, vif0.0, vif1.0 以及, 其中�槔�出的 lo 是 Loop device 也就是我��常在使用的 127.0.0.1  至於 virbr0 �t是在 QEMU 所提供的 Bridge NAT 模式上�硎褂谜��⒖� QEMU-Bridge NAT http://benjr.tw/node/520

Step 1 : ��M�是���w
Xen 主要�W路�b置可以分成�煞N,一��就是���w Physical 的(peth0,peth1...)而另一�N就是��M Logical 出�淼�(eth0,eth1...)以及(vif<id#>.0,vif<id#>.1..),���w的可以很清楚的知道是 pethx,但是��M的怎�N�@�N�}�s呢!!!先看看下面�@���D就��很清楚了.

Networking - zhuzhu - 五事九思  (大连Linux主机维护)

我��先�砜茨壳八�有的 Guest OS 有哪一些再�碜稣f明.��然你看到的��和我的不�M相同.系�y��依��不同的���w和��M的�W路�b置以及 Guest OS 的不同做�{整的.

#列出所有 domU
[root@benjr ~]# xm list
Name       Id   Mem(MB) VCPUs  State  Time(s)
Domain-0 0   7619            4          r----     43213.6
rhel4          1   512              1          -b---    9601

��t很���:
1.不管是在 Dom0,�是DomU 你��看到 eth0,eth1...�@些都是��M出�淼木W路卡�b置.
2.在 Dom0 �e面你可以看到 vif<id#>.0,vif<id#>.1...的�b置存在,因�� Dom0 能直接�c Hypervisor �贤ㄋ�以所有 DomU 所�a生的��M�b置都��在在�@�e秀出��.
3.他��的���也相�����, vif<id#>.x 中的 id 就是 DomU 的 id 所以你在 Dom0 底下的 eth0 是���到 vif0.0, eth1 是���到 vif0.1 如此依序下去(最多能�a生的�W路�b置�榘��),至於 vif1.0 就是某�� Dom U(ID=1) 的 eth0 我��可以透�^ #xm list 看 DomU 所���的 id �楹�!!
目前我的�h境只有 Dom0(RHEL5) 以及一�� Guest OS(RHEL4),因����w的�W路卡�b置有 2 ��所以我�O定的 2 �� Xen Bridge,分�e���到不同的��M�W卡,所以 Xen 底下整���W路�b置就像下面所示.
Peth0 -> ���w�W路卡�b置(Physical NIC)
Peth1 -> ���w�W路卡�b置(Physical NIC)
Dom0 -> eth0 -> vif0.0
Dom0 -> eth1 -> vif0.1
Dom1(RHEL4) -> eth0 -> vif1.0
Dom1(RHEL4) -> eth1 -> vif1.1
4.至於�@些��M的�b置��如何���到真��的�b置�@就跟你所使用的模式有�P,��得����提到的模式(network-bridge)下面的指令可以�你目前�h境 peth 是如何���vif

[root@benjr ~]# brctl show
bridge name     bridge id                            STP enabled      interfaces
virbr0                 8000.000000000000       no
xenbr0               8000.feffffffffff                     no                        peth0
                                                                                                  vif0.0
                                                                                                  vif1.0
xenbr1               8000.fefffffffffe                    no                        peth1
                                                                                                  vif0.1
                                                                                                  vif1.1
[root@benjr scripts]#  /etc/xen/scripts/network-bridge status
.... 略 ....
bridge name     bridge id                            STP enabled      interfaces
virbr0                 8000.000000000000       no
xenbr0               8000.feffffffffff                     no                        peth0
                                                                                                  vif0.0
                                                                                                  vif1.0
xenbr1               8000.fefffffffffe                    no                        peth1
                                                                                                  vif0.1
                                                                                                  vif1.1
.... 略 ....

Dom0                 -> eth0 -> vif0.0 -> xenbr0 -> peth0 (���w�W路卡�b置 Physical NIC)
Dom1(RHEL4)  -> eth0 -> vif1.0 -> xenbr0 -> peth0  (���w�W路卡�b置Physical NIC)
Dom0                 -> eth1 -> vif0.1 -> xenbr1 -> peth1  (���w�W路卡�b置Physical NIC)
Dom1(RHEL4)  -> eth1 -> vif1.1 -> xenbr1 -> peth1  (���w�W路卡�b置Physical NIC)

note: 其中的 vif<id#>.x ���S著 DomU �P�C而消失.

因�榫W卡是��M出�淼乃�以 MAC 不太可能跟著�W卡一起,所以每���a生新的 Guest Virtula Network(��M�W卡)就��依����t�懋a生:
XEN:
��M�W路�b置的 mac 是如何�a生的,他是有一����t性的. mac :XY:XX:XX:XX:XX:XX ,mac 使用16�M制�盹@示 X 可�槿魏蔚�16�M制(0~9,A,B,C,D,E,F), Y �t只能使用 2, 6, A 或 E. 不�^ Xen 建�h使用的��� 00:16:3e:xx:xx:xx. �@���^段是保留�o Xen 使用的.
VMware:
mac : 00:0c:29:xx:xx:xx 或是 00:50:56:xx:xx:xx �@���^段是保留�o VMware 使用的,VMware 建�h固定 mac address 使用的��� 00:50:56:[00-3F]:xx:xx .要不然就�系�y�碇付�.

Step 2 : network-bridge
要使用哪�N模式定�x在 /etc/xen/xend-conf.sxp 系�y�A�O使用 Bridge 模式,主要����� network-bridge �c vif-bridge �@��� shell script.在�@��模式下��看到一���b置 xenbr0 ,接下�砦����� xenbr0 �碚f明�@是什�N�|西.要�J�R xenbr0 的最好方式是直接看 Networking ���r的步�E,�� Dom0 的 xend ���r, 首先���绦� /etc/xen/scripts/network-bridge �@�� script, �W路��硬襟E如下:
1.首先�a生一��新的 bridge 名�Q�� xenbr0
2.此�r���w的�W路�b置 eth0 ��被�P�]
3.���w的 eth0 IP 和 MAC addresses ���}�u到��M的�W路�b置中 veth0
4.���w的�W路�b置 eth0 名�Q��被修改成 peth0
5.��M的�W路�b置 veth0 名�Q��被修改成 eth0
6.peth0 和 vif0.0 ��被�B接到 bridge xenbr0 (此�r的 xenbr0 就如同一�� switch)
7.bridge xenbr0, peth0, eth0 和 vif0.0 都��被���.
note: Dom0上的防火��是不��引�到 DomU 的�W路流通的.

�� RHEL5 Xen 安�b完成�r系�y�A�O的 Bridge(xenbri0) 只有一��,但是��我��有多���W卡�r就需要手�釉O定多�� Bridge.假�O系�y�]有��^其他�O定,其�W路�M�B就像下面所描述的 Dom0(eth0) -> vif0.0 -> xenbr0 -> peth0.

Networking - zhuzhu - 五事九思  (大连Linux主机维护)


如果我��系�y上有多�����w�W卡�r就可以透�^修改�O定�n /etc/xen/xend-config.sxp ���M的�W路�b置可以透�^其他���w�b置�B接�W路.

[root@benjr ~]# vi /etc/xen/xend-config.sxp
...
#(network-script network-bridge)
(network-script my-network-script)
...

#把上面的修改成我自己�O定的�W路 script 名�Q(my-network-script).接下��⑽��的 my-network-script 修改成我��需要的�M�B即可.
[root@benjr ~]# vi /etc/xen/scripts/my-network-script
#!/bin/sh
/etc/xen/scripts/network-bridge start vifnum=0 netdev=eth0 bridge=xenbr0
/etc/xen/scripts/network-bridge start vifnum=1 netdev=eth1 bridge=xenbr1
[root@benjr ~]# chmod a+x /etc/xen/scripts/my-network-script
#不要忘�修改�n案的�傩�.

如果你是要�R�r增加一�� Bridge 可用下面的指令.建立一�� Network bridge

[root@benjr ~]# /etc/xen/scripts/network-bridge start vifnum=1 bridge=xenbr1 netdev=eth1
vifnum=1 ;��M�b置��a,系�y�A�O有 8 �� loopback �b置可以使用,而�A�O值�� 0.可以在�_�C�r指定 loopback 最大到32�� nloopbacks=<N>
bridge=xenbr1 ;�O定 Network Bridge 名�Q�� xenbr1,�A�O值�� xenbr${vifnum}.
netdev=eth1
;�O定 Network Bridge xenbr1 透�^���w eth1 �B接外部.�A�O值�� eth$(vifnum}

但是 DomU ���r是依�� vif-bridge �@��script ��绦�.
�� domU ���r, xend (running in dom0) ����绦羞@�� vif-bridge script, ��M�W路��硬襟E如下:
1.�� vif<id#>.0 �B接到�m��的 xenbr0
2.��� vif<id#>.0 .

所有的 scripts 都存放在 /etc/xen/scripts. 而 Bridge 只是 Xen 其中一�N的�W路模式,其他的�有 NAT's Networking �c Routed Networking �@些後面��再介�B.

Step 3 : network-nat

RHEL5 Xen 的�W路�h境�A�O�� bridge 模式,如果不合你使用�r可以�x�衿渌�的模式 network-nat 或是 network-route ,不�^�@�e先介�B一下 NAT 的模式,先�碚f�f什�N是 NAT ,NAT 的全名就是 network address translation,最常��用在�� Private IP �D�Q成 Public IP ,Private IP 只限是用於私人�W路,此�的封包�o法在 Internet 上�魉�,如 10.0.0.0(subnet mask : 10.255.255.255) ,172.16.0.0(subnet mask : 172.31.255.255) 以及 192.168.0.0(subnet mask : 192.168.255.255) 唯有 Public IP 是在 Internet 可以被合法�鬟f,所以 NAT 最主要的目的就是�榱��炔康� Private IP 透�^�D�Q�①Y料可以在 Internet 上�魉�.使用�@�N方式的好�是外部�o法直接和 Guest OS 相�B接,�@�娱g接的加��的系�y的安全性.
Networking - zhuzhu - 五事九思  (大连Linux主机维护)
��得�O定�n在 Dom0(RHEL 5) Xen 的�W路�O定目� /etc/xen/xend-conf.sxp �㈩A�O的 bridge 改成 NAT 模式.
[root@benjr ~]# vi /etc/xen/xend-config.sxp
(network-script network-nat)
#(network-script network-bridge)
#(network-script network-route)

(vif-script vif-nat)
#(vif-script vif-bridge)
#(vif-script vif-route)

�得�� (network-script network-bridge) ,(vif-script vif-bridge) 做 "#" (把它��成�]�).�@�铀�有的 Guest OS ���⒖梢允褂� NAT 的模式,但是�需要修改一下 Guest OS 的�O定�n案.不�^先�� xen 的服�罩匦���.

[root@benjr ~]# /etc/init.d/xend restart

修改 Guest OS 的�O定�n,目前我系�y上面有一�� GuesOS : RHEL4 ID=1,�O定�n名�Q也�� RHEL4

[root@benjr ~]# vi /etc/xen/rhel4
name = "rhel4"
uuid = "cf67710d-b756-086b-8cde-be61d2faca1b"
maxmem = 512
memory = 512
vcpus = 1
bootloader = "/usr/bin/pygrub"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"
vfb = [ "type=vnc,vncunused=1,keymap=en-us" ]
disk = [ "phy:/dev/sda5,xvda,w" ]
vif = [ "mac=00:16:3e:27:95:c0,ip=10.0.0.1" ]
  • name

    �@就是 VM 的名�Q,��M化的�h境下其 VM 名�Q必��槲ㄒ坏�.


  • uuid

    通用唯一�R�e�a(Universally Unique Identifier,UUID),系�y��指定一��唯一的 uuid �斫o每一台 VM.


  • maxmem

    通常我��在指定����w大小�o Guest VM �r可以先指定多一�c,但是多指定的�r候�K不��真的使用到�@�N多,先指定的���c是系�y可以�上直接增加 VM ����w大小.


  • memory

    目前 VM 所真正使用的��w的多寡.


  • vcpus

    在 VM 所使用的�� CPU �的�.


  • bootloader

    /usr/bin/pygrub 是 VM 所使用的 Bootloader 主要也就是�� VM 的 kernel/initrd �d入系�y,�似於 GRUB,Xen 主要使用了 paravirtualized 的技�g,他�K不像是 VMware 使用 full virtualization �有模�M出 BIOS 的�h境.pygrub �包含了一� PXEBoot 的功能.


  • on_poweroff/reboot/crash

    ��系�y在 poweroff/reboot/crash VM 所���的�幼�楹�,系�y在 poweroff 是做 destory 其��也就是 poweroff 主要是�� VM 的����w肆放�K�⒂驳��Y料�_切��回,而 reboot/crash �t是�� VM 重新�_�C.


  • vfb

    Xen 底下的 VM 都是透�^ VNC ��魉彤�面,所以�@�e的 vfb(virtual framebuffer device) 就是�O定系�y��面�c�入�b置 Keyboard/Mouse.


  • disk

    ��M的 VM 所使用的硬碟模式可以����w partition 也可以�� image 的方式.


  • vif

    �@就是�@一次要修改的重�c vif(virtual network devices).也就是和�W路�b置相�P的�O定.vif = [ "mac=00:16:3e:27:95:c0,ip=10.0.0.1" ] 其中的 mac 可以不�O定主要就是 IP,必�和 VM OS 所�O定的 IP 相同.


回到 DomU 的 Guest OS (RHEL4) �� IP �O定成跟����在 Dom0 �O定的一模一�.

# Xen Virtual Ethernet
[root@DomU ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
GATEWAY=10.0.0.128

�K且�� DomU �W路的服�罩匦���

[root@DomU ~]# service network restart

�� DOMU(RHEL4) 重新���,回到DOM0 第一件事情你���l�F xen bridge(xenbr0) 不�了,而且 vif1.0(Guest OS:RHEL4 ID=1) 多了 IP 的�O定值,�@��是�o Guest OS 所使用的 default gateway.�A�O default gateway �� 10.0.0.128 ,如果你的 DomU 的 Guest OS 有很多�r,在 Dom0 下的每一���W路�b置 vif(Dom ID).0 都���a生不同的 default gateway �� 10.0.0.128 �_始接下�淼木��是 10.0.0.129.如此依序下去,不�^在 DomU 的 Guest OS 只要�S便指定任何一�� default gateway 都可以. ��你�x�竦木W路�� NAT �r你的 Dom0 的�W路�b置就像是一台 NAT ,所有的 Guest OS(DomU) 都��透�^ NAT �磙D送 private IP 的�Y料.
1. 所有 domU 上的��M�C器都是在相同的 Private 私人�W域.
2. 所有 domU ��M�C器的封包都必�透�^ dom0 的 NAT 去�B�Y到其他的�W路.
3. 如同一般的 NAT 所有 domU 上的��M�C器都是被�[藏在 private 私人�W域,所以外部不能直接�B接到 DomU 上的��M�C器.必�透�^ Dom0 的 default gateway.

Networking - zhuzhu - 五事九思  (大连Linux主机维护)

�F在回 Dom 0 �^察一下�W路�h境有什�N改�.使用指令 "ifconfig" 可以很清楚看到 vif1.0 自�拥玫降� IP �� 10.0.0.128

[root@benjr ~]# ifconfig vif1.0
vif1.0   Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
inet addr:10.0.0.128  Bcast:0.0.0.0  Mask:255.255.255.255
         inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
         RX packets:98 errors:0 dropped:0 overruns:0 frame:0
         TX packets:73 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:32
         RX bytes:11014 (10.7 KiB)  TX bytes:9404 (9.1 KiB)

使用 "iptables -L" �砜茨壳胺阑�� iptables ��B的�_多了 10.0.0.1 的��t.

[root@benjr ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     udp  --  anywhere             anywhere            udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere            udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             192.168.122.0/24    state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable
ACCEPT     all  --  10.0.0.1             anywhere            PHYSDEV match --physdev-in vif1.0
ACCEPT     udp  --  anywhere             anywhere            PHYSDEV match --physdev-in vif1.0 udp spt:bootpc dpt:bootps

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

使用指令 "route" 可以看到只要是�鹘o 10.0.0.1 (VM:RHEL4) 都是��^ vif1.0

[root@benjr ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.1        *               255.255.255.255 UH    0      0        0 vif1.0
192.168.122.0   *               255.255.255.0   U     0      0        0 virbr0
192.8.1.0       *               255.255.255.0   U     0      0        0 eth0
169.254.0.0     *               255.255.0.0     U     0      0        0 eth0

如果你要� VM ��M�C透�^ dhcp 自�拥玫� ip,可以�⒖枷铝�灼�文章.
http://www.nikhef.nl/pub/projects/grid/gridwiki/index.php/Xen_3.2,_CentO...

Step 4 : network-route
未完成

Step 5 : �⒖季W�

http://wiki.xensource.com/xenwiki/XenNetworking
http://wiki.kartbuilding.net/index.php/Xen_Networking


你可能感兴趣的:(网卡)