■河南 郭建偉
例如在CSR1000V上執(zhí)行“show ve”命令,在返回信息顯示“Cisco IOS XE Software,Version 16.06.03”信息,說明其采用的就是IOS-XE系統(tǒng)。執(zhí)行“config t”命令,進入全局配置模式。執(zhí)行“iox”命令,啟用容器化功能。執(zhí)行“show iox”命令,顯示虛擬服務(wù)的全局狀態(tài),以及虛擬化的限制信息。執(zhí)行“inter virtualPortGroup 0”,“ip address 192.168.1.254 25 5.255.255.0”,“ip nat inside”命令,創(chuàng)建一個虛擬端接口組,為其指定具體的IP,并進行內(nèi)部地址轉(zhuǎn)換。執(zhí)行“interface gigabitEthernet1”,“ip nat outside”命令,針對指定的物理端口,執(zhí)行外部地址轉(zhuǎn)換。
執(zhí)行“ip route 0.0.0.0 0.0.0.0 192.168.1.254”命令,設(shè)置默認(rèn)的網(wǎng)關(guān)地址,讓外部設(shè)備可以順利訪問網(wǎng)絡(luò)。執(zhí)行“ip access-list extended PAT”“permit ip 192.168.1.0 0.0.255 any”命令,創(chuàng)建指定名稱的ACL列表,允許容器訪問。執(zhí)行“ip nat inside source list PAT interface g1 overload”命令,啟用內(nèi)部原地址轉(zhuǎn)換的動態(tài)NAT,其中的“overload”參數(shù)表示啟用端口復(fù)用,允許容器通過指定的物理端口訪問外部網(wǎng)絡(luò)。
執(zhí)行“guestshell enable VirtualPortGroup 0 guest-ip 192.168.1.1 name-server 114.114.114.114”命令,為Guest Shell容器指定IP地址和DNS服務(wù)器地址。這樣,容器就可以通過上述網(wǎng)關(guān)來訪問外部網(wǎng)絡(luò)。當(dāng)Guest Shell容器被激活之后,執(zhí)行“guestshell”命令,進入該容器中,可以執(zhí)行各種Linux命令了。例如,執(zhí)行“pwd”命令,顯示當(dāng)前路徑等。執(zhí)行“sudo yum install git”命令,來安裝Git。執(zhí)行“git clone https://github.com/xxx”之類的命令,來安裝所需的腳本,這里的“xxx”為具體的腳本下載路徑。如果執(zhí)行“guestshell disable”命令,可以停止容器。執(zhí)行“guestshell destroy”命令,可以刪除Guest Shell容器。
當(dāng)然,也可以使用SSH方式登錄Guest Shell,其默認(rèn)的SSH服務(wù)處于開啟狀態(tài)。
例如,執(zhí)行“ip nat inside source static tcp 192.168.1.1 22 interface GigabitEthe rnet1 9222”命令,針對針對容器執(zhí)行靜態(tài)的地址轉(zhuǎn)換,將Guest Shell的TCP 22端口映射到外部的TCP 9222端口上。
但是,Guest Shell默認(rèn)是禁止使用密鑰登錄SSH,需要使用公鑰進行驗證。例如在客戶端的SecureCRT中點擊菜單“工具”→“創(chuàng)建公鑰”項,在向?qū)Т翱冢ㄈ鐖D1)中的“密鑰類型”列表中選擇“RSA”項,點擊“下一步”按鈕,在“通行短語”欄中輸入密碼,用來加密私鑰。
圖1 創(chuàng)建公鑰向?qū)Ы缑?/p>
圖2 設(shè)置SSH連接屬性
在下一步窗口中輸入密鑰長度,之后產(chǎn)生公鑰信息。選擇“標(biāo)準(zhǔn)公鑰和VanDuke私鑰模式”項,點擊瀏覽按鈕,選擇保存路徑。點擊完成按鈕,得到所需的公鑰。打開得到的公鑰文件,復(fù)制公鑰信息。在Guest Shell中的根目錄下執(zhí)行“vi.ssh/authorized_keys”命令,打開認(rèn)證文件,將其中的原始密鑰信息刪除,粘貼上述公鑰信息。
這樣,就可以在客戶端上的SecureCRT創(chuàng)建新的連接項目,輸入目標(biāo)設(shè)備地址,在“鑒權(quán)”欄中確保選擇“公鑰”項(如圖2),點擊“屬性”按鈕,選擇“使用全局公鑰設(shè)置”項,選擇上述公鑰文件。之后利用該連接項目,連接目標(biāo)設(shè)備,在彈出提示窗口中點擊“接受并保存”按鈕,輸入上述通行短語,就可以通過SSH連接到Guest Shell容器中。
為了便于向Guest Shell上傳腳本文件,可以在Guest Shell中執(zhí)行“sudo yum-y install lrzsz”命令。安裝文件傳輸小工具。執(zhí)行“rz”和“sz”命令,可以上傳和下載較小的文件。
順便說一下,如果想使用上述公鑰直接登錄路由器,可以在路由器中執(zhí)行“ip ssh public-chain”,“username xxx”,“keystring”命令,粘貼上述公鑰,其中的“xxx”為具體的用戶名。執(zhí)行“exit”命令返回。執(zhí)行“do show run”命令,在“ip sshpublic-chain”欄中顯示公鑰的哈希值。在SecureCRT中新建一個連接,輸入路由器的IP,在“鑒權(quán)”欄中確保選擇“公鑰”項,之后就可以利用該公鑰直接登錄到路由器管理界面。
在Guest Shell中內(nèi)置了Python模塊,并且提供了CLI Python Module功能。因此,就可以很快捷的運行Python腳本,對IOS-XE進行管理和配置。在Guest Shell中執(zhí)行“python”命令,在“>>>”提示符下執(zhí)行“from cli import configure,configurep”命令,加載“configure”和“configurep”模塊,兩者的區(qū)別在于后者可以自動打印結(jié)果,其余的完全一致。就可以使用CLI Python Module功能了。
例如,執(zhí)行“result=configure('route eigrp 10 0')”命令,“print(result)”命令,就可以顯示執(zhí)行成功的信息,并返回列表,包含相應(yīng)命令的結(jié)果信息,這其實就是一個Python對象。如果需要執(zhí)行多個命令,可以采用換行符來實現(xiàn)。例如執(zhí)行“cmds="route eigrp 100 etwork 1.1.1.0 0.0.0.0 area 0"”,“result=configure(cmds)”之類的命令來實現(xiàn),其中的“”為換行符,用來分隔多個命令。利用“configure”只可以運行和配置相關(guān)的命令,利用“execute”只可以運行執(zhí)行模式的命令。
例如執(zhí)行“from cli im port execute,executep”“r esule=execute('show ip protocols')”,“print(resu lt)”命令,可以顯示詳細的協(xié)議配置信息。注意,“execute”只能執(zhí)行一個命令。對于“cli”和“clip”模塊來說,可以執(zhí)行各種命令,不區(qū)分配置模式和執(zhí)行模式。執(zhí)行“from cli import cli,clip”命令,導(dǎo)入所需模塊。執(zhí)行“clip("show run")”,“clip("show version;sh ow ip eigrp interface")”,“clip("configure terminal;interface Gigabitthernet 1;no shutdown")”之類的執(zhí)行,可以顯示返回結(jié)果。對于多命令來說,使用分號進行分隔。執(zhí)行“exit()”命令,返回Guest Shell提示符。
執(zhí)行“sudo pip install requests”命令,安裝Requests模塊,利用其可以構(gòu)建所有的HTTP請求,執(zhí)行各種網(wǎng)絡(luò)操作。
執(zhí)行“python”,“import requests”命令,導(dǎo)入Requests模塊,執(zhí)行“r=requests.get('http://www.xxx.com')”,“print(r)”命令,顯示請求的結(jié)果信息。為了提高執(zhí)行效率,可以執(zhí)行各種Python腳本。
例如,執(zhí)行“vi openport.py”命令,輸入“from cli import execute,configure”,“result=exe c('show ip inter brie')”,“interfacelist=[]”,“for x in result.spit(' ')”,“interfacelist.append(x.spit()[0])”,“interf acelist=interfaceli st[1:]”,“for if_name in interfacelist;”,“configure('interface %s open interface script%s no shutdown'%(if_name,if_name))”行,其作用是顯示所有的端口信息,并針對其分別設(shè)置描述信息并將其打開。
在路由器中執(zhí)行“guestshell run python bootflash:data/openport.py”之類的命令,就可以運行上述腳本,假設(shè)腳本保存在“bootflash:data”目錄。
對于EEM(即Embedded Event Manager,內(nèi)嵌事件管理)來說,同樣支持Python腳本。EEM其實是設(shè)備內(nèi)嵌的自動化工具,支持各種事件。
例如,對于SLA路由追蹤來說,可以對目標(biāo)IP進行追蹤,追蹤其是否可達/抖動/延時等狀態(tài)。如果發(fā)現(xiàn)存在問題的話,就會結(jié)合Track實現(xiàn)冗余靜態(tài)路由的切換等。
您可以將Python腳本注冊為EEM策略,這樣,當(dāng)觸發(fā)特定的事件時就會執(zhí)行對應(yīng)的Python腳本。
例如在路由器全局配置模式下執(zhí)行“interface lookback 9”,“ip address 10.1.1.9 255.255.255”之類的命令,創(chuàng)建一個環(huán)回口。
執(zhí)行“event manager applet interdown”,“event syslog pattern "interface Loopback9,change state to administratively down"”,“action 1.0 cli command "en"”,“action 2.0 cli command "guest run python bootflash:data/openport.py ”命令,創(chuàng)建名為“interdown”的EEM策略,其作用是如果發(fā)現(xiàn)syslog日志中出現(xiàn)上述信息后,就說明該環(huán)回口處于shutdown狀態(tài)。
之后進入“enable”特權(quán)模式,并運行指定的腳本。
指定環(huán)回口狀態(tài)變動的信息,進入Guest Shell環(huán)境,執(zhí)行“vi openport.py.”命令,輸入“from cli import configure”,“configure("interface Lokoback9 no shutdown")”行,其作用是是將指定的環(huán)回口設(shè)置為“no shutdown”狀態(tài)。
這樣,該環(huán)回口就會始終處于開啟狀態(tài)。
執(zhí)行“show evnet manager history events”命令,會顯示成功執(zhí)行的事件信息,包括其編號、事件ID、狀態(tài)、觸發(fā)時間、事件類型和執(zhí)行的腳本等內(nèi)容。
例如,SLA功能可以追送目標(biāo)IP的信息。執(zhí)行“ip sla 1”,“icmpecho 10.1.1.254 sourceip 10.1.1.10”,“threshold 2000”,“timeout 2000”,“frequency 2”,“ip sla schedule 1 life forever start-time now”命令,啟用SLA功能,設(shè)置本地原地址和監(jiān)控的地址,配置監(jiān)控的頻率和和生效時間。
執(zhí)行“track 22 ip sla reachability”,“delay down 1 up 1”命令,追蹤其可達性,當(dāng)收到Down等事件后延遲1秒再進行報告。
執(zhí)行“event manager applet ipsla1”,“event track 22 state down”,“action 1.0 cli command"en"”,“action 2.0 cli command "guestshell run python bootflash:data/pzroute1.py"”命令,表示針對上述SLA追蹤項目的狀態(tài)來說,如果其出現(xiàn)“Down”的情況,那么就進入特權(quán)模式,并執(zhí)行名為“pzroute1.py”的腳本。
執(zhí)行“event manager applet ipsla2”,“event track 11 state up”,“action 1.0 cli command"en"”,“action 2.0 cli command "guestshell run python bootflash:data/pzroute2.py"”命令,表示針對上述SLA追蹤功能來說,如果其出現(xiàn)“Up”的情況,那么就進入特權(quán)模式,并執(zhí)行名為“pzroute2.py”的腳本。
進入Guest Shell環(huán)境,創(chuàng)建名為“pzroute1.py”的腳本,其內(nèi)容為“from cli import configure”,“configure('no ip route 0.0.0.0 0.0.0.0 10.1.1.254')”,“configure('ip route 0.0.0.0 0.0.0.0 192.168.1.100')”命令,其作用是取消原有的默認(rèn)網(wǎng)關(guān),并指定新的路由信息。
創(chuàng)建名為“pzroute2.py”的腳本,其內(nèi)容為“from cli import configure”,“configure('no ip route 0.0.0.0 0.0.0.0 10.1.1.100')”,“configure('ip route 0.0.0.0 0.0.0.0 192.168.1.254)”命令,其作用是恢復(fù)原有的默認(rèn)網(wǎng)關(guān),并取消上述新指定的路由信息。
這樣,根據(jù)SLA的狀態(tài)信息,就可以分別執(zhí)行對應(yīng)的腳本。
例如,如果網(wǎng)關(guān)出現(xiàn)故障,就會啟用新的路由信息。執(zhí)行“show ip sla summary”命令,顯示SLA的狀態(tài)信息。執(zhí)行“show track”命令,顯示追蹤的狀態(tài)信息。
對于GuestShell來說,其是運行在底層的Linux上的,對于Linux來說,可以利用計劃任務(wù)執(zhí)行周期性的操作。
例如,執(zhí)行“event manager applet schedu”,“event timer cron cronentry "15 * * * 1-5"”,“action 1.0 cli command"enable"”,“action 1.1 cli command "guestshell run python bootflash:data/src/openportpy"”命令,創(chuàng)建名稱為“schedu”的事件,從周一到周五每個小時的第15分鐘執(zhí)行一次該事件,作用是進入特權(quán)模式,執(zhí)行上述名為“openport.py”的腳本。