Contents

Linux - 打造輕巧 Linux 練習 Lab

1. 練習環境介紹

https://i.imgur.com/HcDyg3x.png
架構圖

  1. 主控端虛擬化 bastion Server 。
  2. 4 台巢狀式虛擬式機器 (練習區)。
  3. 所有均為無圖形化伺服器,減少無用資源消耗及硬碟空間。
  4. 可以透過主控端隨時快速還原 4 台虛擬式機器 (練習區) 為初始設定。
  5. 非常羽量化 (佔用較低的硬碟空間 )。
  6. 已經配置好 Ansible 環境可以直接使用。

2. 環境需求

  1. 需具備 VMware player 16.x (含)以上 或 VirtualBox 虛擬軟體 (建議使用 VMware)。

  2. 建議執行所需資源(含以上):

    CPU Memory Disk
    4 Cores 8G 40G
  3. 極限最小執行資源(效能較差):

    CPU Memory Disk
    2 Cores 4G 20G
Tip
執行速度會依據各電腦 CPU 時脈不同及硬碟 IO 速度有差別。

3. 練習環境下載點

* 載點為 Google Drive ,下載連結請點我

檔案壓縮後約 12 GB

建議使用新版 Lab 練習環境(強化功能跟優化),連結請點我

Success

Google Drive 雲端硬碟下載速度較其它空間來的快速,下載後解壓縮後,請依下方安裝步驟執行。

建議將檔案放置 SSD 硬碟分區內,執行速度會比較快。

Google Drive 下載圖例。

https://i.imgur.com/axVVjAz.png

4. 環境安裝方式

4.1 VMware 安裝方式

  1. 解壓縮後雙擊 howhow-bastion.ovf 檔案並使用 VMware 開啟,匯入機器名稱及路徑可以自行定義。

  2. 編輯虛擬機並確保下圖紅框(巢狀式虛擬化功能有開啟),另可以依實際狀況調整 CPU 或是 Memory

https://i.imgur.com/kR5XUHw.png

  1. 儲存後即可開啟機器

  2. 機器開啟後,虛擬機畫面會提示連線的 IP 及帳號密碼訊息。

https://i.imgur.com/5XHVPzz.png
啟動畫面

  • 帳號 : student
  • 密碼 : student
Tip

1. 預設使用 NAT 網路,VMware 可以直接從宿主機器 SSH 訪問 bastion 虛擬機,如要使用其它機器訪問請修改為 Bridged 橋接模式。

2. 建議登入 Bastion 使用任何可以支援 SSH 連線工具 (Putty 、 GitBash 、 Terminal、Xshell ) 等登入練習,比較方便使用複製貼上等功能。

3. Windows 10 新版本使用者可以直接使用 CMD 中 ssh 功能。


4.1 VirtuallBox 安裝方式

  1. 開啟 VirtuallBox 並點擊新增。

    • 名稱 : howhow8-mini-base 。
    • 機器資料夾 : 預設或是可以自訂定義 。
    • 類型 : Linux 。
    • 版本 : Red Hat (64-bit) 。
  2. 選擇使用現有虛擬硬碟檔案。

https://i.imgur.com/jW6MxOu.png

  1. 點擊加入虛擬硬碟檔案。

  2. 選取練習環境下載解壓縮後的 rhowhow-bastion-disk1.vmdk 。

  3. 選取上一步加入的硬碟。

  4. 建立後請勿開機,請先點擊設定選項。

  5. 查看 系統-處理器下方紅框 “啟用 Nested VT-x/AMD-v” 選項是否呈現不可點選狀態。

https://i.imgur.com/JpOCfBk.png

  1. 如出現上一步狀態,需切換至 VirtuallBox 資料夾(VirtuallBox檔案安裝路徑)後透過命令列方式啟動巢狀式虛擬化,指令如下 :
1
.\VBoxManage.exe modifyvm  "howhow8-mini-base"  --nested-hw-virt on
  1. 輸入完上一步指令後即可點選啟用巢狀式虛擬,並依需求調整 CPU 及 Memory。

https://i.imgur.com/AMAO9ah.png

  1. 修改虛擬機網路介面卡,將介面卡1 NAT 改為橋接介面卡 。

https://i.imgur.com/j7Cf6aT.png

Warning
VirtuallBox 與 VMware 不同,一定要使用橋接式網路,這樣才可直接從宿主機器 SSH 訪問 bastion 虛擬機。
  1. 儲存後即可開啟機器。
  1. 機器開啟後,虛擬機畫面會提示連線的 IP 及帳號密碼訊息。

https://i.imgur.com/5XHVPzz.png
啟動畫面

  • 帳號 : student
  • 密碼 : student
Tip

1. 建議登入 Bastion 使用任何可以支援 SSH 連線工具 (Putty 、 GitBash 、 Terminal、Xshell ) 等登入練習,比較方便使用複製貼上功能。

2. Windows 10 新版本使用者可以直接使用 CMD 中 ssh 功能。


5. 練習環境操作

5.1 Bastion 主控機

5.1.1 rht-vmctl 管理工具介紹

Bastion 主控機主要為啟停四台虛擬機或還原四台虛擬機初始設定。

Danger
Bastion 主控機主要做為跳板機及控制虛擬機功能,裡面很多套件都被移除,請勿在此機器上執行其它操作,該機器無法自動還原 ..

透過 HowHow 的工具可以快速協助使用者可以簡單操作,以 student 帳號,並透過 rht-vmctl 腳本進行相關作業,可以使用 <TAB> 鍵自動補齊。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
[root@basesion ~]# rht-vmctl 
This utility manages  supplied VMs on the local hypervisor.
Usage: rht-vmctl VMCMD VMNAME 
  where VMCMD is one of:
    start      - start up VMNAME
    status     - get all status
    poweroff   - poweroff VMNAME
    stop       - if running, force stop VMNAME
    reset      - force poweroff, return to saved or original state, start VMNAME
    display    - show VMNAME vnc information
    version    - show program's version number
    VMNAME of "all" processes all VMs available in the workstation、server[a-c]
	
    powered by HowHowWen
    Read More from HowHowWen (https://how64bit.com) WebSite ~
  • start - 啟動虛擬機 ( VMname / all )
  • status - 查看虛擬機狀態 ( VMname / all )
  • poweroff - 停止虛擬機 ( VMname / all )
  • stop - 強制關閉虛擬機 ( VMname / all )
  • reset - 還原虛擬機至初始狀態 ( VMname / all / worker )
  • display - 顯示虛擬機 VNC 連線方式及訊息 ( VMname )
  • version - 顯示該程式版本
Info
此用工具只在 Basetion 機器上面執行,建議可以開多個終端機,讓其中一個終端機停留在 Bastion 操作畫面,方便隨時停啟或是重置機器。

5.1.1 啟動虛擬機

5.1.1.1 啟動全部虛擬機器
  1. 透過工具開啟全部機器。
1
rht-vmctl start all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[student@basesion ~]$ rht-vmctl start all
 Id   Name          State
-----------------------------
 1    workstation   running
 2    servera       running
 3    serverb       running
 4    serverc       running

[INFO]: String All machines.. Please Wait.. 
[INFO]: Try to use Ping workstation, until  the machines is turned on 
[INFO]: After booting, please use ssh student@workstation to log in to the machine and start practicing LAB  
[INFO]: You can find out Example PlayBook on /home/student/example 
  1. 持續 ping 直到 workstation 機器開機。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[student@basesion ~]$ ping workstation
PING workstation.lab.example.com (172.25.250.9) 56(84) bytes of data.
From basesion.lab.example.com (172.25.250.1) icmp_seq=1 Destination Host Unreachable
From basesion.lab.example.com (172.25.250.1) icmp_seq=2 Destination Host Unreachable
From basesion.lab.example.com (172.25.250.1) icmp_seq=3 Destination Host Unreachable
From basesion.lab.example.com (172.25.250.1) icmp_seq=5 Destination Host Unreachable
From basesion.lab.example.com (172.25.250.1) icmp_seq=6 Destination Host Unreachable
64 bytes from workstation.lab.example.com (172.25.250.9): icmp_seq=7 ttl=64 time=2276 ms
64 bytes from workstation.lab.example.com (172.25.250.9): icmp_seq=8 ttl=64 time=1252 ms
...
  1. 登入 workstation 機器。
1
ssh student@workstation
  • 帳號: student
  • 密碼: student
Success
上述步驟如果都順利,表示環境已經正常啟用了。
5.1.1.2 啟動指定虛擬機器
  1. 透過工具開啟指定機器。
1
rht-vmctl start servera
  1. 持續 ping 直到 servera 機器開機。
1
2
3
4
5
6
[student@bastion ~]$ ping servera
PING servera.lab.example.com (172.25.250.10) 56(84) bytes of data.
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=5 ttl=64 time=0.765 ms
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=6 ttl=64 time=0.480 ms
64 bytes from servera.lab.example.com (172.25.250.10): icmp_seq=7 ttl=64 time=0.446 ms
...
  1. 登入 servera 機器。
1
ssh student@servera
  • 帳號: student
  • 密碼: student

5.1.2 查看虛擬機狀態

5.1.2.1 查看全部虛擬機器
  • 透過工具查看全部機器。
1
rht-vmctl status all
1
2
3
4
5
6
7
[student@basesion ~]$ rht-vmctl status all
 Id   Name          State
-----------------------------
 1    workstation   running
 2    servera       running
 3    serverb       running
 4    serverc       running

5.1.3 停止虛擬機

5.1.3.1 停止全部虛擬機器
  • 透過工具停止全部機器。
1
rht-vmctl poweroff all
1
2
3
4
5
6
[student@basesion ~]$ rht-vmctl poweroff all
[INFO]: Stoping workstation ... Please Wait 
[INFO]: Stoping servera ... Please Wait 
[INFO]: Stoping serverb ... Please Wait 
[INFO]: Stoping serverc ... Please Wait 
[INFO]: Please double check that all machines are stopped
Tip
rht-vmctl stop all , 可以強制關閉所有虛擬機器電源。
5.1.3.2 關閉指定虛擬機器
  • 透過工具關閉指定機器。
1
rht-vmctl poweroff servera
1
2
[student@basesion ~]$ rht-vmctl poweroff servera
[INFO]: Stoping servera ... Please Wait 
Tip
rht-vmctl stop servera , 可以強制關閉 servera 虛擬機器電源。

5.1.4 重置虛擬機

5.1.4.1 重置全部虛擬機器
  • 透過工具重置全部機器。
1
rht-vmctl reset all
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[student@basesion ~]$ rht-vmctl reset all
[INFO]: workstation Reset complete... 
[INFO]: workstation Rebooting... 
[INFO]: servera Reset complete... 
[INFO]: servera Rebooting... 
[INFO]: serverb Reset complete... 
[INFO]: serverb Rebooting... 
[INFO]: serverc Reset complete... 
[INFO]: serverc Rebooting... 
...
5.1.4.2 重置指定虛擬機器
  • 透過工具重置指定機器。
1
rht-vmctl reset servera
1
2
3
4
5
[student@basesion ~]$ rht-vmctl reset servera
[INFO]: servera Reset complete... 
[INFO]: servera Rebooting... 
[INFO]: servera String .. Please Wait.. 
[INFO]: Try to use Ping servera, until  the machines is turned on 
Tip
指令 rht-vmctl reset worker, 只會重置 servera-c 三台機器,使得 workstation 機器不會被重置。

5.1.5 顯示虛擬機 VNC 連線方式及訊息

  1. 需求 :

    • 使用 VNC Viewer Client 端軟體並安裝,載點請點我
  2. 透過工具顯示指定機器。

1
rht-vmctl display servera
1
2
[student@basesion ~]$ rht-vmctl display servera
[INFO]:  servera  of VNC connection address: 192.168.23.136:5902
  1. 開啟 VNC Viewer Client , 並工具提示的連線地址進行連接。
  • 輸入連線地址後即可操作機器。

    https://i.imgur.com/qxeFADE.png

  • 也可以透過 VNC 進行 reboot重新開機,並請查看開機進度或是至 GRUB 設定。

    https://i.imgur.com/dAuFLYW.png

    https://i.imgur.com/sxPNXbH.png

Info
執行 reboot 都可以保持 VNC 畫面連線,但是執行 poweroff 指令等同把虛擬機關機,VNC連線會自動中斷。
每一次連線的 Port 都是隨機的,不一定是上一次的 Port,使用前請先檢查。

5.1.6 建立代理,查看虛擬機網路服務

  • 囿於 4台虛擬機是透過 NAT 網路方式連線,本身宿主機的瀏覽器是無法直接訪問的,必須要透過建立代理方式。

  • 假設 Servera 啟動 httpd 服務在 80 port,且防火牆已經開放規則或是停用,如下圖。

    https://i.imgur.com/GADJCnG.png

  • 使用瀏覽器嘗試訪問 servera ip (172.25.250.10) ,是無法正常顯示。

    https://i.imgur.com/Zu9gpch.png

5.1.6.1 建立代理步驟:
  1. 選擇任意可以支援 ssh 工具 ( 以GitBash為例 )建立 ssh 動態傳輸隧道。

    1
    
    ssh -vND 127.0.0.1:9453 root@<Your Bastion IP> 
    

    https://i.imgur.com/zAAGYLP.png

    • 密碼 : redhat
Warning
此 SSH 步驟登入後,如要繼續使用網路代理請不要中斷該連線,會中止傳輸隧道。
  1. 選擇任意瀏覽器配置 Proxy ( 以 Firefox 為例 ),並保存使生效。

    https://i.imgur.com/aQP1fzK.png

  2. 重新嘗試訪問 servera ip (172.25.250.10),即可順利顯示。

    https://i.imgur.com/OQXO00c.png

Tip
建議使用 Firefox 為瀏覽工具,設定方式相對容易。

5.1.7 手動新增靜態路由

如果想除了瀏覽器之外也能直接存取虛擬機器,可以透過此方式,直接將手動新增路由表。

此操作需要宿主機器的 Root/Administrator 權限並會修改靜態路由表,請自行判斷並斟酌使用。

  1. 在宿主機器內新增 172.25.250.0/24 網路路由,並將其流量導入虛擬機器內。

EX. Windows CMD 為例

1
route add 172.25.250.0/24 MASK 255.255.255.0  <Your Bastion IP>
  1. 至 Bastion 機器內清除 iptable 禁止轉發至其它網路規則。
1
2
iptables -D LIBVIRT_FWO 2
iptables -D LIBVIRT_FWI 2
Tip
預設規則為 2,執行前使用 iptables -nL --line-numbers 指令確保 ID 為 2。
  1. 上述步驟完成,可以直接在宿主機器瀏覽器或是任意設備存取 172.28.250.0/24 網段資源。

5.2 登入 4 台練習虛擬機

  1. 登入 bastion 主控機後,並完成其內部虛擬機開機,即可使用 ssh 登入。

    1. 一般使用者

      • 帳號: student
      • 密碼: student
    2. 管理者

      • 帳號: root
      • 密碼: redhat
Tip
workstation、servera、serverb、serverc 都可以任選登入。
練習 Ansible 請使用 workstaion機器,已經配置指定使用者免密碼認證機制。
  1. 如要重置該虛擬機,需至 bastion 主控機執行 rht-vmctl reset 指令。
Tip
指令 rht-vmctl reset worker, 只會重置 servera-c 三台機器,使得 workstation 機器不會被重置。

  • Ansible 練習環境已經打造好了,透過 workstation 當作控制端,即可測試 Ansible 功能 :

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    
    [student@workstation example]$ ansible-playbook playbook.yaml 
    
    PLAY [Example] ********************************************************************************************************************************************
    
    TASK [Print Hello Ansible] ********************************************************************************************************************************
    ok: [servera.lab.example.com] => {
        "msg": "Hello Ansible!"
    }
    ok: [serverb.lab.example.com] => {
        "msg": "Hello Ansible!"
    }
    ok: [serverc.lab.example.com] => {
        "msg": "Hello Ansible!"
    }
    ...
    
Note
Ansible 測試目錄在 workstation /home/student/example 底下。

6. 使用練習環境小技巧

如果因練習不小心誤刪重要檔案,或是機器當機無法啟動的話,直接執行 rht-vmctl reset all ,重置所有機器或是指定單台機器,可以快速恢復初始的練習環境喔。

Danger

Bastion 那一台虛擬機請勿隨意更改配置,此機器無法透過指令還原,可能會導致整個環境不可用!!

如果不幸發生 Bastion 無法正常啟用,請在 VMware / VirtuallBox 將機器刪除,重新再將原始機器匯入。


7. 小結

透過 Bastion 機器的 rht-vmctl 腳本能有效控制 KVM 虛擬機器。透過此 Lab 環境可以很快速達成多台機器練習,也不用擔心練習操作誤刪檔案或是操作不當導致機器失效,並且能在每一次 Lab 實驗還原最初的機器狀態,避免影響下一次實驗操作。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!