Tạo máy ảo netkit trên linux kernel

Chắc hẳn những ai đọc bài viết này của tôi cũng đã dùng qua Packet tracer hoặc GNS3. Hôm nay tôi xin giới thiệu đến các bạn một công cụ khác đó là Netkit.

Mục đích của bài viết sẽ là giới thiệu cho các bạn bộ công cụ này, và thông qua một bài lab MPLS VPN sẽ hướng dẫn cho các bạn một phần nào đó cách thực hiện một bài Lab về mạng bằng Netkit.

1. Giới thệu bộ công cụ Netkit

1.1. Khái niệm

  • Netkit là một bộ công cụ cho phép giả lập và vận hành thử nghiệm hệ thống mạng với chi phí thấp. Nó cho phép tạo ra các thiết bị mạng ảo như Router, Switch, PC,… dễ dàng kết nối với nhhau chỉ trên một host.
  • Chức năng giống GNS3, Packet Tracer,…

1.2. Đặc điểm

  • Dựa trên nhân Linux
  • Cần xây dựng một mô hình mạng cụ thể từ trước để thuận tiện cho việc đấu nối các thiết bị
  • Mỗi bài lab nằm trong một thư mục, các file cấu hình, các thiết bị đều nằm trong đó
  • Mọi công việc chuyển mạch, định tuyến đều thực hiện trên Linux

1.3. Các thành phần

  • Một file lab.conf mô tả mô hình mạng
  • Một thư mục chứa các file của mỗi thiết bị giả lập
  • Các file .startup và .shutdown mô tả hành động được thực hiện bởi các máy ảo khi chúng được khởi động hoặc tắt
  • Một file lab.dep mô tả sự phụ thuộc quan hệ khi khởi động của các thiết bị ảo (có thể có hoặc không)
  • Một thành phần không bắt buộc nữa của netkit đó là thư mục _test chứa đoạn mã để kiểm tra bài lab có thực hiện đúng hay không.

1.4. Cài đặt

Để thành công tuyệt đối các bạn copy từng lệnh và dán vào terminal nhé!

1. Mở terminal

Ctrl Shift T

2. Tải các gói cần thiết (copy từng lệnh và dán vào terminal)

Lưu ý: Những file này (có tất cả 3 file) sẽ được lưu ở thư mục download

wget http://wiki.netkit.org/download/netkit/netkit-2.8.tar.bz2

wget http://wiki.netkit.org/download/netkit-filesystem/netkit-filesystem-i386-F5.2.tar.bz2

wget http://wiki.netkit.org/download/netkit-kernel/netkit-kernel-i386-K2.8.tar.bz2

3. Tạo một thư mục mới tên netkit và di chuyển vào thư mục đó

mkdir netkit

Di chuyển vào thư mục netkit

cd netkit

4. Copy hoặc di chuyển 3 gói cài đặt đã tải về ở bước 2 vào thư mục netkit vừa tạo ở bước 3

Các bạn có thể copy qua giao diện GUI hoặc dùng lệnh cp

5. Cài đặt các gói

Nếu Ubuntu của bạn cài có nhân là 64-bit thì bắt buộc phải cài các thành phần này nhé. Đặc biệt là gói libc6-i386

sudo apt-get update
sudo apt-get install ia32-libs
sudo apt-get install libc6-i386

Do có lệnh sudo nên các bạn phải gõ mật khẩu cho chính xác nhé!

Nếu bạn gặp lỗi khi cài đặt gói ia32-libs thì sử dụng lệnh sau để cài các gói thay thế:

apt-get install -y lib32z1 lib32ncurses5 lib32bz2-1.0

Xả nén các gói tin cài đặt. Lưu ý bạn phải chuyển đến thư mục netkit đã tạo ban đầu để xả nén nhé!

tar -xjSf netkit-2.8.tar.bz2
tar -xjSf netkit-filesystem-i386-F5.2.tar.bz2
tar -xjSf netkit-kernel-i386-K2.8.tar.bz2

6. Sửa file .bashrc và thêm vào các dòng sau:

Chạy từng lệnh sau trong của sổ terminal

export NETKIT_HOME=/home/khoahnd1996/netkit/netkit
export MANPATH=:$NETKIT_HOME/man
export PATH=$NETKIT_HOME/bin:$PATH

Trong đó

khoahnd1996 là tên người dùng của máy bạn khi cài Ubuntu

7. Sửa file .bashrc và thêm vào các dòng sau:

Để tìm và mở file .bashrc các bạn đọc bài này.

export NETKIT_HOME=/home/khoahnd1996/netkit/netkit
export MANPATH=:$NETKIT_HOME/man
export PATH=$NETKIT_HOME/bin:$PATH

Trong đó

khoahnd1996 là tên người dùng của máy bạn khi cài Ubuntu

8. Kiểm tra Netkit đã cài đặt thành công hay chưa

cd $NETKIT_HOME

./check_configuration.sh

Hoặc Test netkit băng cách sau, chạy lệnh phía dưới nếu ra 1 màn hình đen và có dấu nhắc gõ lệnh là thành công.

vstart pc1

Nếu kết quả như hình sau là OK

Tạo máy ảo netkit trên linux kernel

Cài netkit thành công

9. Để có thể chạy được netkit, khi mở terminal lên các bạn gõ lệnh sau

cd $NETKIT_HOME

Trong phần tiếp theo mình sẽ trình bày về một bài lab sử dụng netkit

2. Bài lab MPLS VPN với netkit

2.1.Mô hình triển khai

Trong demo này tôi xây dựng hai VPN có địa chỉ giống nhau

  • VPN 1 (VPN màu xanh dương) nối hai mạng 192.168.10.0/24 và 192.168.30.0/24 thông qua tuyến đường là các router A1 – E2 – E3 – E1 – A3
  • VPN 2 (VPN màu xanh lá) nối hai mạng 192.168.10.0/24 và 192.168.30.0/24 thông qua tuyến đường tuyến đường A2 – E4 – E3 – E1 – A4
  • Các router có nhiệm vụ định tuyến cho gói tin trong cùng VPN đến đúng địa chỉ mặc dù các mạng có địa chỉ giống nhau.

2.2. Một số khái niệm liên quan

  • CE Router (Customer Edge Router): Router của khách hàng có nhiệm vụ định tuyến trong nội bộ doanh nghiệp và định tuyến ra mạng của ISP.
  • PE Router (Provider Edge Router): Router biên của nhà cung cấp, kết nối trực tiếp với khách hàng, có nhiệm vụ gắn nhãn và bóc nhãn cho các kết nối VPN của khách hàng, định tuyến tới các Router khác trong mạng ISP
  • Provider Router: Các Router của ISP có nhiệm vụ chuyển mạch nhãn.
  • NHLFE (Next Hop Label Forwarding Entry): chứa thông tin làm cách nào để chuyển gói tin trong MPLS, bao gồm IP next hop và cách xử lý các nhãn (push, pop) trong stack.
  • ILM (Incoming Label Map): nối nhãn từ gói tin chuyển đến với một NHLFE, có thể hiểu là cách xử lý một gói tin được chuyển tới.
  • XC (Cross Connect): nối mỗi ILM với một NHLFE, có thể hiểu rằng nó nói cho router biết cách đổi nhãn như thế nào.

2.3. Phân tích quá trình kết nối trao đổi thông tin

Kết nối từ Router A1 đến Router A3 (VPN 1)

  • A1 gửi một gói tin ICMP Echo Request tới địa chỉ A3
  • Gói tin đi tới E2. E2 kiểm tra bảng định tuyến của nó và biết rằng gói tin này thuộc VPN 1 sau đó nó sẽ gán hai nhãn: một “inner label” 100 để xác định là VPN 1 và một “outer label” 1000 để định tuyến trong mạng MPLS
  • E3 chuyển “outer label” thành 3000 và chuyển gói tin đến E1, “inner label” vẫn giữ nguyên.
  • E1 sẽ có hai bảng định tuyến. Bảng 1 sẽ dùng để lưu thông tin về các tuyến đường đến các địa chỉ của VPN 1, bảng 2 là của VPN 2. Khi E1 nhận được gói tin từ E3 gửi đến, nó bóc nhãn đầu tiên (3000) và biết rằng nhãn thứ 2 (100) là của VPN 1, nó sẽ bỏ luôn nhãn này đi và tìm kiếm trong bảng 1 để chuyển gói tin đến A3. Gói tin lúc này là chính gói tin ban đầu mà A1 gửi đi.

  • Gói ICMP Reply được gửi từ A3 đến A1.
  • E1 nhận được gói tin từ A1 gửi đến, nó căn cứ vào địa chỉ đích của gói tin và interface nhận gói tin (eth2) biết rằng đây là gói tin thuộc VPN 1, nó tìm trong bảng 1 để biết cách xử lý gói tin này. Sau đó E1 sẽ gán hai nhãn 100 và 4000 cho gói tin đó và chuyển đến E3 qua interface eth3.
  • Tại E3 nhãn 4000 được thay bằng nhãn 4001 và chuyển tiếp tới E2.
  • Tại E2 hai nhãn 4001 và 100 được bóc ra và gói tin ban đầu được chuyển đến A1.

Kết nối từ A2 đến A4 (VPN 2) cũng tương tự như kết nối của VPN1. Do tại mỗi Router căn cứ vào interface nhận gói tin và địa chỉ đích rồi sau đó mỗi gói mới được gắn nhãn cho đúng với MPLS VPN nên việc trùng lặp IP của hai VPN không thành vấn đề. Việc kết nối vẫn diễn ra bình thường mặc cho địa chỉ là như thế nào.

2.4. Thực hiện bài lab

Mô hình kết nối và địa chỉ của các Router

Mô hình này được ánh xạ vào file cấu hình lab.conf trong github

Mỗi Router sẽ có một file .startup tương ứng chứa những command dùng để cấu hình. Các bạn cần đọc các file này thật kỹ.

Mở Xming và ssh vào máy ảo Ubuntu.

Thực hiện các lệnh sau:

apt-get install git -y
git clone https://github.com/ducnc/Netkit-MPLS-VPN.git
cd Netkit-MPLS-VPN/
mkdir A1 A2 A3 A4 E1 E2 E3 E4
lstart

Lúc này Xming sẽ bật lên các cửa sổ tương ứng với mỗi router như hình sau:

Kiểm tra sự hoạt động của VPN1.

Từ A1 ta ping đến địa chỉ 192.168.30.30 (A3)

Trên A3 và A4 ta sử dụng lệnh tcpdump để theo dõi

Ta thấy trên A1 ping đến địa chỉ 192.168.30.30 thành công và trên A3 bắt được những gói ICMP này, A4 thì không bắt được gì cả. Chứng tỏ VPN đã thực hiện đúng mặc dù bị trùng địa chỉ IP.

Nếu ta trên A2 ping 192.168.30.30 thì trên A4 cũng sẽ bắt được những gói tin này, còn A3 thì không. Chứng tỏ hai VPN đều thực hiện đúng.

Lưu ý:

Để có thể quan sát dễ dàng hơn các gói tin được truyền qua các card mạng trên mỗi router ta thực hiện lệnh sau (ví dụ ở đây là router E1 card eth2)

tcpdump -i eth2 -w /hosthome/E1-eth2.pcap

Lúc này tại thư mục /root/ của máy ảo Ubuntu sẽ có một file E1-eth2.pcap. Ta có thể copy file này ra máy thật và sử dụng wireshark để quan sát các gói tin.

Rate this: