单机搭建学习网络
?
?
單機搭建學習網絡
User Mode Linux
Version 1.0
?
?
?
?
?
?
?
?
?
?
?
?
?
Copyleft@ysmonk
2010年1月
目錄
... 12 1???? 系統簡介... 12???? 快速搭建... 2
2.1????? 準備工具和軟件... 2
2.2????? 運行... 2
3???? 準備工作... 3
3.1????? 預備知識... 3
3.1.1?????? user-mode-linux. 3
3.1.2?????? uml_net 3
3.1.3?????? screen命令... 3
3.2????? 安裝軟件... 3
3.3????? 制作文件系統... 3
4???? 開始搭建... 5
4.1????? 虛擬交換機... 5
4.2????? 定制文件系統... 5
4.2.1?????? serverA. 5
4.2.2?????? serverB. 5
4.2.3?????? clientA. 6
4.2.4?????? clientB1. 6
4.2.5?????? clientB2. 6
4.3????? 實現NAT. 7
4.3.1?????? 設置serverA. 7
4.3.2?????? 設置serverB. 7
4.3.3?????? 設置host 7
5???? 測試... 9
5.1????? 測試交換機... 9
5.1.1?????? 測試switch1. 9
5.1.2?????? 測試switchA. 9
5.1.3?????? 測試switchB. 9
5.2????? 測試NAT. 9
5.2.1?????? clientA. 9
5.2.2?????? clientB. 10
5.3????? 高級測試... 10
5.3.1?????? 測試×××.. 10
6???? 常見錯誤
1????? 系統簡介
如下圖所示的網絡環境, 最少需要5臺工作站才可以搭建起來, 這給網絡學習帶來極大的障礙, 但是利用User Mode Linux的特性, 就可以在一臺工作站上模擬出這個環境.
本文基于Ubuntu Intrepid環境.
?
2????? 快速搭建
文件系統的制作有些繁瑣,因此可以直接使用已經創建好的文憑系統和腳本進行測試.
2.1??? 準備工具和軟件
sudo apt-get install uml_utilities user-mode-linux
wget ftp://cbib.cnkk.org/incomming/hank-fs-AS
wget ftp://cbib.cnkk.org/incomming/hank-fs-BS
wget ftp://cbib.cnkk.org/incomming/hank-fs-A1
wget ftp://cbib.cnkk.org/incomming/hank-fs-B1
wget ftp://cbib.cnkk.org/incomming/hank-fs-B2
wget ftp://cbib.cnkk.org/incomming/simnet.sh
chmod +x simnet.sh
2.2??? 運行
sudo –i
./simnet.sh
現在網絡已經啟動,可以通過以下命令進入相應的模擬設備操作界面.從而進行第5節的測試.
| 命令 | 虛擬設備 |
| screen –r sw1 | Switch 1 |
| screen –r swA | Switch A |
| screen –r swB | Switch B |
| screen –r vmAS | Server A |
| screen –r vmBS | Server B |
| screen –r vmA1 | Client A |
| screen –r vmB1 | Client B1 |
| screen –r vmB2 | Client B2 |
?
3????? 準備工作
3.1??? 預備知識
3.1.1??? user-mode-linux
User-mode-linux (UML) 是讓一個Linux作為一個獨立進程運行在另一個linux上。
UML 是一種在同一時間運行多Linux 的安全方式。每個進程都是獨立去其他的,這非常安全,例如在同一機器上進行多種測試和研發而不互相干擾。如果一些測試進程損壞并不會影響宿主系統或研發用進程。
3.1.2??? uml_net
User Mode Linux連接網絡有三種方式,分別是slirp, tuntap和uml_switch.
slirp方式最簡單, 只要安裝slirp軟件,在啟動時指定eth0=slirp,并將UML的ip設置為10.0.2.15即可, 但是這個方法只支持TCP和UDP,不支持ICMP,因此ping不能主機.
tuntap方式稍微復雜一些, 啟動時指定eth0=tuntap,,,192.168.1.201, 這樣會在主機上安裝一個IP為192.168.1.201的tap設備,UML中設置同一網段的IP即可.
uml_switch的方法最為強大, uml_switch命令會創建一個虛擬交換機,并在主機上安裝一個tap設備, 如uml_switch –tap tap1 –unix /tmp/switch1, 將會生成tap1設備和虛擬交換機/tmp/switch1, UML只要指定eth0=daemon,,unix,/tmp/switch1即可連上指定的交換機.
3.1.3??? screen命令
使用screen命令,可以在一個putty上完成所有這些操作,下面這個命令的意思是:
在后臺啟動一個screen, 名稱為<screenName>, 并在啟動的screen上執行<command>命令
screen –S <screenName> -d –m <command>
例如
screen –S vmA1 –d –m linux ubd0=hank-fs-A1 eth0=daemon,,unix,/tmp/switchA
3.2??? 安裝軟件
sudo apt-get install uml_utilities user-mode-linux iptables
3.3??? 制作文件系統
#以下命令都使用root帳戶操作
#1. 創建映像文件,并格式文件系統
dd if=/dev/zero of=hank-fs bs=1024K count=400
mkfs.ext3 hank-fs
#2.1 加載基本文件
mount -o loop hank-fs /mnt
debootstrap --arch=i386 intrepid /mnt http://debian.ustc.edu.cn/ubuntu
#2.2. 拷貝modules到文件系統
cp -r /usr/lib/uml/modules/* /mnt/lib/modules/
#3. 定制網絡 文件系統 終端 用戶
chroot /mnt
#3.1 網絡 /etc/network/interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
#3.2 文件 /etc/fstab
/dev/ubda? /? ext3 defaults 0 1
proc????????? /proc? proc defaults 0 0
#3.3 終端 /etc/default/console-setup, 注釋掉這下面一句
#ACTIVE_CONSOLE=tty[1-6]
cd /etc/event.d/
rm tty[2-6]
mv tty1 tty0
#/etc/event.d/tty0 的最后一行,將tty1改為tty0
exec /sbin/getty 38400 tty0
#3.4 創建用戶,并加入sudoers
adduser hankjin
#修改/etc/sudoers
root??? ALL=(ALL) ALL
hankjin ALL=(ALL) ALL
4????? 開始搭建
首先使用uml_switch命令創建三個虛擬交換機, 同時自動在host上生成有一個tap,然后啟動五個User Mode Linux,同時連接到虛擬交換機上.
4.1??? 虛擬交換機
使用uml_switch命令虛擬三臺交換機:switch1, switchA和switchB, 其中:
switch1的網絡為10.0.0.0/24,啟動方式為
sudo uml_switch –tap tap1 –unix /tmp/switch1
switchA的網絡為192.168.11.0/24,啟動方式為
sudo uml_switch –tap tapA –unix /tmp/switchA
switchB的網絡為192.168.22.0/24,啟動方式為:
sudo uml_switch –tap tapB –unix /tmp/switchB
4.2??? 定制文件系統
User Mode Linux支持Copy On Write技術, 可以xxx,但是這里為了簡化環境,直接將上面制作的hank-fs拷貝一個復本即可, 因此, 對每個User Mode Linux,我們都先拷貝一個復本出來.
4.2.1??? serverA
首先從hank-fs拷貝一個復本 cp hank-fs hank-fs-AS
serverA有兩個網卡,一個連接switch1(eth0),一個連接switchA(eth1),因此啟動serverA的命令為
linux ubd0=hank-fs-AS eth0=daemon,,unix,/tmp/switch1 eth1=daemon,,unix,/tmp/switchA
?????? 啟動后設置serverA的網絡, sudo vi /etc/network/interface:
auto eth0
iface eth0 inet static
???????? address 10.0.0.10
???????? netmask 255.255.255.0
???????? gateway 10.0.0.1
auto eth1
iface eth1 inet static
???????? address 192.168.11.3
???????? netmask 255.255.255.0
4.2.2??? serverB
首先從hank-fs拷貝一個復本 cp hank-fs hank-fs-BS
serverB有兩個網卡,一個連接switch1(eth0),一個連接switchA(eth1),因此啟動serverB的命令為
linux ubd0=hank-fs-BS eth0=daemon,,unix,/tmp/switch1 eth1=daemon,,unix,/tmp/switchB
?????? 啟動后設置serverB的網絡, sudo vi /etc/network/interface:
auto eth0
iface eth0 inet static
???????? address 10.0.0.20
???????? netmask 255.255.255.0
???????? gateway 10.0.0.1
auto eth1
iface eth1 inet static
???????? address 192.168.22.1
???????? netmask 255.255.255.0
4.2.3??? clientA
首先從hank-fs拷貝一個復本 cp hank-fs hank-fs-A1
clientA有一個網卡,連接switchA(eth0),因此啟動clientA的命令為
linux ubd0=hank-fs-A1 eth0=daemon,,unix,/tmp/switchA
?????? 啟動后設置clientA的網絡, sudo vi /etc/network/interface:
auto eth0
iface eth0 inet static
???????? address 192.168.11.5
???????? netmask 255.255.255.0
???????? gateway 192.168.11.3
4.2.4??? clientB1
首先從hank-fs拷貝一個復本 cp hank-fs hank-fs-B1
ClientB1有一個網卡,連接switchB(eth0),因此啟動clientB1的命令為
linux ubd0=hank-fs-B1 eth0=daemon,,unix,/tmp/switchB
?????? 啟動后設置clientB1的網絡, sudo vi /etc/network/interface:
auto eth0
iface eth0 inet static
???????? address 192.168.22.3
???????? netmask 255.255.255.0
???????? gateway 192.168.22.1
4.2.5??? clientB2
首先從hank-fs拷貝一個復本 cp hank-fs hank-fs-B2
ClientB2有一個網卡,連接switchB(eth0),因此啟動clientB2的命令為
linux ubd0=hank-fs-B2 eth0=daemon,,unix,/tmp/switchB
?????? 啟動后設置clientB2的網絡, sudo vi /etc/network/interface:
auto eth0
iface eth0 inet static
???????? address 192.168.22.5
???????? netmask 255.255.255.0
???????? gateway 192.168.22.1
4.3??? 實現NAT
Server A負責將switchA內的工作站連入switch1的網絡.
Server A負責將switchA內的工作站連入switch1的網絡
Host則通過tap1將switch1內的工作站連入host的網絡
4.3.1??? 設置serverA
編輯serverA的啟動腳本,sudo vi /etc/rc.local,sudo /etc/rc.local
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.11.0/24 -j MASQUERADE
4.3.2??? 設置serverB
編輯serverB的啟動腳本,sudo vi /etc/rc.local,sudo /etc/rc.local
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F POSTROUTING
iptables -t nat -F PREROUTING
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.22.0/24 -j MASQUERADE
?
4.3.3??? 設置host
有host系統上設置tap1的轉發功能,從而使學習網絡的所有主機都可以連入互聯網.
#!/bin/bash
sudo ifconfig tap1 10.0.0.1 netmask 255.255.255.0
echo "echo 1 > /proc/sys/net/ipv4/ip_forward" | sudo sh
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -F PREROUTING
sudo iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE
?
5????? 測試
?
5.1??? 測試交換機
5.1.1??? 測試switch1
在serverA上ping serverB, ping 10.0.0.20
在serverA上ping host, ping 10.0.0.1
在serverB上ping serverA, ping 10.0.0.10
在serverB上ping host, ping 10.0.0.1
在host上ping serverA, ping 10.0.0.10
在serverA上ping Internet, ping www.baidu.com
5.1.2??? 測試switchA
在clientA上ping serverA, ping 192.168.11.3
在serverA上ping clientA, ping 192.168.11.5
在clientA上ping serverB, ping 10.0.0.20
在clientA上ping host, ping 10.0.0.1
在clientA上ping Internet, ping www.sina.com
5.1.3??? 測試switchB
在serverB上ping clientB1, ping 192.168.22.3
在clientB1上ping serverB, ping 192.168.22.1
在clientB2上ping clientB1, ping 192.168.22.3
在clientB2上ping serverA, ping 10.0.0.10
在clientB1上ping host, ping 10.0.0.1
在clientB2上ping Internet, ping www.sina.com
5.2??? 測試NAT
5.2.1??? clientA
clientA-serverB
clientA-host
clientA-internet
5.2.2??? clientB
clientB1-serverA
clientB1-host
clientB2-internet
5.3??? 高級測試
5.3.1??? 測試×××
?
例如我們想讓clientB連入switchA的網絡,可以在serverA上安裝pptpd服務, 在clientB上安裝pptp客戶端,然后clientB就可以訪問switchA內的工作站了
首先在clientB1上ping clientA, 不能ping通, 接下來開始配置×××
首先在serverA上配置×××服務器:
在serverA上, sudo apt-get install pptpd, 然后配置分配的IP和用戶帳戶:
sudo vi /etc/pptpd.conf
localip: 192.168.11.20
remoteip: 192.168.11.21-29
sudo vi /etc/ppp/chap-secrets
hankjin?????? *?????? hjz???? *
sudo /etc/init.d/pptpd restart
?
然后在clientB1上配置×××客戶端
sudo apt-get install pptp-linux
sudo vi /etc/ppp/chap-secrets
hankjin?????? mypptp?????? hjz???? *
sudo vi /etc/ppp/peers/myserver
pty "pptp 10.0.0.10 --nolaunchpppd"
#mppe required,stateless
name hankjin
remotename mypptp
?
require-pap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
debug
#ipparam pptp:XXXX
?
# do not require the server to authenticate to our client
noauth
?
persist
最后在clientB1上連接serverA的pptpd服務
sudo pppd call myserver
ifconfig
如果發現ppp0連接,表示×××服務創建成功,然后從clientB1上ping clientA成功. 從clientA上ping clientB1也成功, clientB1已經成功潛入switchA的網絡.
1????? 常見錯誤
1)???? 創建文件系統失敗
2)???? 連接網絡失敗
3)???? NAT轉換失敗
轉載于:https://blog.51cto.com/cntway/649735
總結
- 上一篇: 公户车转个人为啥便宜?
- 下一篇: Fatal error: Call to