/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

Cisco - Cấu Hình Căn Bản/Basic Configuration - Quit Configuration - Templates

NỘI DUNG:

1. Cấu hình căn bản

2. Basic System Management Configuration

3. Quit Configuration - Template

4. VLAN Trunking Protocol  - VTP

5. NAT Overload/PAT - Allow Internal Users Access To The Internet

6. Trouble shooting - show commands


THỰC HIỆN:

1. Cấu hình căn bản

đang cập nhật...

STT Yêu Cầu Cấu Hình Commands Giải Thích
1 Privileged mode enable Tìm hiểu các mode tại đây
2 Global Configuration conf t Vào mode cấu hình, 
3 exit Quay ra một bật
4 End Quay ra Privileged mode
5 Đặt tên cho thiết bị hostname TenThietBi Đặt tên cho thiết bị có tên là:  TenThietBi
6 Đặt tên cho domain ip domain name khanhvc.lab Đặt trên cho domain có tên: khanhvc.lab (nhằm mục đích mã hóa dữ liệu)
7 no ip domain-lookup Tắt chế độ phân giải domain sang ip (khi chúng ta gõ sai thiết bị không đị đơ khi chờ phân giải, rất khó chịu khi cấu hình nên tắt đi)
8 Đặt tên login/banner banner motd #===Core Switch IT Room===# Khi chúng ta kết nối vào thiết bị sẽ hiển thị "===Core Switch IT Room==="
9 Cài đặt user và pass username admin privilege 15 password itadmin Username admin có password là itadmin và quyền là 15 (cao nhất) và bỏ qua enable password
10 Mã hóa password service password-encryption Kích hoạt mã hóa password trong file cấu hình
11 Remote Access line con 0 Vào mode console thứ 0 (tham khảo các kỹ thuật kết nối tại đây)
logging synchronous Đồng bộ thông báo console, Giữ nguyên những gì chúng ta đang gõ trên màn hình (thông báo sẽ không xen vào khi chúng ta đang gõ lệnh)
login local Sử dụng username và password trên thiết bị
exit Quay ra một bật
line vty 0 4 Vào mode vty-telnet. Tham khảo mục 2 - telnet
login local Sử dụng username và password trên thiết bị
transport input all Cho phép/chuyển qua tất cả các dịch vụ (telnet, ssh)
crypto key generate rsa general-keys modulus 1024 Tạo key khi mã hóa ssh
ip ssh version 2 Chuyển sang ssh version 2
12 Tạo Vlan vlan100 Tạo vlan 100
name HR-Dept Option - Tên của vlan 100 là HR-Dept
13 Đặt IP cho interface vlan interface Vlan100 Vào mode interface của vlan 100
no shutdown Kích hoạt interface
description ===Gateway cho vlan 100=== Option - Chú thích cho interface
ip address 192.168.100.254 255.255.255.0 Đặt IP cho vlan 100
14 Đặt IP trên interface interface Ethernet0/0 Vào mode interface của port Ethernet0/0
no switchport Enable port layer3/Routed port (Trên switch mặt định là port layer 2)
description ===Linked to Firewall=== Option - Chú thích cho interface
ip address 192.168.200.2 255.255.255.248 Đặt IP tĩnh cho port Ethernet0/0
ip address dhcp Interface Et0/0 sẽ xin IP động từ DHCP server
ip address 192.168.0.1 255.255.255.0 secondary Đặt IP thứ 2 trên 1 interface
15 Access Mode interface Ethernet0/1 Vào mode interface của port Ethernet0/1
switchport mode access Chuyển interface Ethernet0/1 về mode access
switchport access vlan 100 Gán interface Ethernet0/1 vào vlan 100
16 Trunking interface Ethernet0/2 Vào mode interface của port Ethernet0/2
switchport trunk encapsulation dot1q Đóng gói chuẩn dot1q. (Có 1 số dòng sản phẩm không cần gõ dòng lệnh này)
switchport mode trunk Mode trunk
switchport trunk allowed vlan all Cho phép tất cả các vlan đi qua đường trunk
17 Routing ip routing Cho phép các IP của các vlan khác nhau có thể giao tiếp được với nhau
18 Default Route ip route 0.0.0.0 0.0.0.0 200.2.2.1 Trỏ default route về IP 200.2.2.1
19 DHCP Server ip dhcp pool vlan_101 Tạo pool dhcp có tên pool vlan_101
network 192.168.101.0 255.255.255.0 Lớp mạng cần cấp cho pool vlan_101 là: 192.168.101.0/24
dns-server 8.8.8.8 DNS sẽ cấp cho pool là 8.8.8.8
default-router 192.168.101.254 Default Gateway
lease 0 0 10 Thời gian clien xin cấp lại ip GIỜ PHÚT GIÂY
20 DHCP Exclude Address ip dhcp excluded-address 192.168.101.254 DHCP server sẽ không cấp phát địa chỉ 192.168.101.254 cho dhcp client
ip dhcp excluded-address 192.168.101.1 192.168.101.50 Các IP trong dãy từ 192.168.101.1 -> 50 sẽ không được cấp cho DHCP client
21 DHCP Relay Agent interface Vlan101 Vào mode interface của vlan 101
ip helper-address 192.168.100.100 IP 192.168.100.100 sẽ chịu trách nhiệm cấp phát IP cho vlan 101
22 VLAN Trunking Protocol - VTP vtp domain khanhvc.lab Đặt tên cho vtp domain
vtp password vtpadmin Đặt password cho vtp
vtp version 2 Chuyển vtp dùng version 2
vtp mode server Cài đặt mode cho vtp. VTP có 3 mode là: Server, client và tranperrent
vtp pruning Tính năng này chỉ bật trên mode server
23 NAT Overload + ACL interface Ethernet0/1 Vào mode interface (Inside local - interface đấu nối hướng vào mạng LAN )
ip nat inside Cấu hình NAT inside
interface Ethernet0/2 Interface Inside global (Cổng đấu nối hướng ra ISP)
ip nat outside Cấu hình NAT outside
ip nat inside source list 1 interface Ethernet0/2 overload Thực hiện việc dịch tất cả các địa chỉ IP nằm trong access-list 1 sang địa chỉ IP trên cổng Et0/2
access-list 1 permit any Định nghĩa access-list 1 và cho phép tất cả các ip
24 Xóa cấu hình erase startup-config Xóa cấu trên Router/Switch
delete vlan.dat Nếu là switch chúng ta thực hiện thêm phần xóa các vlan (Tham khảo mục 2 xóa cấu hình)
reload Khởi động thiết bị
25 Lưu cấu hình write memory Thực hiện lưu cấu hình
HOẶC
copy running-config startup-config

Lưu cấu hình đang chạy vào file khởi động
26 no service config Tắt %Error opening tftp://255.255.255.255/xxxx (Timed out)


2. Basic System Management Configuration

Router-Cấu Hình Căn Bản
conf t
hostname Router-KHANHVC
ip domain name khanhvc.lab
no ip domain-lookup
banner motd #===Router KHANHVC===#

username admin privilege 15 password itadmin
service password-encryption
 
line con 0
logging synchronous
login local
exit
line vty 0 4
login local
transport input all
crypto key generate rsa general-keys modulus 1024
ip ssh version 2
 
interface Gi0/0
no shutdown
ip address 192.168.1.254 255.255.255.0
description ===Connect to somewhere===
exit
!
end
wri   

Với cấu hình trên chúng ta có thể dùng máy tính đặt IP trong lớp 192.168.1.0/24 -> nối vào port Gi0/1 của router và có thể telnet/ssh vào thiết bị với user: admin; password: itadmin

Switch-Cấu Hinh Căn Bản
conf t
hostname Switch-KHANHVC
ip domain name khanhvc.lab
no ip domain-lookup
banner motd #===Switch KHANHVC===#

username admin privilege 15 password itadmin
service password-encryption
 
line con 0
logging synchronous
login local
exit
line vty 0 4
login local
transport input all
crypto key generate rsa general-keys modulus 1024
ip ssh version 2
!
interface Vlan1
no shutdown
description ===MGMT===
ip address 192.168.1.254 255.255.255.0
exit
end
wri   

Với cấu hình trên chúng ta có thể dùng máy tính đặt IP trong lớp 192.168.1.0/24 -> nối vào switch và có thể telnet/ssh vào thiết bị với user: admin; password: itadmin

3. Quit Configuration - Template

Router-CE-ISP Leased-Line
conf t
hostname Router-CE-LL
ip domain name khanhvc.lab
no ip domain-lookup
banner motd #===Router CE Leased-Line===#

username admin privilege 15 password itadmin
service password-encryption
 
line con 0
logging synchronous
login local
exit
line vty 0 4
login local
transport input all
crypto key generate rsa general-keys modulus 1024
ip ssh version 2
 
interface et0/0
no shutdown
ip address 200.2.2.2 255.255.255.252
description ===Linked to ISP===
ip nat outside
exit
!
interface et0/1
no shutdown
ip address 100.1.1.1 255.255.255.248
description ===Linked to Firewall===
ip nat inside
exit
!
ip route 0.0.0.0 0.0.0.0 200.2.2.1
ip nat inside source list LAN-to-INTERNET interface Ethernet0/0 overload
!
ip access-list extended LAN-to-INTERNET
deny   ip 100.1.1.0 0.0.0.7 any
permit ip any any
exit
!
end
wri    
    
Core Switch/Layer3 Switch
conf t
hostname CoreSwitch
ip domain name khanhvc.lab
no ip domain-lookup
banner motd #===Core Switch IT Room===#

username admin privilege 15 password itadmin
service password-encryption
 
line con 0
logging synchronous
login local
exit
line vty 0 4
login local
transport input all
crypto key generate rsa general-keys modulus 1024
ip ssh version 2
!
interface Vlan1
no shutdown
description ===MGMT===
ip address 192.168.1.254 255.255.255.0
exit
vlan 100
interface Vlan100
no shutdown
description ===Server===
ip address 192.168.100.254 255.255.255.0
exit
vlan 101
interface Vlan101
no shutdown
description ===HR Dept.===
ip address 192.168.101.254 255.255.255.0
exit
!
ip routing
!
interface Ethernet0/0
no switchport
description ===Linked to Firewall===
ip address 192.168.200.2 255.255.255.248
no shutdown
exit
interface Ethernet0/1
description ===Linked to AD Server IP_100.100===
switchport mode access
switchport access vlan 100
no shutdown
exit
interface Ethernet0/2
description ===Linked to Access Switch===
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan all
exit
!
ip route 0.0.0.0 0.0.0.0 200.2.2.1
!
end
wri   

  • Nếu tạo thêm vlan thì chúng ta nhân bản vlan lên ví dụ vlan 102
conf t
vlan 102
interface Vlan102
no shutdown
description ===Accc Dept.===
ip address 192.168.102.254 255.255.255.0
end
wri

  • Nếu kết nối nhiều switch Access/Layer2 nhân bản
conf t
interface Ethernet0/2
description ===Linked to Access Switch===
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan all
end
wri
Tùy theo từng dòng sản phầm mà khi cấu hình port trunk CÓ THỂ CÓ hoặc KHÔNG có dòng "switchport trunk encapsulation dot1q"
Access Switch/Layer2 Switch
conf t
hostname Acc-01
ip domain name khanhvc.lab
no ip domain-lookup
banner motd #===Acc-01 HR Dept.===#

username admin privilege 15 password itadmin
service password-encryption
 
line con 0
logging synchronous
login local
exit
line vty 0 4
login local
transport input all
crypto key generate rsa general-keys modulus 1024
ip ssh version 2
!
interface Vlan1
no shutdown
description ===MGMT===
ip address 192.168.1.11 255.255.255.0
exit
!
vlan 101
interface Vlan101
no shutdown
description ===HR Dept.===
exit
!
interface Ethernet0/0
description ===Linked to Core Switch===
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan all
exit
!
interface Ethernet0/1
description ===Linked to PC===
switchport mode access
switchport access vlan 101
no shutdown
exit
!
end
wri

Tùy theo từng dòng sản phầm mà khi cấu hình port trunk CÓ THỂ CÓ hoặc KHÔNG có dòng "switchport trunk encapsulation dot1q"

  • Nếu tạo thêm vlan thì chúng ta nhân bản vlan lên ví dụ vlan 102 (vì là layer 2 nên khi tao vlan chúng ta KHÔNG đặt ip trên interface vlan này)
conf t
vlan 102
interface Vlan102
description ===Accc Dept.===
end
wri

  • Nếu có nhiều thiết bị đầu cuối muốn gán vào vlan 101 chúng ta nhân bản lên
conf t
interface Ethernet0/2
description ===Linked to PC===
switchport mode access
switchport access vlan 101
no shutdown
end
wri

  • HOẶC chúng ta cũng có thể cấu hình theo range interface vào vlan 101 cũng được ví dụ từ port 3-9 (tùy từng dòng sản phẩm mà phần range có thể là khác nhau tí tí)
conf t
interface range Ethernet0/3-9
description ===Linked to PC===
switchport mode access
switchport access vlan 101
no shutdown
end
wri
DHCP Server: Trường hợp này dùng chính switch Core làm DHCP server
conf t
ip dhcp excluded-address 192.168.101.254
ip dhcp excluded-address 192.168.101.1 192.168.101.50
!
ip dhcp pool vlan_101
network 192.168.101.0 255.255.255.0
dns-server 8.8.8.8
default-router 192.168.101.254
lease 0 0 10
end
wri

  • Nếu muốn nhân bản cho vlan khác thì copy và chỉnh lại chổ vàng vàng (nếu muốn Core làm DHCP server cho vlan đó) 
conf t
ip dhcp excluded-address 192.168.102.254
ip dhcp excluded-address 192.168.102.1 192.168.102.50
!
ip dhcp pool vlan_102
network 192.168.102.0 255.255.255.0
dns-server 8.8.8.8
default-router 192.168.102.254
lease 0 0 10
end
wri

DHCP Relay Agent:
Nếu KHÔNG dùng switch Core để cấp DHCP cho client thì chúng ta phải trỏ đến địa chỉ IP của DHCP bên ngoài (phải đảm bảo routing đến được server này thì việc xin IP mới thành công)
conf t
interface Vlan101
ip helper-address 192.168.100.100
end
wri

  • Nhân bản cho vlan khác: Ví dụ như vlan 102 muốn DHCP server có địa chỉ IP 192.168.100.100 cấp DHCP client cho vlan này 
conf t
interface Vlan102
ip helper-address 192.168.100.100
end
wri

Voice Data:
Nhằm mục đích ưu tiên tín hiệu voice trước (data ưu tiên sau) để đảm bảo tín hiệu ít trễ nhất có thể. Áp dụng trong trường hợp máy tính cắm vào port PC trên IP Phone (hay PC sau điện thoại)


conf t
interface Ethernet1/3
switchport access vlan 103
switchport voice vlan 99
end
wri

Với cấu hình trên PC sẽ nhận ip của vlan 103, IP phone sẽ nhận ip của vlan 99

4. VLAN Trunking Protocol  - VTP
VTP Server Mode Thêm, sửa, xóa sau đó gửi đi để các switch khác học, và chính mode này cũng có thể học/đồng bộ từ các switch khác (trong trường hợp revision của switch khác cao hơn), và cũng có thể forward để các switch khác cùng học.

Điều kiện:
- Các đường đấu nối giữa các switch phải là trunk
- Thông tin vtp giữa các switch khớp nhau: tên domain, password, version, ...

conf t
vtp domain khanhvc.lab
vtp password vtpadmin
vtp version 2
vtp mode server
vtp pruning
end
wri
VTP Client Mode Ở mode này các vtp client sẽ học các vlan từ switch khác nếu revision của switch khác cao hơn revision của nó (bản thân nó không được phép tạo, xóa vlan) và forward thông tin cho các switch khác học.

Với việc triển khai VTP Server-Client thì thông tin vlan sẽ được nhất quán một cách tự động trên toàn hệ thống. Chúng thường được áp dụng triển khai cho hệ thống mới
  conf t
vtp domain khanhvc.lab
vtp password vtpadmin
vtp version 2
vtp mode client
end
wri
VTP Transparent Mode Được phép tạo, xóa nhưng chỉ tác dụng trên local switch mà không ảnh hưởng đến các switch khác, không gửi thông tin của mình cho các switch khác. Tuy nhiên nó vẫn forward thông tin của người ta (switch khác) cho các switch sau nó học.

Thông thường khi triển khai xong chúng ta thường chuyển về mode transparent này nếu như các bạn chưa có kiến thức tốt để quản lý VTP
conf t
vtp domain khanhvc.lab
vtp password vtpadmin
vtp version 2
vtp mode transparent
end
wri

5. NAT Overload/PAT - Allow Internal Users Access To The Internet

Cho phép toàn các ip nằm trong Access-List 1 được phép truy cập internet và sử dụng IP trên cổng  Et0/2 là 125.234.102.243 làm IP đại diện
conf t
interface Ethernet0/1
description ===Connect to LAN/CoreSwitch===
ip address 192.168.200.1 255.255.255.248
no shut
ip nat inside
exit
interface Ethernet0/2
description ===Connect to ISP-Router===
ip address 125.234.102.243 255.255.255.248
no shut
ip nat outside
exit
!
ip nat inside source list 1 interface Ethernet0/2 overload
!
access-list 1 permit any
!
end
wri


6. Trouble shooting - show commands
đang cập nhật...
STT Nhóm Commands Giải Thích
1 show running-config Hiển thị cấu hình hiện tại đang chạy
2 show vlan Hiển thị các vlan đang tồn tại trên switch
3 Interface show ip interface brief Hiển thị trạng thái up/down và thông tin IP của các interface
show interface Hiển thị trạng thái up/down, trạng thái giao thức trên interface, MTU, Lỗi,...
show interface trunk Hiển thị thông tin về port trunk trên switch
show run interface Et0/1 Hiển thị cấu hình hiện tại của interface Et0/1
4 Routing show ip route Hiển thị thông tin bảng định tuyến của thiết bị
5 show version Hiển thị thông tin register thiết bị, firmware, tên IOS, flash, RAM, ...
6 VLAN show vlan summary Hiển thị trên switch hiện tại có tất cả bao nhiêu vlan
show vlan brief Hiển thị thông tin vlan và các interface nào gắng vào vlan nào
7 DHCP show ip dhcp binding Hiển thị tất cả các IP đã được cấp cho DHCP client
show ip dhcp conflict Hiển thị các IP đã cấp phát nhưng bị trùng
show ip dhcp server statistics Hiển thị thông tin chi tiết về dhcp server
show ip dhcp pool Hiển thị thông tin chi tiết và các pool dhcp
show run | section ip dhcp Hiển thị tất cả các cấu hình có liên quan đến cấu hình dhcp server
8 VTP show vtp status Hiển thị thông tin cấu hình vtp
show vtp password Hiển thị thông tin password của vtp
9 NAT Overload show ip nat translation Kiểm tra bảng NAT
clear ip nat statistics Xóa thông tin bảng NAT
show ip nat statistics Hiển thị thông tin bộ đếm và các thông tin liên quan đến NAT
9 Access-List show access-lists Hiển thị thông tin Access-List


Áp dụng vào mô hình thực tế
Xong!

Network Automation #007 - Netmiko - Tìm Và Cấu Hình Description Cho Interface Khi Biết IP Address

Nên xem các bài trước khi xem bài này


Sơ đồ LAB:


YÊU CẦU

Dùng Netmiko SSH vào switch sau đó thực hiện các yêu cầu như bên dưới khi biết thông tin về IP address và phần mô tả của thiết bị trong file cho trước "devices_list.csv"

  1. In kết quả tìm được IP nào đang kết nối vào port nào ra màn hình và ghi thông tin kết nối chi tiết vào file
  2. Cấu hình description cho interface với thông tin trong file devices_list.csv

THỰC HIỆN:

  • Chuẩn bị 
a. File danh sách thiết bị device_list.csv có dạng


b. Cấu hình trên switch cisco:


1. In kết quả tìm được IP nào đang kết nối vào port nào ra màn hình và ghi thông tin kết nối chi tiết vào file

  • Code:

'''
Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó Danh sách các IP cần tìm để trong file "device_list.csv" (Điều kiện là thiết bị cisco cần kết nối đã được cấu hình SSH) Kết quả tìm được in ra màn hình và lưu vào file "Show_arp_Ketqua_192.168.0.1.csv" Câu lệnh chính dùng trong bài: - show arp <ip cần tìm> - show mac address-table address <địa chỉ mac cần tìm> ''' import netmiko # import thư viện netmiko import os # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"cisco_ios" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) with open ("device_list.csv","r") as rfile: # mở file keys = rfile.readline() # lấy dòng đầu tiên values = rfile.read() # các dòng còn lại là giá trị cần gán vào dict # print(keys) # print(values) ''' để remove xuống dòng (newline) chúng ta có thể dùng print(keys,end="") ''' file_ketqua = "Show_arp_Ketqua_" + Sw_1["host"] + ".csv" # định nghĩa tên file cần ghi kết quả file_header = keys.rstrip() + ",Vlan,Mac Address,Type,Port\n" # bỏ newline (\n) ở cuối dòng và nối thêm chuỗi để ghi vào file chuẩn bị để chứa kết quả show mac address và chèn newline vào cuối f = open(file_ketqua,"w") # print(file_header) f.write(file_header) f.flush() # thực hiện ghi f.close() # đóng file để giải phóng bộ nhớ for values in values.splitlines(): # trả về một chuỗi tương ứng là một dòng trong biến values values = values.split(",") # mỗi dòng chuyển thành list ip_addr = values[0] # giá trị của cột đầu tiên là địa chỉ IP cần lấy ra ip_description = values[1] # print(ip_addr) # print(ip_description) # print(values) print("*" + ip_addr + ":") # In ra IP đang cần show net_connect.send_command("ping" + " " + ip_addr) # ping địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm thứ 4 (là địa chỉ MAC) tính từ trái sang, sau đó sẽ thực hiện lệnh show mac với MAC này mac_addr = fields[3] # print (mac_addr) show_mac_addr = "show mac address-table address" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show show_mac_addr = show_mac_addr.splitlines()[5].split() # lấy dòng thứ 6 chuyển thành list print(show_mac_addr) # In kết quả show ra màn hình print() # In ra dòng trắng show_mac_addr = values + show_mac_addr # thực hiện nối thông tin ban đầu và kết quả #print(show_mac_addr) show_mac_addr = ",".join(show_mac_addr) + "\n" # convert list sang string và thêm "," vào giữa mỗi cụm f = open(file_ketqua,"a") f.write(show_mac_addr) # thực hiện ghi thêm kết quả vào file kết quả path = os.getcwd() # lấy đường dẫn hiện tại print("*" * 20 + "KẾT QUẢ ĐƯỢC LƯU TẠI" + "*" * 20) print(r"{}".format(path)) print(file_ketqua) print("*" * 60 + "\n")

  • Kết quả:

Connecting to a host: 192.168.0.1...

*192.168.0.101:
['1', '0050.7966.6803', 'DYNAMIC', 'Et0/1']

*192.168.0.102:
['1', '0050.7966.6805', 'DYNAMIC', 'Et0/2']

*192.168.0.103:
['1', '0050.7966.6806', 'DYNAMIC', 'Et0/3']

*192.168.0.104:
['1', '0050.7966.6804', 'DYNAMIC', 'Et1/3']

*192.168.0.105:
['1', '0050.7966.6802', 'DYNAMIC', 'Et1/2']

********************KẾT QUẢ ĐƯỢC LƯU TẠI********************
C:\vck\LAB
Show_arp_Ketqua_192.168.0.1.csv
************************************************************

[Finished in 19.5s]

Nội dung file show_arp_Ketqua có dạng


2. Cấu hình description cho interface với thông tin trong file devices_list.csv

  • Code:

'''
Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó Danh sách các IP cần tìm để trong file "device_list.csv" (Điều kiện là thiết bị cisco cần kết nối đã được cấu hình SSH) Kết quả tìm được in ra màn hình và lưu vào file "Show_arp_Ketqua_192.168.0.1.csv" Câu lệnh chính dùng trong bài: - show arp <ip cần tìm> - show mac address-table address <địa chỉ mac cần tìm> - int <tên interface> - description <nội dung cần chú thích> ''' import netmiko # import thư viện netmiko import os # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"cisco_ios" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) with open ("device_list.csv","r") as rfile: # mở file keys = rfile.readline() # lấy dòng đầu tiên values = rfile.read() # các dòng còn lại là giá trị cần gán vào dict # print(keys) # print(values) ''' để remove xuống dòng (newline) chúng ta có thể dùng print(keys,end="") ''' file_config = Sw_1["host"] + ".txt" # định nghĩa tên file config f = open(file_config,"w") # khởi tạo file config rỗng f.flush() # thực hiện ghi f.close() # đóng file để giải phóng bộ nhớ for values in values.splitlines(): # trả về một chuỗi tương ứng là một dòng trong biến values values = values.split(",") # mỗi dòng chuyển thành list ip_addr = values[0] # giá trị của cột đầu tiên là địa chỉ IP cần lấy ra ip_description = values[1] # print(ip_addr) # print(ip_description) # print(values) # print("*" + ip_addr + ":") # In ra IP đang cần show net_connect.send_command("ping" + " " + ip_addr) # ping địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm thứ 4 (là địa chỉ MAC) tính từ trái sang, sau đó sẽ thực hiện lệnh show mac với MAC này mac_addr = fields[3] # print (mac_addr) show_mac_addr = "show mac address-table address" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show show_mac_addr = show_mac_addr.splitlines()[5].split() # lấy dòng thứ 6 chuyển thành list # print(show_mac_addr) # In kết quả show ra màn hình int_port = show_mac_addr[3] # lấy tên interface # print(int_port) ''' Đưa các thông tin cần cấu hình cho interface vào file cấu hình mẫu ''' f = open(file_config,"a") f.write("interface " + " " + int_port + "\n") f.write("description " + " ===Link to " + ip_addr + " " + ip_description + "===\n") f.write("exit\n") f.flush() # thực hiện ghi f.close() # đóng file để giải phóng bộ nhớ net_connect.send_config_from_file(file_config) # thực hiện cấu hình từ file cấu hình mẫu net_connect.save_config() # lưu cấu hình ''' Kiểm tra sau khi cấu hình ''' show_int_des = "show interface description" show_int_des = net_connect.send_command(show_int_des) print(show_int_des)


  • Kết quả:
Connecting to a host: 192.168.0.1...

Interface                      Status         Protocol Description
Et0/0                          up             up       
Et0/1                          up             up       ===Link to 192.168.0.101 IP Phone===
Et0/2                          up             up       ===Link to 192.168.0.102 Wireless Controller===
Et0/3                          up             up       ===Link to 192.168.0.103 Juniper===
Et1/0                          up             up       
Et1/1                          up             up       
Et1/2                          up             up       ===Link to 192.168.0.105 PC===
Et1/3                          up             up       ===Link to 192.168.0.104 Linux Server===
Vl1                            up             up       
[Finished in 35.4s]

Xong!

Basic Shell Script In Linux/Ubuntu/CentOS - P1

Trong windows chúng ta có batch file, trong linux có Shell Script. Nói chung shell là chương trình có thể tương tác người dùng, có thể input dữ liệu, có thể output ra màn hình, có thể tự động thực thi một nhóm lệnh do chúng ta tạo ra theo một lịch trình đã thiết lập.

1. Cách tạo và thực thi một chương trình shell

  • Tạo file hello.sh với nội dung:

#!/bin/bash
echo "hello world"

Giải thích: 
- #!/bin/bash: là shellbang, là dòng bắt buộc trong shell script
- echo "hello world": Khi chạy file hello.sh nó sẽ xuất ra màn hình chữ "hello world"

  • Thiết lập user có quyền (x) được phép thực thi cho file hello.sh
chmod u+x hello.sh


  • Chạy chương trình - file hello.sh vừa tạo

Có thể thực hiện 1 trong 3 cách như dưới
- sh hello.sh
- bash hello.sh
- ./hello.sh

Ví dụ: 

khanhvc@ubutu:~/projects/shell$ sh hello.sh
hello world


2. Shell variables

2.1 Biến của hệ thống: dùng lệnh printenv để in ra các biến đang tồn tại trong hệ thống linux

khanhvc@ubutu:~/projects/shell$ printenv
SHELL=/bin/bash
LC_ADDRESS=vi_VN
LC_NAME=vi_VN
LC_MONETARY=vi_VN
PWD=/home/khanhvc/projects/shell
LOGNAME=khanhvc
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/khanhvc
LC_PAPER=vi_VN
LANG=en_US.UTF-8
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
SSH_CONNECTION=192.168.0.48 63977 192.168.0.73 22
LESSCLOSE=/usr/bin/lesspipe %s %s
XDG_SESSION_CLASS=user
LC_IDENTIFICATION=vi_VN
TERM=xterm
LESSOPEN=| /usr/bin/lesspipe %s
USER=khanhvc
SHLVL=1
LC_TELEPHONE=vi_VN
LC_MEASUREMENT=vi_VN
XDG_SESSION_ID=330
XDG_RUNTIME_DIR=/run/user/1000
SSH_CLIENT=192.168.0.48 63977 22
LC_TIME=vi_VN
XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
SSH_TTY=/dev/pts/0
LC_NUMERIC=vi_VN
OLDPWD=/home/khanhvc/projects
_=/usr/bin/printenv
khanhvc@ubutu:~/projects/shell$

Ví dụ: Tạo file demo.sh để in các thông tin các biến theo yêu cầu dưới:
  • Thông tin version của shell hiện tại
  • Tên của shell
  • Thư mục gốc của user hiện tại
  • Thông tin đường dẫn đã được thiết lập 
Nội dung file demo.sh
#!/bin/bash
echo $BASH_VERSION
echo $BASH
echo $HOME
echo $PATH

Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
5.0.17(1)-release
/bin/bash
/home/khanhvc
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
khanhvc@ubutu:~/projects/shell$


2.2 Biến do người dùng định nghĩa UDV - User Defined variables, biến CÓ phân biệt chữ hoa, chữ thường
  • Cú pháp:
ten_bien=gia_tri

2.2.1 EXPR
  • Ví dụ:
#!/bin/bash
a=6
b=3
expr $a + $b
Kết quả là: 9, vì nó lấy giá trị của a cộng cho giá trị của b

  • Ví dụ khác:
#!/usr/bin/bash
a=6
b=3

tong=$(expr $a + $b)
echo "Ket qua cua a CONG b = " $tong

hieu=$(expr $a - $b)
echo "Ket qua cua a TRU b = " $hieu

thuong=$(expr $a / $b)
echo "Ket qua cua a CHIA b = " $thuong

#phép nhân chúng ta phải thêm dấu "\" trước dấu "*" để thực hiện phép nhân
tich=$(expr $a \* $b)
echo "Ket qua cua a NHAN b = " $tich
Kết quả:
khanhvc@ubutu:~/projects/shell$ sh demo.sh
Ket qua cua a CONG b =  9
Ket qua cua a TRU b =  3
Ket qua cua a CHIA b =  2
Ket qua cua a NHAN b =  18
khanhvc@ubutu:~/projects/shell$

2.2.2 LET

  • Ví dụ 

#!/usr/bin/bash
a=6
let a+=1
echo "a = 6, a + 1 = " ${a}

let b=a+1
echo "b = a + 1 = " $b

let c=a+b
echo "c = a + b = " $c
  • Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
a = 6, a + 1 =  7
b = a + 1 =  8
c = a + b =  15
khanhvc@ubutu:~/projects/shell$


2.2.3 “bc” – An arbitrary precision calculator language”

  • Ví dụ: 

#!/usr/bin/bash
#in ra kết quả của 5 + 3
echo "5 + 3" | bc

#in ra kết quả là giá trị của x + y
x=10
y=20
echo "$x + $y" | bc

#in ra kết quả là giá trị của x + y
bc <<< "$x + $y"
  • Kết quả:
khanhvc@ubutu:~/projects/shell$ ./demo.sh
8
30
30
khanhvc@ubutu:~/projects/shell$

P/s: Kiểm tra câu lệnh chạy trong linux chúng ta dùng echo $? nếu kết quả số 0 thì câu lệnh kết thúc thành công, ngược lại là lỗi


Xong!

Juniper - Backup and Restore Configuration on EX Switches

 NỘI DUNG:

1. Backup Kết Hợp Show Và Log Session Của SecureCRT

2. Restore - Load File

3. Restore - Load Terminal


THỰC HIỆN:

1. Backup Kết Hợp Show Và Log Session Của SecureCRT

- Kết nối đến thiết bị cần backup bằng SecureCRT

- Trên SecureCRT vào File -> LogSession -> Save để lưu các nội dung show vào file này.


- show | no-more

HOẶC

- show | no-more | display set


Sau khi thực hiện lệnh show này toàn bộ nội dung cấu hình sẽ lưu trong file 2021-04-28-Juniper.log


2. Restore - Load File

Commands Diễn Giải
configure Vào mode config
load merge /var/home/admin/2021-04-27_IP127.246.cfg Load file 2021-04-27_IP127.246.cfg nối vào cấu hình hiện tại

3. Restore - Load Terminal

Commands Diễn Giải
configure Vào mode config
load merge terminal sau khi gõ dòng này xong chúng ta dán nội dung cần cấu hình vào
[Type ^D at a new line to end input] sau khi DÁN NỘI DUNG xong nhấn enter để xuống hàng sau đó nhấn Ctrl + D để thực hiện nối nội dung vào cấu hình

xong!

Network Automation #006 - Netmiko How To Find Which Switch Port A Device Is Plugged Into Base on IP Address

Nên đọc bài  LAB #001 trước khi xem bài này

Sơ đồ Lab:


Yêu cầu:  Dùng Netmiko để SSH vào switch sau đó tìm thiết bị có IP 192.168.0.101 đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó:
1. Thực hiện trên Cisco - IOS
2. Thực hiện trên Juniper - JunOS

Thực hiện:
1. Thực hiện trên Cisco - IOS

  • Chuẩn bị (cấu hình trên Cisco switch ):

  • Code:
'''
Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó (Điều kiện là thiết bị cisco cần kết nối đã được cấu hình SSH) Câu lệnh chính dùng trong bài: - show arp <ip cần tìm> - show mac address-table address <địa chỉ mac cần tìm> ''' import netmiko # import thư viện netmiko # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"cisco_ios" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) ip_addr = "192.168.0.101" # địa chỉ ip cần tìm net_connect.send_command("ping" + " " + ip_addr) # ping địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm thứ 4 (là địa chỉ MAC) tính từ trái sang, sau đó sẽ thực hiện lệnh show mac với MAC này mac_addr = fields[3] # print (mac_addr) show_mac_addr = "show mac address-table address" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show print ("*" * 20 + "KET QUA" + "*" * 20) print(show_mac_addr)

  • Kết quả:

Connecting to a host: 192.168.0.1...

********************KET QUA********************
Mac Address Table
-------------------------------------------

Vlan    Mac Address       Type        Ports
----    -----------       --------    -----
   1    0050.7966.6807    DYNAMIC     Et0/0
Total Mac Addresses for this criterion: 1
[Finished in 8.8s]

Kết quả cho chúng ta thấy IP 192.168.0.101 được kết nối vào port Et0/0 của switch 192.168.0.1

2. Thực hiện trên Juniper - JunOS
  • Chuẩn bị (cấu hình trên Juniper switch ):
Tham khảo cấu hình Juniper tại link 

Noted: Lab Juniper mình làm trên thiết bị thật, nên port sẽ không giống như hình ở trên
  • Code:
''' Tìm thiết bị đang gắng vào port nào trên local switch khi biết địa chỉ IP của nó (Điều kiện là thiết bị Juniper cần kết nối đã được cấu hình SSH) Câu lệnh chính dùng trong bài: - show arp hostname <ip cần tìm> - show ethernet-switching table <địa chỉ mac cần tìm> ''' import netmiko # import thư viện netmiko # Thông tin thiết bị cần SSH vào (định nghĩa dictionnary) Sw_1 = { "host":"192.168.0.1", "username":"admin", "password":"admin1234@core", "device_type":"juniper_junos" } print("Connecting to a host: " + Sw_1["host"] + "...\n") # Hiển thị thông báo kết nối tới # dùng hàm ConnectHandler trong thư viện netmiko để kết nối với Sw_1 với các thông tin đã định nghĩa trong dictionnary net_connect = netmiko.ConnectHandler(**Sw_1) ip_addr = "192.168.0.101" # địa chỉ ip cần tìm net_connect.send_command("ping" + " " + ip_addr + " " + "count 4") # ping (ping 4 gói) địa chỉ IP cần kiểm tra để switch cập nhật vào bảng MAC show_arp = "show arp" + " " + "hostname" + " " + ip_addr show_arp = net_connect.send_command(show_arp) # thực hiện lênh show arp với chính IP cần tìm # print (show_arp) # In ra dòng thứ nhì trong chuỗi # print (show_arp.splitlines()[1]) # lấy dòng thứ nhì và phân ra từng cụm fields = show_arp.splitlines()[1].split() # lấy cụm đầu tiên (là địa chỉ MAC) tính từ trái sang mac_addr = fields[0] # print (mac_addr) show_mac_addr = "show ethernet-switching table" + " " + mac_addr show_mac_addr = net_connect.send_command(show_mac_addr) # thực hiện lệnh show print ("*" * 20 + "KET QUA" + "*" * 20) print(show_mac_addr)

  • Kết quả:

Connecting to a host: 192.168.0.1...

********************KET QUA********************
MAC flags (S - static MAC, D - dynamic MAC, L - locally learned, P - Persistent static, C - Control MAC
           SE - statistics enabled, NM - non configured MAC, R - remote PE MAC, O - ovsdb MAC)

Ethernet switching table : 87 entries, 87 learned
Routing instance : default-switch
    Vlan                MAC                 MAC         Age    Logical                NH        RTR 
    name                address             flags              interface              Index     ID
    vlan-11                  d4:f5:ef:09:c0:1e   D             -   ge-1/0/0.0             0         0       

[Finished in 13.1s]

Thiết bị có IP 192.168.0.101 được nối vào port ge-1/0/0 của switch 192.168.0.1
 

Xong!

/*header slide*/