Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 24

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

-----□□&□□-----

BÁO CÁO

MẠNG THÔNG TIN

Đề tài: Mạng định nghĩa bằng phần mềm - SDN

Giảng viên hướng dẫn: Thầy Nguyễn Tiến Dũng

Nhóm sinh viên thực hiện: Nhóm 7

Nguyễn Trung Kiệm 20182613

Phạm Duy Khoa 20172631

Ngô Tiến Dũng 20172499


Nguyễn Tuấn Thành 20172825

Hà Nội, 12-2021
LỜI NÓI ĐẦU

Mạng Internet ra đời đã tạo nên một cuộc cách mạng trong công nghệ thông
tin. Nó giúp mọi sự giao tiếp và trao đổi kiến thức, thông tin của con người trở nên dễ
dàng hơn tạo nền tảng cho nền kinh tế tri thức hiện nay. Tuy nhiên, kiến trúc mạng
truyền thống đang ngày càng trở nên không phù hợp với nhu cầu kinh doanh của các
doanh nghiệp cũng như người dùng cuối. Hiện nay nhu cầu về nghiệp vụ ngày càng
phức tạp của các doanh nghiệp và mức độ đa dạng về ứng dụng của các end-user đang
ngày càng gia tăng, kéo theo đó là nhu cầu khác nhau của người dùng về mạng kết
nối. Mạng cần phải đáp ứng việc thay đổi nhanh chóng các thông số về độ trễ, băng
thông, định tuyến, bảo mật, … theo các yêu cầu của các ứng dụng.

Thêm vào đó sự phát triển của các công nghệ ảo hóa cũng làm cho các công
nghệ mạng truyền thống trở lên lỗi thời. Trong hệ thống các thiết bị mạng truyền
thống, phần mềm điều khiển và cấu hình được gắn liền với phần cứng và mỗi hãng
sản xuất lại cung cấp một giao diện kết nối riêng làm cho độ phức tạp của mạng và
khả năng tích hợp ngày càng trở lên khó kiểm soát. Việc ảo hóa do đó phụ thuộc vào
công nghệ và làm cho kết cấu hệ thống mạng càng trở lên phức tạp, thiếu đồng bộ.
Điều đó dẫn đến nhu cầu có một sự thay đổi cách mạng trong công nghệ mạng thông
qua tập trung hóa việc quản trị : Tách biệt phần điều khiển và phần xử lý dữ liệu,
khiến phần điều khiển trở nên mềm dẻo và cho phép lập trình được để tự động hóa và
đơn giản hóa việc quản trị. Từ đó cho ra đời khái niệm mạng định nghĩa được bằng
phần mềm (Software-defined network) hay SDN.

Trong đề tài lần này, nhóm chúng em sẽ mô phỏng cài đặt và cấu hình một
mạng SDN đơn giản gồm 1 bộ điều khiển, 3 switch và 2 host. Báo cáo gồm có 3 phần
chính:

- Chương 1: Tổng quan về mạng SDN, OpenvSwitch và mạng mininet.


- Chương 2: Tạo mô hình mạng SDN thử nghiệm.
- Chương 3: Xây dựng tường lửa.
MỤC LỤC

DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT........................................................................i

DANH MỤC HÌNH VẼ............................................................................................................ii

CHƯƠNG 1. TỔNG QUAN VỀ SDN, OPENVSWITCH VÀ MẠNG MININET.............1

1.1 Tìm hiểu về SDN............................................................................................................1

1.2 Giới thiệu về OpenvSwitch...........................................................................................2

1.3 Khái quát về Mininet....................................................................................................3

CHƯƠNG 2. TẠO MÔ HÌNH MẠNG SDN THỬ NGHIỆM..............................................4

2.1 Đặt vấn đề.......................................................................................................................4

2.2 Thiết lập cấu trúc mạng SDN.......................................................................................4


2.2.1 Tạo topology network..............................................................................................5

2.3 Cấu hình cấu trúc mạng SDN......................................................................................7

CHƯƠNG 3. TƯỜNG LỬA...................................................................................................11

3.1 Xây dựng Topology mạng...........................................................................................11

3.2 Chặn toàn bộ traffic từ host 1 đến host 3..................................................................11

3.3 Chỉ chặn truy cập TCP đến cổng 80 trên host 1.......................................................13

TÀI LIỆU THAM KHẢO......................................................................................................15

PHỤ LỤC.................................................................................................................................16
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT

SDN Software Defined Networking

API Application Programming Interface

OVS OpenvSwitch

STP Spanning Tree Protocol

TCP Transmission Control Protocol

i
DANH MỤC HÌNH VẼ

Hình 1-1 Mô hình kiến trúc mạng SDN.........................................................................1


Hình 1-2 Open vSwitch..................................................................................................2

Hình 2-1 Sơ đồ mô hình mạng SDN thử nghiệm...........................................................4


Hình 2-2 Sơ đồ mạng và các cổng kết nối của mạng SDN............................................5
Hình 2-3 Thực thi lệnh tạo topo.....................................................................................6
Hình 2-4 Thông tin thành phần topo...............................................................................6
Hình 2-5 Tiến hành ping trong mạng..............................................................................7
Hình 2-6 Sử dụng Ryu Controller để thêm Flow cho các Switch..................................7
Hình 2-7 Khối code khởi tạo switch, truyền vào tham số cho mạng..............................7
Hình 2-8 Hàm add_flow để thêm flow vào FlowTable..................................................8
Hình 2-9 Hàm packet_in_hander để xử lí gói tin đến....................................................8
Hình 2-10 Sử dụng Ryu Controller để cấu hình cho mạng............................................8
Hình 2-11 Thông tin luồng của các switch trong mạng sau khi được thêm Flow..........8
Hình 2-12 Thông tin về mạng và các cổng kết nối sau khi được cấu hình.....................9
Hình 2-13 Sơ đồ mạng và các cổng kết nối SDN sau khi được cấu hình.......................9
Hình 2-14 Kết quả thực thi các kết nối sau khi cấu hình..............................................10

Hình 3- 1 Mô hình mạng..............................................................................................11


Hình 3- 2 Thực thi lệnh block h1 tới h3.......................................................................12
Hình 3- 3 Thực thi lệnh pingall....................................................................................12
Hình 3- 4 Flow Table trong Switch s1..........................................................................13
Hình 3- 5 Kiểm tra kết nối các host thông qua mininet................................................13
Hình 3- 6 Kiểm tra traffic trên port 80.........................................................................14
Hình 3- 7 Kiểm tra traffic trên port 75.........................................................................14

ii
Hình 3- 8 Flow Table của switch s1.............................................................................14

CHƯƠNG 1. TỔNG QUAN VỀ SDN, OPENVSWITCH VÀ

MẠNG MININET

1.1 Tìm hiểu về SDN


SDN hay mạng điều khiển bằng phần mềm (Software Defined Networking) được
dựa trên cơ chế tách riêng việc kiểm soát một luồng mạng với luồng dữ liệu (control
plane và data plane). SDN dựa trên giao thức luồng mở (Open Flow).

SDN tách định tuyến và chuyển các luồng dữ liệu riêng rẽ và chuyển kiểm soát
luồng sang thành phần mạng riêng có tên gọi là thiết bị kiểm soát luồng (Flow
Controller). Điều này cho phép luồng các gói dữ liệu đi qua mạng được kiểm soát theo
lập trình. Trong SDN, control plane được tách ra từ các thiết bị vật lý và chuyển đến
các bộ điều khiển. Bộ điều khiển này có thể nhìn thấy toàn bộ mạng lưới, và do đó cho
phép các kỹ sư mạng làm cho chính sách chuyển tiếp tối ưu dựa trên toàn bộ mạng.
Các bộ điều khiển tương tác với các thiết bị mạng vật lý thông qua một giao thức
chuẩn OpenFlow.

Kiến trúc của SDN gồm 3 lớp riêng biệt: lớp ứng dụng, lớp điều khiển, và lớp cơ
sở hạ tầng (lớp chuyển tiếp). Mô tả kiến trúc dưới hình sau:

Hình 1-1 Mô hình kiến trúc mạng SDN

1
 Lớp ứng dụng: Là các ứng dụng kinh doanh được triển khai trên mạng, được
kết nối tới lớp điều khiển thông qua các API, cung cấp khả năng cho phép lớp
ứng dụng lập trình lại (cấu hình lại) mạng (điều chỉnh các tham số trễ, băng
thông, định tuyến, …) thông qua lớp điều khiển.

 Lớp điều khiển: Là nơi tập trung các bộ điều khiển thực hiện việc điều khiển
cấu hình mạng theo các yêu cầu từ lớp ứng dụng và khả năng của mạng. Các bộ
điều khiển này có thể là các phần mềm được lập trình.

 Lớp cơ sở hạ tầng: Là các thiết bị mạng thực tế (vật lý hay ảo hóa) thực hiện
việc chuyển tiếp gói tin theo sự điều khiển của lớp điểu khiển. Một thiết bị
mạng có thể hoạt động theo sự điều khiển của nhiều bộ điều khiển khác nhau,
điều này giúp tăng cường khả năng ảo hóa của mạng.

1.2 Giới thiệu về OpenvSwitch


OpenvSwitch (OVS) là một dự án về chuyển mạch ảo đa lớp (multilayer). Mục
đích chính của OpenvSwitch là cung cấp lớp chuyển mạch cho môi trường ảo hóa
phần cứng, trong khi hỗ trợ nhiều giao thức và tiêu chuẩn được sử dụng trong hệ
thống chuyển mạch thông thường. OpenvSwitch hỗ trợ nhiều công nghệ ảo hóa dựa
trên nền tảng Linux như Xen/XenServer,KVM, và VirtualBox.

Hình 1-2 Open vSwitch

2
OpenvSwitch hỗ trợ các tính năng sau: - VLAN tagging & 802.1q trunking -
Standard Spanning Tree Protocol (802.1D) - LACP - Port Mirroring (SPAN/RSPAN) -
Tunneling Protocols – QoS

Các thành phần chính của OpenvSwitch:

 ovs-vswitchd: thực hiện chuyển đổi các luồng chuyển mạch

 ovsdb-server: là một lightweight database server, cho phép ovs-vswitchd thực


hiện các truy vấn đến cấu hình

 ovs-dpctl: công cụ để cấu hình các switch kernel module

 ovs-vsctl: tiện ích để truy vấn và cập nhật cấu hình ovs-vswitchd

 ovs-appctl: tiện ích gửi command để chạy OpenvSwitch

1.3 Khái quát về Mininet


Mininet là một hệ thống dùng tạo nguyên mẫu cho các mạng lớn trong điều kiện
tài nguyên trên một laptop. Mininet sử dụng những đặc tính ảo hóa cấp hệ điều hành,
gồm các tiến trình và không gian tên mạng, cho phép nó giả lập lên đến hàng trăm
node. Mininet gồm các thành phần sau:

 Links: Một cặp Ethernet ảo (veth pair) hoạt động giống như một kết nối dây
giữa 2 giao tiếp ảo; các gói gửi qua một giao tiếp được đưa đến một giao tiếp
khác, và phẩn mềm ứng dụng và hệ thống nhìn thấy mỗi giao tiếp như là một
cổng Ethernet với đầy đủ chức năng. Các cặp veth có thể được gắn vào các
chuyển mạch ảo như là Linux bridge hoặc một chuyển mạch OpenFlow.
 Hosts: Các namespace mạng là những container trạng thái mạng (phương pháp
ảo hóa cấp hệ điều hành linux). Chúng cung cấp cho các tiến trình (và nhóm
các tiến trình) quyền sở hữu riêng biệt các giao tiếp, các cổng và các bảng định
tuyến (như ARP và IP). Một host trong Mininet đơn giản là một tiến trình shell
(ví dụ bash) được đưa vào namespace mạng riêng của nó với yêu cầu hệ thống
riêng biệt.
 Switches: Các chuyển mạch OpenFow bằng phần mểm cung cấp cơ chế phân
phối gói vể ý nghĩa giống như những chuyển mạch phần cứng.

3
 Controller: Các bộ điều khiển có thể đặt ở bất cứ nơi đâu trên mạng thực hoặc
trên mạng mô phỏng, miễn sao thiết bị chạy các chuyển mạch có kết nối mức
IP với bộ điều khiển. Đối với Mininet chạy trong một máy ảo, bộ điều khiển có
thể chạy bên trong máy ảo này, chạy trên máy host, hoặc trong một đám mây.

CHƯƠNG 2. TẠO MÔ HÌNH MẠNG SDN THỬ NGHIỆM

2.1 Đặt vấn đề


Trong phần này, chúng ta sẽ thực hiện cấu hình thử nghiệm một cấu trúc mạng
SDN bao gồm 1 bộ điều khiển ,3 switch và 2 host.

Cụ thể như sau:

Hình 2-3 Sơ đồ mô hình mạng SDN thử nghiệm

Trong cấu trúc mạng này, để các Host có thể kết nối được với nhau chúng ta cần
AddFlow vào các Flow Table. Khi đó giao thức OpenFlow sẽ cho phép truy cập trực
tiếp và điều khiển các thiết bị mạng trong hệ thống, các quyết định về các luồng traffic
sẽ được quyết định tập trung tại OpenFlow Controller giúp đơn giản quản trị cấu hình
trong toàn hệ thống. Ở cấu trúc mạng được đề xuất trong phần này, ta sử dụng Ryu
Controller để cấu hình cho hệ thống.

Ngoài ra, chúng ta có thể thấy trong mô hình các switch được liên kết với nhau
dẫn đến mạng có cấu trúc vòng lặp. Để tránh sự xuất hiện của vòng lặp xảy ra trong

4
cấu trúc này, ta sử dụng thuật toán Spanning Tree (STP) để các luồng traffic sẽ được
đi đến nơi mong muốn như đã được cấu hình từ trước.

2.2 Thiết lập cấu trúc mạng SDN


Trong báo cáo này, sử dụng môi trường VM Virtual Box để làm máy ảo chạy nền
tảng Hệ điều hành Ubuntu. Ta tiến hành cài đặt các môi trường trên Ubuntu:

- Cài đặt python 3.7:


$ sudo apt-get install python3.7
- Cài đặt OpenvSwitch:
$ sudo apt install openvswitch-switch
- Cài đặt mininet:
$ sudo apt install mininet
- Cài đặt Ryu Controller:
$ pip3 install ryu

2.2.1 Tạo topology network

- Cấu trúc mạng đã được tạo ra bao gồm 3 switch (S1,S2,S3) và 2 host(h1,h2).
Trong đó các switch S1,S2,S3 được liên kết với nhau tạo thành vòng lặp. Các
host h1 liên kết với với S1; h2 liên kết với S2. Cụ thể như sau:

Hình 2-4 Sơ đồ mạng và các cổng kết nối của mạng SDN

- Tên source file: topo-3s-2h.py

5
- Ta sử dụng lệnh $ sudo mn --custom topo-3s-2h.py --topo mytopo --
controller remote để chạy file topo-3s-2h.py để tạo mạng SDN. Sau khi chạy
thành công sẽ xuất ra màn hình một mạng SDN theo yêu cầu đặt ra ban đầu:

Hình 2-5 Thực thi lệnh tạo topo

6
- Thực hiện câu lệnh $ sudo ovs-vsctl show để kiểm tra luồng của các switch có
trong mô hình mạng. Kết quả như sau

Hình 2-6 Thông tin thành phần topo

- Tiến hành kết nối giữa các host trong mô hình mạng SDN đã tạo, ta sử dụng
lệnh pingall.

Hình 2-7 Tiến hành ping trong mạng

Do ban đầu mạng có FlowTable trống, nên kết quả thực thi lệnh pingall ta có thể
thấy là 100% dropped, chưa có kết nối giữa các host với nhau.

2.3 Cấu hình cấu trúc mạng SDN


Trong phần này, chúng ta sẽ cấu hình cấu trúc mạng bằng cách sử dụng Ryu
Controller.

7
- Thêm Flow vào các FlowTable, ta sử dụng lệnh: $ ryu-manager
ryu.app.simple_switch_13
(https://github.com/faucetsdn/ryu/blob/master/ryu/app/simple_switch_13.py)

Hình 2-8 Sử dụng Ryu Controller để thêm Flow cho các Switch

- Do mô hình mạng SDN đã tạo có cấu trúc vòng lặp, vì vậy ta cần sử dụng
thuật toán Spanning Tree (STP) trong Ryu để cấu hình mạng này.
Ta khái quát cấu trúc của thuật toán STP trong mã nguồn như sau:
 Khởi tạo các switch, truyền vào các tham số:

Hình 2-9 Khối code khởi tạo switch, truyền vào tham số cho mạng

 Hàm add_flow() dùng để thêm các flow vào Flowtable:

Hình 2-10 Hàm add_flow để thêm flow vào FlowTable

 Hàm _packet_in_hander(self,ev) xử lí gói tin đến:

8
Hình 2-11 Hàm packet_in_hander để xử lí gói tin đến

Ta sử dụng câu lệnh $ ryu-manager ryu.app.simple_switch_stp_13 để sử


dụng thuật toán STP trong Ryu cấu hình cho mạng

Hình 2-12 Sử dụng Ryu Controller để cấu hình cho mạng

Các đường truyền đã được tạo thành công, luồng của các switch cụ thể được cấu
hình như sau:

Hình 2-13 Thông tin luồng của các switch trong mạng sau khi được thêm Flow

Tiến hành thực thi thuật toán STP trên mạng SDN:

9
Hình 2-14 Thông tin về mạng và các cổng kết nối sau khi được cấu hình

- Kết quả cuối cùng là mỗi cổng kết nối sẽ trở thành trạng thái FORWARD hoặc
BLOCK, được miêu tả trong mô hình như sau:

Hình 2-15 Sơ đồ mạng và các cổng kết nối SDN sau khi được cấu hình

- Tiếp theo, để xác nhận cấu trúc mạng không bị lặp, các cấu trúc liên kết đã
được thực thi, ta sẽ thực hiện lệnh pingall và h1 ping h2 trong mạng.

10
Hình 2-16 Kết quả thực thi các kết nối sau khi cấu hình

- Kết quả trên cho ta thấy h1 và h2 đã được kết nối, có 33 gói tin được truyền đi,
33 gói tin nhận được, 0% gói tin mất.

Theo kết quả đầu ra trên, ta có thể xác nhận cấu hình mạng SDN đã thiết lập không
bị lặp, các cấu trúc liên kết đã được thực thi tốt.

11
CHƯƠNG 3. TƯỜNG LỬA

3.1 Xây dựng Topology mạng


Như các phần trước, chúng ta có 3 switch và 2 host, nhưng ở phần này em xin được
thiết kế mạng có 3 switch và mỗi switch có 1 host như hình sau:

Hình 3- 1 Mô hình mạng

3.2 Chặn toàn bộ traffic từ host 1 đến host 3


Để kích hoạt Ryu ta sử dụng câu lệnh sau:

$ ryu-manager ryu.app.simple_switch_stp_13 block_h1_to_h3.py

Trong đó: ryu.app.simple_switch_stp_13 là thuật toán tự add-flow trong SDN


với spanning tree protocol và block_h1_to_h3.py là file rule firewall do mình tự
tạo

Nếu chạy thành công ta sẽ có được thông báo như hình sau:

12
Hình 3- 2 Thực thi lệnh block h1 tới h3

Để thử nghiệm file rule đã hoạt động chưa, ta sử dụng lệnh pingall trên mininet ta
thấy được như sau:

Hình 3- 3 Thực thi lệnh pingall

h1 không thể ping được h3 và ngược lại h3 cũng không thể ping được h1, nhưng h1
ping h2 và h2 cũng ping h3

Để kiểm tra kỹ hơn chúng ta thực hiện câu lệnh sau:

$ sudo ovs-ofctl dump-flows s1

Với câu lệnh trên chúng ta sẽ in toàn bộ flow table trong switch s1:

13
Hình 3- 4 Flow Table trong Switch s1

Chính vì thế chúng ta đã thử nghiệm hành công

3.3 Chỉ chặn truy cập TCP đến cổng 80 trên host 1
Cũng tương tự với trường hợp trên ta cũng thực hiện câu lệnh tương tự

$ ryu-manager ryu.app.simple_switch_stp_13 tcp_html_h1.py

Trong đó: tcp_html_h1.py là file rule firewall chặn traffic TCP đến cổng 80 trên
host 1 do mình tự tạo

Đầu tiên chúng ta kiểm tra kết nối đến các host bằng lệnh pingall trên miniet, ta thu
được ảnh sau:

Hình 3- 5 Kiểm tra kết nối các host thông qua mininet

Chúng ta thấy được rằng các host đều ping được đến với nhau

Để kiểm tra firewall đã hoạt động đúng theo mong muốn của mình thì chúng ta cần
mở terminal trên host 1 và 1 host còn lại. Để mở terminal trên host của mininet ta sử
dụng câu lệnh xterm + tên_host.

14
Ở đây em sử dụng phần mềm netcat để tạo 1 server chờ kết nối đến 1 port và 1 client
kết nối tới server trên port đã mở

Ta thực hiện câu lệnh như trong ảnh, ta thu được như sau:

Hình 3- 6 Kiểm tra traffic trên port 80

Dù phía host 2 đã gửi 4 bản tin nhưng phía host 1 không nhận được bất kì bản tin nào

Để kiểm tra thêm, chúng ta thử mở cổng khác(không phải 80) trên host 1 xem host 2
có kết nối được không?? Ví dụ chúng ta sử dụng port 75 trên host 1

Hình 3- 7 Kiểm tra traffic trên port 75

Có thể thấy rằng host 2 gửi 5 bản tin thì host 1 đều nhận được, mạng SDN chỉ chặn
mọi traffic TCP đến host 1 thông qua port 80, chứ các port khác SDN không hề chặn.

Bây giờ chúng ta xem flow table, kiểm tra rule firewall do chúng ta đặt ra đã có trong
flow table của switch:

15
Hình 3- 8 Flow Table của switch s1

Chính vì vậy chúng ta đã thử nghiệm thành công.

16
TÀI LIỆU THAM KHẢO

[1] Spanning Tree [Online]. Link:


https://osrg.github.io/ryu-book/en/html/spanning_tree.html, truy cập lần cuối:
24/12/2021

[2] OpenFlow V1.3 Messages and Structures [Online], Link:


https://ryu.readthedocs.io/en/latest/ofproto_v1_3_ref.html, truy cập lần cuối
24/12/2021

[3] Build Your Own SDN Network [Online], Link:


https://www.codeproject.com/tips/1063072/build-your-own-sdn-network, truy
cập lần cuối 24/12/2021

17

You might also like