建立虛擬網路 (建立給內部使用的虛擬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
沒有留言:
張貼留言