2014年4月17日 星期四

進階 Linux 作業系統上機考

進階 Linux 作業系統上機考

1. 請建立一個橋接網路介面,名為 br9,其網域為 192.168.9.0/24,此橋接網路介面可以讓其 pxeserver (192.168.9.254) 提供 DNS、DHCP、tftp、www 以及 ftp 服務。

2. 請建立 pxeserver_學號.img,學號為你的學號,其影像檔大小為 5 GB,並在其中建置 PXE Server 之服務。

3. 利用 runpxe.sh 這個 shell script 來開機,並提供 DHCP 服務,提供之 IP 範圍為 192.168.9.51 ~ 192.168.9.100。

4. DNS 服務定義如下:

192.168.9.1 -> host1.my.com, gateway.my.com
192.168.9.2 -> host2.my.com
192.168.9.3 -> host3.my.com
..
192.168.9.254 -> host254.my.com, pxe.my.com

5. http://192.168.9.254 及 ftp://192.168.9.254 都要是 Debian 鏡像站 (掛載實體機上面的 NFS 分享)

6. 利用 netboot.sh 來測試是否能自 pxeserver_學號.img 網路開機,並進入 X-Window。

7. 請於中午 12:00 前將 pxeserver_學號.img 上傳至 ftp upload 目錄中。

8. FTP 主機僅接受來自校內之 IP 上傳,請注意!!

2014年4月11日 星期五

建置 apache 伺服器

1. 安裝 apache 套件

在 Debian 作業系統底下要架設 Apache 伺服器必須先安裝 apache2 套件,指令如下所示:

# apt-get install apache2 \Enter


2. 掛載 deb_mirror.img

由於先前所完成之 deb_mirror.img 在虛擬機器中會被當作是 /dev/sdb1 這個分割區,其掛載點在 /var/www/debian 目錄,因此要在 PXE Server 中先新增此目錄,指令如下所示:

# mkdir -p /var/www/debian \Enter

接下來可以編輯 PXE Server 的 /etc/fstab 這個檔案,並新增底下這行:

UUID=b43e1707-19c5-42cb-9424-f4bf7118d39a /var/www/debian ext4 defaults 0 2

**** 請注意上述的 UUID 為 deb_mirror.img 之第一個分割區之 UUID ***

要取得此 UUID,請將 deb_mirror.img 連接到 /dev/loop1,再執行

# blkid /dev/loop1 \Enter

來取得其 UUID。

2. 啟動 apache 伺服器

要手動啟動 apache 伺服器之指令如下:

# /etc/init.d/apache2 restart \Enter
[ ok ] Restarting web server: apache2 ... waiting .

3. 修改 apache 伺服器至我們的 /srv/ftp 目錄

請以 root 權限編輯 /etc/apache2/sites-enabled/000-default.conf 這個檔案,將底下片段:

DocumentRoot /var/www/html

改成

DocumentRoot /srv/ftp

改完存檔後,再重新啟動 apache2 服務。


4 檢查 apache 伺服器是否啟動
請在實體機器上以瀏灠器打開 192.168.10.254 以及 192.168.10.254/debian 來觀看是否有內容。


5. trouble shooting

如果以瀏灠器打開 http://192.168.10.254,但是出現底下錯誤的話:

Forbidden

You don't have permission to access / on this server.


Apache/2.4.10 (Debian) Server at 192.168.10.254 Port 80
表示我們要作底下修改:
 
請編緝 /etc/apache2/apache2.conf
找到底下片段:
#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>
將註解符號 # 全部清除,變成底下的樣子:
 
<Directory /srv/>
       Options Indexes FollowSymLinks
       AllowOverride None
       Require all granted
</Directory>
之後,再重新啟動 apache2 服務,並觀察是否可以連上。

2014年4月10日 星期四

設定 iptable 規則以便 PXE Server 連上網路

底下操作請全部以 root 進行

0 請設定 ipv4 forward,指令如下:

echo "1" > /proc/sys/net/ipv4/ip_forward


我們可以執行底下指令來確認設定是否有成功:

cat /proc/sys/net/ipv4/ip_forward

其輸出應為 "1"


1. 清除所有 iptable rules

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

2. 設定新的 iptable rules
  iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE


設定完畢後使用 pxe server 來作 apt-get update/apt-get upgrade/apt-get install PKG 來看看是否能連上鏡像站,若無法連上鏡像站的話請檢查 DNS 伺服器設定。

建置 DHCP 伺服器

要讓 PXE Server 可以指派 IP 給 192.168.10.0/24 網域中的所(有)電腦,必須先安裝DHCP 伺服器並進行設定才行,首先要安裝 isc-dhcp-server 套件,請執行底下指令以進行安裝:

# apt-get install isc-dhcp-server \Enter


1. 設定 DHCP 伺服器

DHCP 伺服器之設定檔位置在 /etc/dhcp/dhcpd.conf,我們希望 DHCP 伺服器所給定的 IP 範圍限制在 192.168.10.100 ∼ 192.168.10.200 間,其它 IP 由我們手動設定使用,其內容如列表 3.8 所示:

option domain−name " example . org " ;
option domain−name−servers 8.8.8.8;

default−lease−time 600;
max−lease−time 7200;
allow booting ;

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option subnet−mask 255.255.255.0;
option broadcast−address 192.168.10.255;
option routers 192.168.10.1;
option domain−name−servers 8.8.8.8;
next−server 192.168.10.254;
filename " pxelinux .0 " ;
}

因此我們的 IP 分配如下:

192.168.10.1 -> 閘道 (br10)
192.168.10.2 ~ 192.168.10.99 -> 自定 IP
192.168.10.100 ~ 192.168.10.200 -> DHCP 自動分配 IP
192.168.10.201 ~ 191.168.10.253 -> 自定 IP
192.168.10.254 -> PXE Server

接著請設定 /etc/default/isc-dhcp-server 這個檔案,把底下片段
INTERFACESv4=:
修改為
INTERFACESv4="ens3"

其中 ens3 是你的網路卡。


2. 啟動 DHCP 伺服器

要啟動 DHCP 伺服器,請執行底下指令:

# /etc/init.d/isc-dhcp-server restart \Enter


其輸出如下:
[ ok ] Stopping ISC DHCP server: dhcpd.
[ ok ] Starting ISC DHCP server: dhcpd

請注意第 3 行的訊息告訴我們 dhcpd 已被啟動,如果前面的設定都沒(有)作錯的話,理論上這個 DHCP 伺服器已經可以分配 IP 給 192.168.10.0/24 網段中之其它電腦了


3. 檢查 DHCP 伺服器是否正常動作
為了檢查 DHCP 伺服器是否有正常動作,我們可以檢視 DHCP 的設定檔,其位置在 /var/log/syslog。如果 DHCP 伺服器有正常動作的話,應該會(有)底下片段:

syslog:Mar 27 03:36:46 pxeserver dhcpd: DHCPDISCOVER from de:ad:be:ef:ec:a8 via eth0
syslog:Mar 27 03:36:47 pxeserver dhcpd: DHCPOFFER on 192.168.10.103 to de:ad:be:ef:ec:a8 via eth0
syslog:Mar 27 03:36:49 pxeserver dhcpd: DHCPREQUEST for 192.168.10.103 (192.168.10.254) from de:ad:be:ef:ec:a8 via eth0
syslog:Mar 27 03:36:49 pxeserver dhcpd: DHCPACK on 192.168.10.103 to de:ad:be:ef:ec:a8 via eth0




4.讓 DHCP 伺服器開機後就會啟動

# update-rc.d isc-dhcp-server defaults \Enter

update-rc.d: using dependency based boot sequencing



tftp 伺服器建置

2019/11/11 修訂

我們所架設的 PXE 伺服器主要提供同網域 (192.168.10.0/24) 上其它主機能透過網路開機,為了提供網路開機的功能,必須在 PXE 伺服器上安裝 DHCP 伺服器、TFTP 伺服器,底下介紹如何安裝 TFTP 伺服器:

請執行底下指令以安裝 tftp 套件:

# apt-get install tftpd-hpa \Enter

要設定 tftp 伺服器可以提供網路開機的服務必須先下載 X86_64 之 netboot 檔案,下載位置如底下所示:

http://192.168.10.254/debian/dists/buster/main/installer-amd64/current/images/netboot/

ftp://ftp.tw.debian.org/debian/dists/buster/main/installer-amd64/current/images/netboot/

下載完畢後請以 root 權限將 netboot.tar.gz 解開在 /srv/tftp 目錄,指令如下:

# tar xfva netboot.tar.gz -C /srv/tftp \Enter

解完之後在 /srv/tftp 目錄下會有底下檔案:

root@pxe:/srv/tftp# ls -l
total 18908
drwxrwxr-x 3 root root     4096 Mar 30 06:03 debian-installer
lrwxrwxrwx 1 root root       47 Mar 30 06:03 ldlinux.c32 -> debian-installer/amd64/boot-screens/ldlinux.c32
-rw-r--r-- 1 root root 19351686 May  6 10:39 netboot.tar.gz
lrwxrwxrwx 1 root root       33 Mar 30 06:03 pxelinux.0 -> debian-installer/amd64/pxelinux.0
lrwxrwxrwx 1 root root       35 Mar 30 06:03 pxelinux.cfg -> debian-installer/amd64/pxelinux.cfg
-rw-rw-r-- 1 root root       64 Mar 30 06:03 version.info


如果沒有問題的話,接下來就可以準備啟動 tftp 伺服器了。


請執行底下指令來啟動 tftp 伺服器:

# /etc/init.d/tftpd-hpa restart \Enter
[ ok ] Restarting HPA's tftpd: in.tftpd.

這表示目前 tftp 已經啟動成功了,如果希望設定 tftp 伺服器於下次開機後自動執行,請使用 update-rc.d 來進行設定,如底下所示:


# update-rc.d tftpd-hpa defaults \Enter

其輸出如下所示:
update-rc.d: using dependency based boot sequencing
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match tftpd
-hpa Default-Stop values (1)

啟動完畢後,我們新增一個 buildlinux1.sh 來測試 tftp 伺服器是否已可正常使用,其內容如下:

 # IP=192.168.10.254 pxeserver.example.org

CPU=host
SMP=2
MEMORY=1024
HDA=linux1.img
HDA_SIZE=10G
MAC="DE:AD:BE:CF:EC:B9"
BRIDGE=br10
CDROM=/opt/iso/debian-8.3.0-amd64-CD-1.iso

[ -f $HDA ] && rm $HDA
qemu-img create $HDA $HDA_SIZE -f qcow2

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-drive file=$HDA,format=qcow2 \
-boot n \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE

新增完畢後,請執行:

~/virtualclassroom$ sh buildlinux1.sh

理論此時可以看到網路開機的畫面,然後可以開始裝機,這是我們第一台 linux 測試機器,其名稱為 linux1.my.com。



虛擬電腦教室所需之 shell script 及檔案定義

∼/ .................................................................... 家目錄
virtualclassroom/......................................虛擬電腦教室目錄
+debian-7.4.0-amd64-CD-1.iso....................Debian X86_64 ISO 檔
+pxeserver.img .................................... PXE Server 之影像檔
+deb_mirror.img........儲存 debian 套件之影像檔,PXE Server 之 sdb
+linux.img..........................................Linux 主機之影像檔
+buildpxe.sh..............安裝 PXE Server 之 shell script,列表 3.6
+buildlinux.sh ........... 安裝 Linux 主機之 shell script,列表 3.10
+runpxe.sh.......執行 PXE Server 虛擬機器之 shell script,列表 3.7
+runlinux.sh ........... 執行 Linux 虛擬主機之 shell script,列表 ??

-----------------------buildpxe.sh-------------------------------------------
# IP=192.168.2.254 pxeserver.example.org

CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
CDROM=/opt/iso/debian-7.4.0-amd64-CD-1.iso

qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-cdrom $CDROM -boot d \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
----------------------------------------------------------------------------------------

---------------------runpxe.sh-------------------------------------------------------
# IP=192.168.2.254
# PXE Server

CPU=host
SMP=2
MEMORY=1024
HDA=pxeserver.img
HDB=deb_mirror.img
MAC="DE:AD:BE:CF:EC:B7"
BRIDGE=br10
CDROM=/opt/iso/debian-7.4.0-amd64-CD-1.iso


qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-hdb $HDB \
-cdrom $CDROM \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
----------------------------------------------------------------------------------------------------

-------------------------buildlinux.sh----------------------------------------------------------
CPU=host
SMP=2
MEMORY=1024
HDA=linux.img
MAC="DE:AD:BE:EF:EC:A8"
BRIDGE=br10
CDROM=/opt/iso/debian-7.4.0-amd64-CD-1.iso


qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE \
-bootp tftp://192.168.10.254/pxelinux.0 \
-tftp /srv/tftp \
-------------------------------------------------------------------------------------------------------

------------------runlinux.sh---------------------------------------------------------------------
CPU=host
SMP=2
MEMORY=1024
HDA=linux.img
MAC="DD:AD:BE:EF:EC:B6"
BRIDGE=br10


qemu-system-x86_64 -enable-kvm -cpu $CPU -smp $SMP -m $MEMORY \
-hda $HDA \
-net nic,macaddr=$MAC -net bridge,br=$BRIDGE
---------------------------------------------------------------------------------------------------------

如何使用無線網卡連上網路

如何使用無線網卡連上網路

1. 關閉有線網路之 default route

請先以 route 指令來觀看目前的 default route 為何,其指令如下:

# route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
link-local      *               255.255.0.0     U     1000   0        0 eth0

我們可以看到目前預設的 route 是 eth0,請將此 default route 刪除,指令如下:

route del default eth0

接著再執行一次 route 來觀看結果,如底下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
link-local      *               255.255.0.0     U     1000   0        0 eth0


2. 將無線網卡啟動

通常無線網卡是 wlan0 這個裝置,如果不確定的話請觀看 /etc/udev/rules.d/70-persistent-net.rules 這個檔案,找到以下片段:

# PCI device 0x168c:/sys/devices/pci0000:00/0000:00:1c.1/0000:03:00.0 (ath9k)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="94:39:e5:62:ac:10", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"

確認為 wlan0 之後,請執行底下指令啟動無線網卡:

ifconfig wlan0 up

3. 使用無線網卡掃瞄基地台

一旦啟動無線網卡後,我們可以執行底下指令來掃瞄基地台:

# iwlist wlan0 scanning

其輸出如下所示:


Wlan0     Scan completed :
          Cell 01 - Address: 00:E0:4C:A5:EB:1A
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=64/70  Signal level=-46 dBm
                    Encryption key:off
                    ESSID:"stut_p503"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
..(中間省略)
          Cell 02 - Address: 00:12:0E:BA:7A:AE
                    Channel:6
                    Frequency:2.437 GHz (Channel 6)
                    Quality=35/70  Signal level=-75 dBm
                    Encryption key:off
                    ESSID:"stut_s412@"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
..(中間省略)
          Cell 03 - Address: 90:F6:52:B3:E4:9A
                    Channel:4
                    Frequency:2.427 GHz (Channel 4)
                    Quality=30/70  Signal level=-80 dBm
                    Encryption key:on
                    ESSID:"S611-AP"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
..(中間省略)


我們會發現無線網卡掃瞄到很多不同的 ESSID,這些 ESSID 即是無線網卡所掃瞄到的基地台,無線基地台分成兩個種類:

A. 需要密碼才能連線
B. 無需密碼即能連線

底下分別說明:

4. 連線需要密碼之無線基地台

假設我們有一個基地台名為 HAHAHA,其連線密碼為 0123456789 的話,則我們需要執行底下指令才能連線,建議寫成 shell script:

----------------------------wifi-on.sh--------------------------------
ifconfig eth0 down
wpa_passphrase "HAHAHA" 0123456790 > /etc/wpa_supplicant/WIFI.conf
wpa_supplicant -BDwext -iwlan0 -c/etc/wpa_supplicant/WIFI.conf

dhclient -v wlan0
route add default wlan0
echo "nameserver 8.8.8.8" > /etc/resolv.conf
-----------------------------------------------------------------------

5. 連線無需密碼之基地台

同上,如果無線基地台無需密碼即可連線的話,請執行底下指令即可:

iwconfig wlan0 essid "HAHAHA"
dhclient -v wlan0


6. 設定 default route

接下來請執行 route 檢查 wlan0 是否為 default route,如下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.22.127.254   0.0.0.0         UG    0      0        0 wlan0
10.22.120.0     *               255.255.248.0   U     0      0        0 wlan0

如果 wlan0 目前仍不是 default route,我們要手動將 wlan0 設定為 default route,指令如下:

# route add default wlan0

作完後請再執行 route 指令確認即可。