簡介
本文檔介紹首次部署零接觸調配(ZTP)的故障排除提示。
引入ZTP是為了減少提供XR裝置的人際互動。ZTP使用預引導執行環境(iPXE)的實現。
背景資訊
ZTP可以執行:
- 自動配置更新:映像安裝後下載並應用XR配置
- 指令碼執行:下載並執行使用者定義的指令碼檔案。各種方法/函式可作為指令碼執行的一部分實現:
- 多個包更新
- SMU安裝
- 驗證
- eXR根據檔案中第一行的內容決定要執行的操作
- 如果檔案以!!開頭IOS XR表示配置檔案並執行apply_config。
- 同樣,以#開頭的檔案!/bin/bash或#!/bin/sh 或#!/usr/bin/python表示指令碼檔案,並執行指令碼執行。
- eXR 6.2.2引入了對python的支援
- eXR iPXE支援簡單式檔案傳輸通訊協定(TFTP)、檔案傳輸通訊協定(FTP)和超文字傳輸通訊協定(HTTP)。
- 不支援安全超文本傳輸協定(HTTPS),因為它無法預測要驗證哪個簽名。
Linux伺服器配置
iPXE是對PXE的增強功能,它要求TFTP/FTP/HTTP進行映像/配置下載,並使用動態主機配置協定(DHCP)來獲取/提供映像和配置的資訊。
DHCP配置
在稍後的示例中,將檢查資料包捕獲以確認DHCP操作。
HTTP伺服器要求
必須可從管理乙太網介面訪問HTTP伺服器。
疑難排解提示
設定Linux伺服器後,執行DHCP/HTTP伺服器可達性和功能檢查。
在此設定中,一個Linux伺服器用作DHCP/HTTP伺服器。如果有用於這些功能的獨立伺服器,請根據需要在所有伺服器上驗證這些步驟。
[root@xxxxxxxxxx]# service dhcpd status
Redirecting to /bin/systemctl status dhcpd.service
dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2017-05-29 10:30:59 PDT; 15h ago
Docs: man:dhcpd(8)
man:dhcpd.conf(5)
Main PID: 26913 (dhcpd)
Status: "Dispatching packets..."
CGroup: /system.slice/dhcpd.service
└─26913 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
<SNIP>
提示:某些行是橢圓形,使用 — l可顯示全行。
[root@xxxxxxxx]# service httpd status
Redirecting to /bin/systemctl status httpd.service
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2017-05-26 05:50:30 PDT; 3 days ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 28088 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
Process: 11036 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 28095 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─11037 /usr/sbin/httpd -DFOREGROUND
├─11038 /usr/sbin/httpd -DFOREGROUND
├─11039 /usr/sbin/httpd -DFOREGROUND
├─11040 /usr/sbin/httpd -DFOREGROUND
├─11041 /usr/sbin/httpd -DFOREGROUND
├─26998 /usr/sbin/httpd -DFOREGROUND
├─27426 /usr/sbin/httpd -DFOREGROUND
├─27427 /usr/sbin/httpd -DFOREGROUND
├─27428 /usr/sbin/httpd -DFOREGROUND
├─27889 /usr/sbin/httpd -DFOREGROUND
└─28095 /usr/sbin/httpd -DFOREGROUND
May 26 05:50:30 xxxxx systemd[1]: Starting The Apache HTTP Server...
May 26 05:50:30 xxxxx systemd[1]: Started The Apache HTTP Server.
May 27 03:16:01 xxxxx systemd[1]: Reloaded The Apache HTTP Server.
May 28 03:37:01 xxxxx systemd[1]: Reloaded The Apache HTTP Server.
使路由器能夠通過DHCP獲取IP地址
Interface MgmtEth 0/RP0/CPU0/0
Ipv4 address dhcp
Shut/no shut
驗證HTTP伺服器是否正常工作
如果DHCP或HTTP無法正常工作,則可能存在防火牆問題或可達性問題。
要檢查伺服器上的防火牆屬性,請執行以下命令或新增特定協定:
使用IP tables命令驗證防火牆規則:
Iptables –L –n
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:67 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
使用此防火牆命令列出允許的條目:
[root@xxxxxxxxx ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp2s0f0
sources:
services: dhcp dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
使用命令永久允許埠:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=dhcp
在DHCP伺服器上啟用資料包捕獲:
tcpdump –i <interface id> port (bootpc & bootps & port http) –s 0(buffer size) –w <dest. File name>
ex: tcpdump -i enp2s0f0 port 67 or port 68 or port 80 -s 0 -w iPXEboot.pcap
如何啟動ZTP?
手動啟動ZTP
使用ZTP initiate exec CLI命令呼叫ZTP。 預設情況下,用於ZTP的介面為MGMTEth。要在其它介面上啟動此進程,請使用此選項:
ZTP initiate interface <type> <number> <cr>
或
Ztp initiate <cr>
使用iPXE啟動路由器
1.從Calvados啟動reload CLI命令:
此命令會導致路由器重新載入,從而啟動iPXE引導。
附註:由於Wireshark中存在錯誤,使用者類資訊被解釋為Malformed選項。
2.路由器啟動DHCP發現,請注意iPXE選項填充了使用者類:
3.來自伺服器的DHCP提供包括選項67中的引導檔名:
4.路由器啟動映像下載:
5.映像成功下載後,開始在裝置上安裝映像。
6.路由器使用下載的映像成功啟動後,會啟動另一個DHCP請求:
在此發現中,請注意user-class info includes *.exr-config。因為DHCP配置為返回Config file或Script(即etc/dhcp/dhcpd.conf)中的Else語句。
7. DHCP伺服器返回選項67中所需的檔案資訊:
8.路由器下載配置:
指令碼可以作為DHCP伺服器的響應包括在內,並讓它們複製映像/配置。 這也可以用作安裝後指令碼,如下例所示。
安裝後自動化
在eXR軟體的安裝後可執行各種自動化。
在本例中,此指令碼安裝所有必需的包並應用配置。這是經過微幅修改的ztp_helper.sh版本。 此指令碼從xr-linux-shell呼叫:
RP/0/RP0/CPU0:NCS-5502-A#more disk0:/ztp/ztp_helper_file.sh
Wed May 31 00:55:54.529 UTC
#!/bin/bash
################################################################################
# Install config and additional packages
################################################################################
source /disk0:/ztp/ztp_helper.sh
export HTTP_SERVER=http://10.10.10.10
export RPM_PATH=images
export CONFIG_PATH=images
#Config
export INITIAL_CONFIG=NCS-5502-A.cfg
export FINAL_CONFIG=NCS-5502-A.cfg
#Packages
K9SEC_RPM=ncs5500-k9sec-2.2.0.0-r612.x86_64.rpm
MCAST_RPM=ncs5500-mcast-2.0.0.0-r612.x86_64.rpm
ISIS_RPM=ncs5500-isis-1.1.0.0-r612.x86_64.rpm
OSPF_RPM=ncs5500-ospf-1.1.0.0-r612.x86_64.rpm
MGBL_RPM=ncs5500-mgbl-3.0.0.0-r612.x86_64.rpm
MPLS_RPM=ncs5500-mpls-2.1.0.0-r612.x86_64.rpm
MPLSTE_RPM=ncs5500-mpls-te-rsvp-2.2.0.0-r612.x86_64.rpm
function download_config(){
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${CONFIG_PATH}/${FINAL_CONFIG} -O /harddisk:/new-config 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading system configuration ###"
else
printf "### Downloading system configuration complete ###";
fi
}
function apply_config(){
# Applies initial configuration
printf "### Applying initial system configuration ###";
xrapply_with_reason "Initial ZTP configuration" /harddisk:/new-config 2>&1;
printf "### Checking for errors ###";
local config_status=$(xrcmd "show configuration failed");
if [[ $config_status ]]; then
echo $config_status
printf "!!! Error encounter applying configuration file, review the log !!!!";
fi
printf "### Applying system configuration complete ###";
}
function install_pkg(){
#Download packages
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${K9SEC_RPM} -O /harddisk:/$K9SEC_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $K9SEC_RPM ###"
else
printf "### Downloading $K9SEC_PKG complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${MCAST_RPM} -O /harddisk:/$MCAST_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $MCAST_RPM ###"
else
printf "### Downloading $MCAST_RPM complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${ISIS_RPM} -O /harddisk:/$ISIS_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $ISIS_RPM ###"
else
printf "### Downloading $ISIS_RPM complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${OSPF_RPM} -O /harddisk:/$OSPF_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $OSPF_RPM ###"
else
printf "### Downloading $OSPF_RPM complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${MGBL_RPM} -O /harddisk:/$MGBL_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $MGBL_RPM ###"
else
printf "### Downloading $MGBL_RPM complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${MPLS_RPM} -O /harddisk:/$MPLS_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $MPLS_RPM ###"
else
printf "### Downloading $MPLS_RPM complete ###";
fi
printf "Downloading Packages"
ip netns exec tpnns /usr/bin/wget ${HTTP_SERVER}/${RPM_PATH}/${MPLSTE_RPM} -O /harddisk:/$MPLSTE_RPM 2>&1
if [[ "$?" != 0 ]]; then
printf "### Error downloading $MPLSTE_RPM ###"
else
printf "### Downloading $MPLSTE_RPM complete ###";
fi
xrcmd "install update source /harddisk:/ $K9SEC_RPM $MCAST_RPM $ISIS_RPM $OSPF_RPM $MGBL_RPM $MPLS_RPM $MPLSTE_RPM" 2>&1
local complete=0
while [ "$complete" = 0 ]; do
complete=`xrcmd "show install active" | grep k9sec | head -n1 | wc -l`
printf "Waiting for k9sec package to be activated"
sleep 5
done
rm -f /harddisk:/$K9SEC_RPM /harddisk:/$MCAST_RPM /harddisk:/$MCAST_RPM /harddisk:/$ISIS_RPM /harddisk:/$OSPF_RPM /harddisk:/$MGBL_RPM /harddisk:/$MPLSTE_RPM /harddisk:/$MPLS_RPM
printf "### XR PACKAGE INSTALL COMPLETE ###"
}
printf "Start Auto provision"
install_pkg;
download_config;
apply_config;
相關資訊