■河南 郭建偉
例如在CSR1000V上執行“show ve”命令,在返回信息顯示“Cisco IOS XE Software,Version 16.06.03”信息,說明其采用的就是IOS-XE系統。執行“config t”命令,進入全局配置模式。執行“iox”命令,啟用容器化功能。執行“show iox”命令,顯示虛擬服務的全局狀態,以及虛擬化的限制信息。執行“inter virtualPortGroup 0”,“ip address 192.168.1.254 25 5.255.255.0”,“ip nat inside”命令,創建一個虛擬端接口組,為其指定具體的IP,并進行內部地址轉換。執行“interface gigabitEthernet1”,“ip nat outside”命令,針對指定的物理端口,執行外部地址轉換。
執行“ip route 0.0.0.0 0.0.0.0 192.168.1.254”命令,設置默認的網關地址,讓外部設備可以順利訪問網絡。執行“ip access-list extended PAT”“permit ip 192.168.1.0 0.0.255 any”命令,創建指定名稱的ACL列表,允許容器訪問。執行“ip nat inside source list PAT interface g1 overload”命令,啟用內部原地址轉換的動態NAT,其中的“overload”參數表示啟用端口復用,允許容器通過指定的物理端口訪問外部網絡。
執行“guestshell enable VirtualPortGroup 0 guest-ip 192.168.1.1 name-server 114.114.114.114”命令,為Guest Shell容器指定IP地址和DNS服務器地址。這樣,容器就可以通過上述網關來訪問外部網絡。當Guest Shell容器被激活之后,執行“guestshell”命令,進入該容器中,可以執行各種Linux命令了。例如,執行“pwd”命令,顯示當前路徑等。執行“sudo yum install git”命令,來安裝Git。執行“git clone https://github.com/xxx”之類的命令,來安裝所需的腳本,這里的“xxx”為具體的腳本下載路徑。如果執行“guestshell disable”命令,可以停止容器。執行“guestshell destroy”命令,可以刪除Guest Shell容器。
當然,也可以使用SSH方式登錄Guest Shell,其默認的SSH服務處于開啟狀態。
例如,執行“ip nat inside source static tcp 192.168.1.1 22 interface GigabitEthe rnet1 9222”命令,針對針對容器執行靜態的地址轉換,將Guest Shell的TCP 22端口映射到外部的TCP 9222端口上。
但是,Guest Shell默認是禁止使用密鑰登錄SSH,需要使用公鑰進行驗證。例如在客戶端的SecureCRT中點擊菜單“工具”→“創建公鑰”項,在向導窗口(如圖1)中的“密鑰類型”列表中選擇“RSA”項,點擊“下一步”按鈕,在“通行短語”欄中輸入密碼,用來加密私鑰。

圖1 創建公鑰向導界面

圖2 設置SSH連接屬性
在下一步窗口中輸入密鑰長度,之后產生公鑰信息。選擇“標準公鑰和VanDuke私鑰模式”項,點擊瀏覽按鈕,選擇保存路徑。點擊完成按鈕,得到所需的公鑰。打開得到的公鑰文件,復制公鑰信息。在Guest Shell中的根目錄下執行“vi.ssh/authorized_keys”命令,打開認證文件,將其中的原始密鑰信息刪除,粘貼上述公鑰信息。
這樣,就可以在客戶端上的SecureCRT創建新的連接項目,輸入目標設備地址,在“鑒權”欄中確保選擇“公鑰”項(如圖2),點擊“屬性”按鈕,選擇“使用全局公鑰設置”項,選擇上述公鑰文件。之后利用該連接項目,連接目標設備,在彈出提示窗口中點擊“接受并保存”按鈕,輸入上述通行短語,就可以通過SSH連接到Guest Shell容器中。
為了便于向Guest Shell上傳腳本文件,可以在Guest Shell中執行“sudo yum-y install lrzsz”命令。安裝文件傳輸小工具。執行“rz”和“sz”命令,可以上傳和下載較小的文件。
順便說一下,如果想使用上述公鑰直接登錄路由器,可以在路由器中執行“ip ssh public-chain”,“username xxx”,“keystring”命令,粘貼上述公鑰,其中的“xxx”為具體的用戶名。執行“exit”命令返回。執行“do show run”命令,在“ip sshpublic-chain”欄中顯示公鑰的哈希值。在SecureCRT中新建一個連接,輸入路由器的IP,在“鑒權”欄中確保選擇“公鑰”項,之后就可以利用該公鑰直接登錄到路由器管理界面。
在Guest Shell中內置了Python模塊,并且提供了CLI Python Module功能。因此,就可以很快捷的運行Python腳本,對IOS-XE進行管理和配置。在Guest Shell中執行“python”命令,在“>>>”提示符下執行“from cli import configure,configurep”命令,加載“configure”和“configurep”模塊,兩者的區別在于后者可以自動打印結果,其余的完全一致。就可以使用CLI Python Module功能了。
例如,執行“result=configure('route eigrp 10 0')”命令,“print(result)”命令,就可以顯示執行成功的信息,并返回列表,包含相應命令的結果信息,這其實就是一個Python對象。如果需要執行多個命令,可以采用換行符來實現。例如執行“cmds="route eigrp 100 etwork 1.1.1.0 0.0.0.0 area 0"”,“result=configure(cmds)”之類的命令來實現,其中的“”為換行符,用來分隔多個命令。利用“configure”只可以運行和配置相關的命令,利用“execute”只可以運行執行模式的命令。
例如執行“from cli im port execute,executep”“r esule=execute('show ip protocols')”,“print(resu lt)”命令,可以顯示詳細的協議配置信息。注意,“execute”只能執行一個命令。對于“cli”和“clip”模塊來說,可以執行各種命令,不區分配置模式和執行模式。執行“from cli import cli,clip”命令,導入所需模塊。執行“clip("show run")”,“clip("show version;sh ow ip eigrp interface")”,“clip("configure terminal;interface Gigabitthernet 1;no shutdown")”之類的執行,可以顯示返回結果。對于多命令來說,使用分號進行分隔。執行“exit()”命令,返回Guest Shell提示符。
執行“sudo pip install requests”命令,安裝Requests模塊,利用其可以構建所有的HTTP請求,執行各種網絡操作。
執行“python”,“import requests”命令,導入Requests模塊,執行“r=requests.get('http://www.xxx.com')”,“print(r)”命令,顯示請求的結果信息。為了提高執行效率,可以執行各種Python腳本。
例如,執行“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))”行,其作用是顯示所有的端口信息,并針對其分別設置描述信息并將其打開。
在路由器中執行“guestshell run python bootflash:data/openport.py”之類的命令,就可以運行上述腳本,假設腳本保存在“bootflash:data”目錄。
對于EEM(即Embedded Event Manager,內嵌事件管理)來說,同樣支持Python腳本。EEM其實是設備內嵌的自動化工具,支持各種事件。
例如,對于SLA路由追蹤來說,可以對目標IP進行追蹤,追蹤其是否可達/抖動/延時等狀態。如果發現存在問題的話,就會結合Track實現冗余靜態路由的切換等。
您可以將Python腳本注冊為EEM策略,這樣,當觸發特定的事件時就會執行對應的Python腳本。
例如在路由器全局配置模式下執行“interface lookback 9”,“ip address 10.1.1.9 255.255.255”之類的命令,創建一個環回口。
執行“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 ”命令,創建名為“interdown”的EEM策略,其作用是如果發現syslog日志中出現上述信息后,就說明該環回口處于shutdown狀態。
之后進入“enable”特權模式,并運行指定的腳本。
指定環回口狀態變動的信息,進入Guest Shell環境,執行“vi openport.py.”命令,輸入“from cli import configure”,“configure("interface Lokoback9 no shutdown")”行,其作用是是將指定的環回口設置為“no shutdown”狀態。
這樣,該環回口就會始終處于開啟狀態。
執行“show evnet manager history events”命令,會顯示成功執行的事件信息,包括其編號、事件ID、狀態、觸發時間、事件類型和執行的腳本等內容。
例如,SLA功能可以追送目標IP的信息。執行“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功能,設置本地原地址和監控的地址,配置監控的頻率和和生效時間。
執行“track 22 ip sla reachability”,“delay down 1 up 1”命令,追蹤其可達性,當收到Down等事件后延遲1秒再進行報告。
執行“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追蹤項目的狀態來說,如果其出現“Down”的情況,那么就進入特權模式,并執行名為“pzroute1.py”的腳本。
執行“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追蹤功能來說,如果其出現“Up”的情況,那么就進入特權模式,并執行名為“pzroute2.py”的腳本。
進入Guest Shell環境,創建名為“pzroute1.py”的腳本,其內容為“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')”命令,其作用是取消原有的默認網關,并指定新的路由信息。
創建名為“pzroute2.py”的腳本,其內容為“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)”命令,其作用是恢復原有的默認網關,并取消上述新指定的路由信息。
這樣,根據SLA的狀態信息,就可以分別執行對應的腳本。
例如,如果網關出現故障,就會啟用新的路由信息。執行“show ip sla summary”命令,顯示SLA的狀態信息。執行“show track”命令,顯示追蹤的狀態信息。
對于GuestShell來說,其是運行在底層的Linux上的,對于Linux來說,可以利用計劃任務執行周期性的操作。
例如,執行“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"”命令,創建名稱為“schedu”的事件,從周一到周五每個小時的第15分鐘執行一次該事件,作用是進入特權模式,執行上述名為“openport.py”的腳本。