2013年3月23日 星期六

雲端網路實務 2013/3/24 -2

建立虛擬網路 (建立給內部使用的虛擬IP分享器) -------------使用圖形介面












檢視網路裝置
#ifconfig -a


在虛擬機器上新增網路裝置











 ---------------------------------------------------------------------------------------------------------
用xml檔佈署虛擬網路    --------------------------------使用文字介面







把xml檔案輸出至檔案
 #sudo virsh net-dumpxml net_172_30  > net_172_30.xml
 #nano net_172_30.xml
uuid刪除
bridge name改掉
stp=off


關閉網路設備net_172_30
 #sudo virsh net-destroy net_172_30


移除net_172_30網路設備
 #sudo virsh net-undefine net_172_30

  
*重新定義已經移除的網路設備
#sudo virsh net-define net_172_30.xml


啟動新定義網路設備
#sudo virsh net-start net_172_30
 

自動啟用網路設備
#sudo virsh net-autostart net_172_30




新增一個net_172_40的網路設備


#sudo virsh net-list --all



-----------------------------------------------------------------------------------------------------------


01-魔法石第一階段製作
取得最新 Tiny Core Linux 的 核心檔 及 RAM 磁碟檔

下載網址 : http://distro.ibiblio.org/tinycorelinux/4.x/x86/release/distribution_files/

下載檔案如下 :
core.gz      2013-Feb-26 09:41:44 5.1M  application/x-gzip
core64.gz    2013-Feb-26 09:41:43 5.2M  application/x-gzip
vmlinuz      2012-Mar-17 19:00:00 2.4M  application/octet-stream
vmlinuz64    2012-Mar-17 19:00:00 2.7M  application/octet-stream

複製四個檔案至home下面

直接由 Linux 核心檔 及 RAM 磁碟檔啟動
#kvm -m 64  -kernel vmlinuz -initrd core.gz 
(vmlinuz=>就是linux kernel)
(initrd=>rd, ram disk, file system<EXT4>)


重製 Initial RAM disk 檔案內容
1.建立重製目錄
# cd 
# mkdir tsc32
# cd tsc32

2. 解開 core.gz (initial RAM disk)
  解開 core.gz, 內容直接存在目前所在的目錄 
# zcat ../core.gz | sudo cpio -i -H newc
 
(init為程序之母)
 
 etc/skel 目錄內容 : 系統登入後會被自動複製的程式  
# tree -a etc/skel/
etc/skel/
├── .ash_history
├── .ashrc
└── .profile
 (使用者第一次建立帳號時會被複製過去的目錄) 


修改系統設定檔 (增加 alias 命令)
# sudo nano etc/skel/.ashrc
# ~/.ashrc: Executed by SHells.
#
                     :
alias ping='ping -c 4'
alias bye='sudo poweroff'

(創造新的命令)

重製 initial RAM disk 檔案 (產生 tsc32.gz)
# find | sudo cpio -o -H newc | gzip -2 > ../tsc32.gz 
(../=>上一層目錄)

測試系統
# kvm -name "tsc32" -m 128 -kernel ../vmlinuz -initrd ../tsc32.gz
在重製系統中, 輸入以下命令
# bye

# kvm -name "tsc32" -m 128 -kernel ../vmlinuz -initrd ../tsc32.gz -append 'abc=xzy'
在虛擬電腦內輸入 #cat /proc/cmdline
 
 
 ---------------------------------------------------------------------------
02-魔法石第二階段製作 

1. 撰寫程式
# cd ~/tsc32
# sudo nano opt/bootlocal.sh 
k=$(cat /proc/cmdline)

ipv4=${k##*ipv4=}
ipv4=${ipv4%% *}

nat=${k##*nat=}
nat=${nat%% *}

if [ ! -z "$ipv4" ]; then
   ip=$(echo "$ipv4" | cut -d':' -f1)
   mask=$(echo "$ipv4" | cut -d':' -f2)
   gw=$(echo "$ipv4" | cut -d':' -f3)
   dns=$(echo "$ipv4" | cut -d':' -f4)

   ifconfig eth0 "$ip" netmask "$mask" up
   route add default gw $gw
   echo "nameserver $dns" > /etc/resolv.conf
fi 
 
$就是()中執行的結果
%%=>方向式.由右到左
##=>方向式,由左到右
中括號[]=> 條件式
! =>反向,not
-z =>沒有內容
! -z "$ipv4" =>只要ipv4有內容

2. 重製 initial RAM disk 檔案 (tsc32.gz)
# find | sudo cpio -o -H newc | gzip -2 > ../tsc32.gz 


3.測試系統
# kvm -name "tsc32" -m 128 -kernel ../vmlinuz -initrd ../tsc32.gz 
-append "ipv4=192.168.0.1:255.255.255.0:192.168.0.254:168.95.1.1" 
 
----------------------------------------------------------------------------
安裝 TUN/TAP 管理套件 
TUN/TAP 原本就是 Linux 系統所提供的虛擬網路介面裝置,只是預設並不是每套 Linux 的發行版
本都有內建此功能,以 Ubuntu 12.04 來說,預設就沒有安裝 TUN/TAP 的相關套件,所以要使用 
TUN/TAP 來建立虛擬網路卡之前,則需要先來安裝操控 TAP 的相關套件。
操控 TUN/TAP 的套件名稱為 ”uml_utilities”,所以可以利用以下指令來安裝此套件:
# tunctl
程式 'tunctl' 目前尚未安裝。  您可以由輸入以下內容安裝:
# sudo apt-get install uml-utilities 
 
設定 TAP 網路裝置
1. 產生 TAP 網路裝置 
# sudo tunctl -u student
Set 'tap0' persistent and owned by uid 1000
 
2. 手動設定 TAP 網卡的 MAC 位址 
# ifconfig tap0 hw ether 4c:22:d0:b8:78:ae
SIOCSIFHWADDR: 此項操作並不被允許

# sudo ifconfig tap0 hw ether 4c:22:d0:b8:78:ae
# ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 4c:22:d0:b8:78:ae  
          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:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B) 

虛擬橋接網路裝置 - Bridge

產生橋接網路裝置
$ sudo brctl addbr mybr
 
橋接網路裝置的內部網卡 (網卡名稱與橋接網路裝置同名) 
$ ifconfig mybr
mybr      Link encap:Ethernet  HWaddr 32:67:98:ec:f8:83  
          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:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 
 
移除橋接網路裝置
$ sudo brctl delbr mybr

----------------------------------------------------------------------------------------------------------------


 設定橋接網路裝置
1. 產生橋接網路裝置 (swhub)
$ sudo brctl addbr swhub
$ ifconfig swhub
swhub     Link encap:Ethernet  HWaddr 2a:3f:01:f8:2b:e6  
          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:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


2. 設定橋接網路裝置的 IP

$ sudo ifconfig swhub 172.16.20.254 netmask 255.255.255.0 up
$ ifconfig swhub
swhub     Link encap:Ethernet  HWaddr 2a:3f:01:f8:2b:e6  
          inet addr:172.16.20.254  Bcast:172.16.255.255  Mask:255.255.255.0
          inet6 addr: fe80::283f:1ff:fef8:2be6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:6005 (6.0 KB)

定 TAP 網路介面
1. 產生二個 TAP 網路介面
$ sudo tunctl -b -u student
tap0
$ sudo tunctl -b -u student
tap1

2. 啟動新建 TAP 網路裝置
$ sudo ifconfig tap0 up
$ ifconfig tap0
tap0      Link encap:Ethernet  HWaddr 06:1d:10:90:0c:29  
          UP 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:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
 

$ sudo ifconfig tap1 up
$ ifconfig tap1
tap1      Link encap:Ethernet  HWaddr 6e:5f:65:68:41:48  
          UP 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:500 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

設定 Switch-HUB 網路裝置
1. 將 TAP 網路介面, 連接至橋接網路裝置
$ sudo brctl addif swhub tap1
$ sudo brctl addif swhub tap0 
 
2. 檢視 swhub 橋接網路裝置的 MAC 表格
$ sudo brctl showmacs swhub
port no mac addr  is local? ageing timer
  2 06:1d:10:90:0c:29 yes     0.00
  1 6e:5f:65:68:41:48 yes     0.00

swhub 橋接網路裝置, 會根據加入網卡裝置, 選其最小的 MAC 位址, 作為本身的 MAC 位址, 內容如下 :
$ ifconfig swhub
swhub     Link encap:Ethernet  HWaddr 06:1d:10:90:0c:29  
          inet addr:172.16.20.254  Bcast:172.16.255.255  Mask:255.255.0.0
          inet6 addr: fe80::384f:a4ff:fec7:5799/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:10545 (10.5 KB)

3. 檢視 swhub 內部運作資訊
$ sudo brctl showstp swhub
swhub
 bridge id  8000.061d10900c29
 designated root 8000.061d10900c29
 root port     0   path cost     0
 max age    20.00   bridge max age    20.00
 hello time     2.00   bridge hello time    2.00
 forward delay    15.00   bridge forward delay   15.00
 ageing time   300.01
 hello timer     0.36   tcn timer     0.00
 topology change timer    0.00   gc timer    32.29
 flags   

tap0 (2)
 port id  8002   state         disabled
 designated root 8000.061d10900c29 path cost   100
 designated bridge 8000.061d10900c29 message age timer    0.00
 designated port 8002   forward delay timer    0.00
 designated cost    0   hold timer     0.00
 flags   

tap1 (1)
 port id  8001   state         disabled
 designated root 8000.061d10900c29 path cost   100
 designated bridge 8000.061d10900c29 message age timer    0.00
 designated port 8001   forward delay timer    0.00
 designated cost    0   hold timer     0.00
 flags   

---------------------------------------------------------------------------------------------------------------
啟動 DHCP Server
$ sudo dnsmasq -u student --bind-interfaces --pid-file=/tmp/dnsmasq172.pid 
--conf-file= --listen-address 172.16.20.254 --dhcp-range 172.16.20.100,172.16.20.200 
--dhcp-lease-max=10 --except-interface=lo --interface=swhub

$ ps aux | grep dnsmasq
(檢視已啟動DNS)

$ kill -9 "pid no"
 (強制刪除pid執行程序)
 
啟動虛擬電腦
1. 第一部 Client 虛擬電腦
$ cd ~
$ kvm -name "tsc321" -m 128 -kernel vmlinuz -initrd tsc32.gz -net nic -net tap,ifname=tap0,script=no,downscript=no &

第一個-net 決定本身虛擬電腦網卡規格
第二個-net tap決定另一頭網路接哪裡(tap0)

2. 第二部 Client 虛擬電腦
$ kvm -name "tsc322" -m 128 -kernel vmlinuz -initrd tsc32.gz -net nic,macaddr=52:54:72:16:20:11 -net tap,
ifname=tap1,script=no,downscript=no -append "ipv4=172.16.20.11:255.255.255.0:172.16.20.254:168.95.1.1" &

測通網路
1. 在 HOST OS 執行 ping 命令
$ ping 172.16.20.10
$ ping 172.16.20.11
$ arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.16.20.11             ether   52:54:72:16:20:11   C                     swhub
172.16.20.196             ether   52:54:72:16:20:10   C                     swhub

啟動 NAT
$ sudo iptables -t nat -A POSTROUTING -s 172.16.20.0/24 -j MASQUERADE
-s =>subnet ID





沒有留言:

張貼留言

(TOP)Temp for soulin only

123