Xen - Networking
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).
[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明.
因�槭褂貌煌�的模式��有不同的��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/?q=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就��很清楚了.
我��先�砜茨壳八�有的 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.
如果我��系�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
[root@benjr ~]# vi /etc/xen/xend-config.sxp (network-script network-nat) #(network-script network-bridge) #(network-script network-route) (vif-script vif-nat) |
�得�� (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" ] |
�@就是 VM 的名�Q,��M化的�h境下其 VM 名�Q必��槲ㄒ坏�.
通用唯一�R�e�a(Universally Unique Identifier,UUID),系�y��指定一��唯一的 uuid �斫o每一台 VM.
通常我��在指定����w大小�o Guest VM �r可以先指定多一�c,但是多指定的�r候�K不��真的使用到�@�N多,先指定的���c是系�y可以�上直接增加 VM ����w大小.
目前 VM 所真正使用的��w的多寡.
在 VM 所使用的�� CPU �的�.
/usr/bin/pygrub 是 VM 所使用的 Bootloader 主要也就是�� VM 的 kernel/initrd �d入系�y,�似於 GRUB,Xen 主要使用了 paravirtualized 的技�g,他�K不像是 VMware 使用 full virtualization �有模�M出 BIOS 的�h境.pygrub �包含了一� PXEBoot 的功能.
��系�y在 poweroff/reboot/crash VM 所���的�幼�楹�,系�y在 poweroff 是做 destory 其��也就是 poweroff 主要是�� VM 的����w肆放�K�⒂驳��Y料�_切��回,而 reboot/crash �t是�� VM 重新�_�C.
Xen 底下的 VM 都是透�^ VNC ��魉彤�面,所以�@�e的 vfb(virtual framebuffer device) 就是�O定系�y��面�c�入�b置 Keyboard/Mouse.
��M的 VM 所使用的硬碟模式可以����w partition 也可以�� image 的方式.
�@就是�@一次要修改的重�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.
�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) Chain OUTPUT (policy ACCEPT) |
使用指令 "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