Basic Linux Network Virtualization Thai (ไทย)
Tags: workshop, network, virtualization, thai
Published: 2020-02-28 08:07:54

![alt text][itkst_logo]
[itkst_logo]: https://github.com/xlinkersoul/ITKST-Ubuntu1804_NetworkVirt/raw/master/ITKST_Logo.png "ITKST Logo"
## ITKST Thai Basic Linux Network Virtualization Workshop-I

#####  ยินดีต้อนรับสู่บทความ ITKST ( IT & Taoism Knowledge Sharing Thailand )
{% youtube Oe45_ZJpFtg %}
สวัสดีท่านผู้อ่านทุกท่านครับ วันนี้เราจะมาพูดกันถึงเรื่องพื้นฐานของการทำ Linux Basic Network Virtualization ซึ่งถือเป็นพื้นฐานความรู้ของทุกคนที่ทำงานเกี่ยวกับ System Engineer จำเป็นต้องรู้ ไม่ว่าจะเป็นเทคโนโลยี Docker, K8S, OpenStack เรื่องนี้ถือเป็นองค์ความรู้พื้นฐานที่จะทำให้เพื่อนๆนำไปต่อยอดใช้ในสายงานของตัวเองได้อย่างคล่องแคล่วและเพื่อไม่ให้เป็นการเสียเวลา เรามาเริ่มไปพร้อมๆกันเลยครับ

#### ในโลกแห่งความเป็นจริง (ยุคเก่าที่โลกยังไม่มีเทคโนโลยี Virtualization)
![alt text](https://github.com/xlinkersoul/ITKST-Ubuntu1804_NetworkVirt/raw/master/Lab_01-Basic_2_Computer_Connection/Lab_01-01_OldWay.png "OldWay")

ในสมัยก่อนหากเพื่อนๆต้องการจะเชื่อมต่อคอมพิวเตอร์ทั้ง 2 เครื่องเข้าหากัน ก็สามารถทำได้ง่ายๆเพียงแค่เพื่อนๆนำสาย Lan ไปจิ้มจากเครื่องที่ 1 ไปยังเครื่องที่ 2 ก็เป็นอันสร็จเรียบร้อย

เชื่อไหมครับว่าคอมพิวเตอร์ในปัจจุบันนั้นมีประสิทธิภาพสูงกว่าคอมพิวเตอร์ในยุคเก่าๆมากมายหลายเท่า จะดีกว่าไหมครับ หากเพื่อนๆสามารถนำเจ้าคอมพิวเตอร์ยุคเก่าๆหลายๆเครื่อง เอายัดรวมเข้าไปอยู่ในคอมพิวเตอร์สมัยใหม่เพียงแค่เครื่องเดียว

เรามาลองทำกันดีกว่า

#### ในโลกจำลองที่ทุกคนสามารถยัดคอมพิวเตอร์เก่าๆ เข้าไปในคอมพิวเตอร์เครื่องใหม่เพียงเครื่องเดียวได้
![alt text](https://github.com/xlinkersoul/ITKST-Ubuntu1804_NetworkVirt/raw/master/Lab_01-Basic_2_Computer_Connection/Lab_01-03_NewVsOld.png "NewWay")
ซึ่งบทความนี้จะเน้นการสร้างระบบ Network ขึ้นมาในโลกจำลองบนระบบ Linux Ubuntu 18.04 โดยการที่เพื่อนๆจะสร้าง Network จำลองขึ้นมาได้นั้น, เพื่อนๆสามารถจะทำได้โดยการสร้าง Network Namespace ขึ้นมา, ซึ่งในตัวอย่างด้านล่างนั้นจะใช้คำว่า Zone ในการตั้งชื่อ Network NameSpace

ก่อนที่เพื่อนๆทุกคนจะสามารถทำ Workshop ตามตัวอย่างด้านล่างได้นั้น
เพื่อนๆจำเป็นจะต้องมีระบบปฏิบัติการ Ubuntu 18.04 ก่อน
ซึ่งผมจะใช้โปรแกรม Oracle Virtual Box จำลอง Ubuntu 18.04 มาใช้งานบน Windows เพื่อนๆสามารถ Download ได้จาก Link ด้านล่าง
1. Ubuntu 18.04 [https://ubuntu.com/download/desktop](https://ubuntu.com/download/desktop)
2. Oracle Virtual Box [https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
3. ติดตั้ง Ubuntu ให้เรียบร้อย (กด Next รัวๆ)

#### Workshop I เราจะสร้าง Network จำลองขึ้นมาด้วย Network Namespace, โดยเราจะสร้าง Network Namespace จำนวน 2 Namespace ได้แก่ Zone1 และ Zone2
![alt text](https://github.com/xlinkersoul/ITKST-Ubuntu1804_NetworkVirt/raw/master/Lab_01-Basic_2_Computer_Connection/Lab_01-02_NewWay.png "NewWay")
![alt text](https://github.com/xlinkersoul/ITKST-Ubuntu1804_NetworkVirt/raw/master/Lab_01-Basic_2_Computer_Connection/Lab_01-04_veth_pair.png "vethpair")
Virtual Port Pair หรือ vethpair คือการจำลอง Port Network จำนวน 2 Port ที่มีสายเชื่อมต่อกันอยู่ดังรูป ซึ่งใช้สำหรับเชื่อมต่อ Network Namespace เข้าหากัน

#### Workshop I - สร้าง Network Namespace จำนวน 2 Zone แล้วให้เชื่อมต่อกันด้วย Port จำลองหรือ veth แล้วหลังจากนั้นให้ทดสอบการเชื่อมต่อด้วยคำสั่ง ping
*จุดประสงค์ของการทำ Workshop I เพื่อ*
1. สร้าง Network Namespace ขึ้นมาจำนวน 2 Zone
2. สร้าง Virtual Port Pair ขึ้นมา 1 คู่ ( 1 คู่จะเท่ากับ 2 Port ที่เชื่อมต่อกัน)
3. ย้าย veth ไปอยู่คนละ Network NameSpace กัน
4. ตั้งค่า IP Address ให้กับ veth0 และ veth1
5. ใช้คำสั่ง ping เพื่อทดสอบการเชื่อมต่อหากันระหว่าง Namespace ว่าสำเร็จหรือไม่

```bash
#### ดู username และให้ sudo จำ password ไว้
sudo id

#### ตามรูปเราจะต้องสร้าง Network Name Space ขึ้นมา 2 Zone (zone1 & zone2)
sudo ip netns add zone1
sudo ip netns add zone2
sudo ip netns

#### สร้าง Virtual Port Pair ขึ้นมา 1 คู่ (veth0 & veth1)
sudo ip link add type veth
sudo ip addr show

#### ผูก Port veth0 เข้ากับ Network Namespace ที่ชื่อ zone1
sudo ip link set dev veth0 netns zone1
sudo ip netns exec zone1 ip addr show

#### ผูก Port veth1 เข้ากับ Network Namespace ที่ชื่อ zone2
sudo ip link set dev veth1 netns zone2
sudo ip netns exec zone2 ip addr show

#### ตั้งค่า ip address ของ veth0 = 192.168.16.1
sudo ip netns exec zone1 ip addr add 192.168.16.1/24 dev veth0
sudo ip netns exec zone1 ip link set dev veth0 up
sudo ip netns exec zone1 ip addr show

#### ตั้งค่า ip address ของ veth1 = 192.168.16.2
sudo ip netns exec zone2 ip addr add 192.168.16.2/24 dev veth1
sudo ip netns exec zone2 ip link set dev veth1 up
sudo ip netns exec zone2 ip addr show

#### ทดสอบ ping จาก zone1 ไปหา address 192.168.16.2 ใน zone2 
sudo ip netns exec zone1 ping -c 2 192.168.16.2

#### ทดสอบ ping จาก zone2 ไปหา address 192.168.16.1 ใน zone1 
sudo ip netns exec zone2 ping -c 2 192.168.16.1
```
##### ITKST เป็นบทความที่จะเพิ่มความรู้ทางด้าน IT ให้กับคุณเยอะด้วยเนื้อหา อัดแน่นด้วยคุณภาพ แต่ใช้เวลาหยิบมือเดียว ITKST สังคมเพื่อการแบ่งปัน จากคนไทยเพื่อคนไทย