Trong hệ thống các thiết bị mạng truyềnthố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ãngsả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
Trang 1TRƯỜ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
Trang 2Nguyễn Tuấn Thành 20172825
Hà Nội, 12-2021
Trang 3LỜ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ôngtin 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ạngtruyề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ácdoanh nghiệp cũng như người dùng cuối Hiện nay nhu cầu về nghiệp vụ ngày càngphứ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 đangngà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ếtnối Mạng cần phải đáp ứng việc thay đổi nhanh chóng các thông số về độ trễ, băngthô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ôngnghệ 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ềnthố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ãngsả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àocô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ôngqua 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ộtmạ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ầnchí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
Trang 4MỤ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
Trang 5DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Trang 6DANH 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
Hình 3- 8 Flow Table của switch s1 14
Trang 7CHƯƠ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) đượcdự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 (controlplane 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átluồ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 (FlowController) Đ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 theolập trình Trong SDN, control plane được tách ra từ các thiết bị vật lý và chuyển đếncá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 đó chophé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ứcchuẩ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
Trang 8 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óaphầ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ựatrên nền tảng Linux như Xen/XenServer,KVM, và VirtualBox
Hình 1-2 Open vSwitch
Trang 9OpenvSwitch 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ệntà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ămnode 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ếpkhá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ộtcổng Ethernet với đầy đủ chức năng Các cặp veth có thể được gắn vào cácchuyể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ómcá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 địnhtuyế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ốngriê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
Trang 10 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ạngSDN 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ầnAddFlow vào các Flow Table Khi đó giao thức OpenFlow sẽ cho phép truy cập trựctiế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 nhaudẫ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
Trang 11cấ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
$ 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áchost 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
Trang 12- 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
Trang 13- 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 RyuController
Trang 14- 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:
Trang 15Hì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ấuhì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:
Trang 16Hì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.
Trang 17Hì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
Trang 18CHƯƠ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 đượcthiế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_13block_h1_to_h3.py
Trong đó: ryu.app.simple_switch_stp_13 là thuật toán tự add-flow trongSDN với spanning tree protocol và block_h1_to_h3.py là file rule firewall domình tự tạo
Nếu chạy thành công ta sẽ có được thông báo như hình sau:
Trang 19Hì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 h1ping 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:
Trang 20Hì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_13tcp_html_h1.py
Trong đó: tcp_html_h1.py là file rule firewall chặn traffic TCP đến cổng 80 trênhost 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.
Trang 21Ở đây em sử dụng phần mềm netcat để tạo 1 server chờ kết nối đến 1 port và 1 clientkế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ặnmọ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ó trongflow table của switch:
Trang 22Hình 3- 8 Flow Table của switch s1
Chính vì vậy chúng ta đã thử nghiệm thành công
Trang 23TÀ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