单机搭建学习网络
?
?
單機(jī)搭建學(xué)習(xí)網(wǎng)絡(luò)
User Mode Linux
Version 1.0
?
?
?
?
?
?
?
?
?
?
?
?
?
Copyleft@ysmonk
2010年1月
目錄
... 12 1???? 系統(tǒng)簡(jiǎn)介... 12???? 快速搭建... 2
2.1????? 準(zhǔn)備工具和軟件... 2
2.2????? 運(yùn)行... 2
3???? 準(zhǔn)備工作... 3
3.1????? 預(yù)備知識(shí)... 3
3.1.1?????? user-mode-linux. 3
3.1.2?????? uml_net 3
3.1.3?????? screen命令... 3
3.2????? 安裝軟件... 3
3.3????? 制作文件系統(tǒng)... 3
4???? 開(kāi)始搭建... 5
4.1????? 虛擬交換機(jī)... 5
4.2????? 定制文件系統(tǒng)... 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????? 實(shí)現(xiàn)NAT. 7
4.3.1?????? 設(shè)置serverA. 7
4.3.2?????? 設(shè)置serverB. 7
4.3.3?????? 設(shè)置host 7
5???? 測(cè)試... 9
5.1????? 測(cè)試交換機(jī)... 9
5.1.1?????? 測(cè)試switch1. 9
5.1.2?????? 測(cè)試switchA. 9
5.1.3?????? 測(cè)試switchB. 9
5.2????? 測(cè)試NAT. 9
5.2.1?????? clientA. 9
5.2.2?????? clientB. 10
5.3????? 高級(jí)測(cè)試... 10
5.3.1?????? 測(cè)試×××.. 10
6???? 常見(jiàn)錯(cuò)誤
1????? 系統(tǒng)簡(jiǎn)介
如下圖所示的網(wǎng)絡(luò)環(huán)境, 最少需要5臺(tái)工作站才可以搭建起來(lái), 這給網(wǎng)絡(luò)學(xué)習(xí)帶來(lái)極大的障礙, 但是利用User Mode Linux的特性, 就可以在一臺(tái)工作站上模擬出這個(gè)環(huán)境.
本文基于Ubuntu Intrepid環(huán)境.
?
2????? 快速搭建
文件系統(tǒng)的制作有些繁瑣,因此可以直接使用已經(jīng)創(chuàng)建好的文憑系統(tǒng)和腳本進(jìn)行測(cè)試.
2.1??? 準(zhǔn)備工具和軟件
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??? 運(yùn)行
sudo –i
./simnet.sh
現(xiàn)在網(wǎng)絡(luò)已經(jīng)啟動(dòng),可以通過(guò)以下命令進(jìn)入相應(yīng)的模擬設(shè)備操作界面.從而進(jìn)行第5節(jié)的測(cè)試.
| 命令 | 虛擬設(shè)備 |
| 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????? 準(zhǔn)備工作
3.1??? 預(yù)備知識(shí)
3.1.1??? user-mode-linux
User-mode-linux (UML) 是讓一個(gè)Linux作為一個(gè)獨(dú)立進(jìn)程運(yùn)行在另一個(gè)linux上。
UML 是一種在同一時(shí)間運(yùn)行多Linux 的安全方式。每個(gè)進(jìn)程都是獨(dú)立去其他的,這非常安全,例如在同一機(jī)器上進(jìn)行多種測(cè)試和研發(fā)而不互相干擾。如果一些測(cè)試進(jìn)程損壞并不會(huì)影響宿主系統(tǒng)或研發(fā)用進(jìn)程。
3.1.2??? uml_net
User Mode Linux連接網(wǎng)絡(luò)有三種方式,分別是slirp, tuntap和uml_switch.
slirp方式最簡(jiǎn)單, 只要安裝slirp軟件,在啟動(dòng)時(shí)指定eth0=slirp,并將UML的ip設(shè)置為10.0.2.15即可, 但是這個(gè)方法只支持TCP和UDP,不支持ICMP,因此ping不能主機(jī).
tuntap方式稍微復(fù)雜一些, 啟動(dòng)時(shí)指定eth0=tuntap,,,192.168.1.201, 這樣會(huì)在主機(jī)上安裝一個(gè)IP為192.168.1.201的tap設(shè)備,UML中設(shè)置同一網(wǎng)段的IP即可.
uml_switch的方法最為強(qiáng)大, uml_switch命令會(huì)創(chuàng)建一個(gè)虛擬交換機(jī),并在主機(jī)上安裝一個(gè)tap設(shè)備, 如uml_switch –tap tap1 –unix /tmp/switch1, 將會(huì)生成tap1設(shè)備和虛擬交換機(jī)/tmp/switch1, UML只要指定eth0=daemon,,unix,/tmp/switch1即可連上指定的交換機(jī).
3.1.3??? screen命令
使用screen命令,可以在一個(gè)putty上完成所有這些操作,下面這個(gè)命令的意思是:
在后臺(tái)啟動(dòng)一個(gè)screen, 名稱(chēng)為<screenName>, 并在啟動(dòng)的screen上執(zhí)行<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??? 制作文件系統(tǒng)
#以下命令都使用root帳戶(hù)操作
#1. 創(chuàng)建映像文件,并格式文件系統(tǒng)
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到文件系統(tǒng)
cp -r /usr/lib/uml/modules/* /mnt/lib/modules/
#3. 定制網(wǎng)絡(luò) 文件系統(tǒng) 終端 用戶(hù)
chroot /mnt
#3.1 網(wǎng)絡(luò) /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 創(chuàng)建用戶(hù),并加入sudoers
adduser hankjin
#修改/etc/sudoers
root??? ALL=(ALL) ALL
hankjin ALL=(ALL) ALL
4????? 開(kāi)始搭建
首先使用uml_switch命令創(chuàng)建三個(gè)虛擬交換機(jī), 同時(shí)自動(dòng)在host上生成有一個(gè)tap,然后啟動(dòng)五個(gè)User Mode Linux,同時(shí)連接到虛擬交換機(jī)上.
4.1??? 虛擬交換機(jī)
使用uml_switch命令虛擬三臺(tái)交換機(jī):switch1, switchA和switchB, 其中:
switch1的網(wǎng)絡(luò)為10.0.0.0/24,啟動(dòng)方式為
sudo uml_switch –tap tap1 –unix /tmp/switch1
switchA的網(wǎng)絡(luò)為192.168.11.0/24,啟動(dòng)方式為
sudo uml_switch –tap tapA –unix /tmp/switchA
switchB的網(wǎng)絡(luò)為192.168.22.0/24,啟動(dòng)方式為:
sudo uml_switch –tap tapB –unix /tmp/switchB
4.2??? 定制文件系統(tǒng)
User Mode Linux支持Copy On Write技術(shù), 可以xxx,但是這里為了簡(jiǎn)化環(huán)境,直接將上面制作的hank-fs拷貝一個(gè)復(fù)本即可, 因此, 對(duì)每個(gè)User Mode Linux,我們都先拷貝一個(gè)復(fù)本出來(lái).
4.2.1??? serverA
首先從hank-fs拷貝一個(gè)復(fù)本 cp hank-fs hank-fs-AS
serverA有兩個(gè)網(wǎng)卡,一個(gè)連接switch1(eth0),一個(gè)連接switchA(eth1),因此啟動(dòng)serverA的命令為
linux ubd0=hank-fs-AS eth0=daemon,,unix,/tmp/switch1 eth1=daemon,,unix,/tmp/switchA
?????? 啟動(dòng)后設(shè)置serverA的網(wǎng)絡(luò), 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拷貝一個(gè)復(fù)本 cp hank-fs hank-fs-BS
serverB有兩個(gè)網(wǎng)卡,一個(gè)連接switch1(eth0),一個(gè)連接switchA(eth1),因此啟動(dòng)serverB的命令為
linux ubd0=hank-fs-BS eth0=daemon,,unix,/tmp/switch1 eth1=daemon,,unix,/tmp/switchB
?????? 啟動(dòng)后設(shè)置serverB的網(wǎng)絡(luò), 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拷貝一個(gè)復(fù)本 cp hank-fs hank-fs-A1
clientA有一個(gè)網(wǎng)卡,連接switchA(eth0),因此啟動(dòng)clientA的命令為
linux ubd0=hank-fs-A1 eth0=daemon,,unix,/tmp/switchA
?????? 啟動(dòng)后設(shè)置clientA的網(wǎng)絡(luò), 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拷貝一個(gè)復(fù)本 cp hank-fs hank-fs-B1
ClientB1有一個(gè)網(wǎng)卡,連接switchB(eth0),因此啟動(dòng)clientB1的命令為
linux ubd0=hank-fs-B1 eth0=daemon,,unix,/tmp/switchB
?????? 啟動(dòng)后設(shè)置clientB1的網(wǎng)絡(luò), 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拷貝一個(gè)復(fù)本 cp hank-fs hank-fs-B2
ClientB2有一個(gè)網(wǎng)卡,連接switchB(eth0),因此啟動(dòng)clientB2的命令為
linux ubd0=hank-fs-B2 eth0=daemon,,unix,/tmp/switchB
?????? 啟動(dòng)后設(shè)置clientB2的網(wǎng)絡(luò), 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??? 實(shí)現(xiàn)NAT
Server A負(fù)責(zé)將switchA內(nèi)的工作站連入switch1的網(wǎng)絡(luò).
Server A負(fù)責(zé)將switchA內(nèi)的工作站連入switch1的網(wǎng)絡(luò)
Host則通過(guò)tap1將switch1內(nèi)的工作站連入host的網(wǎng)絡(luò)
4.3.1??? 設(shè)置serverA
編輯serverA的啟動(dòng)腳本,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??? 設(shè)置serverB
編輯serverB的啟動(dòng)腳本,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??? 設(shè)置host
有host系統(tǒng)上設(shè)置tap1的轉(zhuǎn)發(fā)功能,從而使學(xué)習(xí)網(wǎng)絡(luò)的所有主機(jī)都可以連入互聯(lián)網(wǎng).
#!/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????? 測(cè)試
?
5.1??? 測(cè)試交換機(jī)
5.1.1??? 測(cè)試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??? 測(cè)試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??? 測(cè)試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??? 測(cè)試NAT
5.2.1??? clientA
clientA-serverB
clientA-host
clientA-internet
5.2.2??? clientB
clientB1-serverA
clientB1-host
clientB2-internet
5.3??? 高級(jí)測(cè)試
5.3.1??? 測(cè)試×××
?
例如我們想讓clientB連入switchA的網(wǎng)絡(luò),可以在serverA上安裝pptpd服務(wù), 在clientB上安裝pptp客戶(hù)端,然后clientB就可以訪問(wèn)switchA內(nèi)的工作站了
首先在clientB1上ping clientA, 不能ping通, 接下來(lái)開(kāi)始配置×××
首先在serverA上配置×××服務(wù)器:
在serverA上, sudo apt-get install pptpd, 然后配置分配的IP和用戶(hù)帳戶(hù):
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上配置×××客戶(hù)端
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服務(wù)
sudo pppd call myserver
ifconfig
如果發(fā)現(xiàn)ppp0連接,表示×××服務(wù)創(chuàng)建成功,然后從clientB1上ping clientA成功. 從clientA上ping clientB1也成功, clientB1已經(jīng)成功潛入switchA的網(wǎng)絡(luò).
1????? 常見(jiàn)錯(cuò)誤
1)???? 創(chuàng)建文件系統(tǒng)失敗
2)???? 連接網(wǎng)絡(luò)失敗
3)???? NAT轉(zhuǎn)換失敗
轉(zhuǎn)載于:https://blog.51cto.com/cntway/649735
總結(jié)
- 上一篇: 公户车转个人为啥便宜?
- 下一篇: How to create a simp