Inleiding
Dit document beschrijft de tips voor het opsporen en verhelpen van problemen bij eerste implementaties van Zero Touch Provisioning (ZTP).
ZTP werd geïntroduceerd om de menselijke interactie te verminderen bij de levering van XR-apparaten. ZTP gebruikt een implementatie van de PreaarsXecution Environment (iPXE).
Achtergrondinformatie
ZTP kan uitvoeren:
- Automatische configuratie van update: Downloaden en toepassen van de XR-configuratie na installatie van de afbeelding
- Script executie: Download en voer de door de gebruiker ingestelde script bestanden uit. Diverse methoden/functies kunnen worden geïmplementeerd als onderdeel van de uitvoering van het script:
- Meervoudige pakketupdate
- SMU-installatie
- Verificaties
- eXR beslist welke acties moeten worden uitgevoerd op basis van de inhoud van de eerste regel in het bestand
- Als het bestand start met !! IOS XR duidt een configuratiebestand aan en voert een_configuratie toe.
- Op dezelfde manier, de bestanden die beginnen met #! /bin/bash of #! /bin/sh of #!/usr/bin/python noemt een script bestand en voert script uit.
- Ondersteuning voor python wordt geïntroduceerd vanaf eXR 6.2.2
- eXR iPXE ondersteunt Trial File Transfer Protocol (TFTP), File Transfer Protocol (FTP) en Hypertext Transfer Protocol (HTTP).
- Hypertext Transfer Protocol Secure (HTTPS) wordt niet ondersteund omdat niet kan worden voorspeld welke handtekening moet worden geverifieerd.
Configuratie van Linux-server
iPXE is een verbetering over PXE die TFTP/FTP/HTTP voor het downloaden van beelden/configuratie vereist en Dynamic Host Configuration Protocol (DHCP) gebruikt om informatie voor de afbeelding en de configuratie te krijgen/leveren.
DHCP-configuratie
In een later voorbeeld is er een review van een pakketvastlegging om de DHCP-handeling te bevestigen.
HTTP-serververeisten
HTTP-server moet bereikbaar zijn vanaf de MGMT Ethernet-interface.
Tips bij het oplossen van problemen
Wanneer de Linux-server is ingesteld, voert u de bereikbaarheid en functionaliteit van de DHCP-server en de functionaliteit uit.
In deze instelling wordt één Linux-server gebruikt als DHCP/HTTP-server. Indien er aparte servers zijn voor deze functies, controleer deze stappen dan op alle servers, indien nodig.
[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>
Hint: Sommige lijnen waren elliptisch, gebruik -l om volledig te tonen.
[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.
Router in staat om IP-adres te verkrijgen met DHCP
Interface MgmtEth 0/RP0/CPU0/0
Ipv4 address dhcp
Shut/no shut
Controleer of HTTP Server functioneel is
- Test dat http://<ip-servernaam> werkt.
- Open een browser aan het IP adres/de servernaam.
Als DHCP of HTTP niet werkt, kunnen er firewallproblemen of bereikbaarheidsproblemen zijn.
U kunt de firewalleigenschappen op de server controleren door deze opdrachten uit te voeren of de specifieke protocollen toe te voegen:
Gebruik het bevel van IP-tabellen om firewallregels te controleren:
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
Gebruik deze firewallopdracht om een lijst te maken van de toegestane items:
[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:
Gebruik de opdrachten om poorten permanent toe te staan:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=dhcp
Opname van Packet op DHCP-server inschakelen:
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
Hoe Start ZTP?
ZTP handmatig starten
Gebruik ZTP om exec CLI opdracht te openen om ZTP aan te roepen. Standaard is de interface die voor ZTP wordt gebruikt MGMTEth. U kunt dit proces op andere interfaces starten als volgt:
ZTP initiate interface <type> <number> <cr>
OF
Ztp initiate <cr>
Start de router met iPXE
1. Start vanuit Calvados de opdracht opnieuw laden CLI:
Deze opdracht veroorzaakt een router om te herladen, wat de iPXE start.
Opmerking: De informatie van de gebruikersklasse wordt geïnterpreteerd als een misvormde optie wegens een bug in Wireshark.
2. De router start DHCP Discover op, merk op dat gebruikersklasse met iPXE optie bevolkt is:
3. De DHCP-aanbieding van de server bevat de naam van het opstartbestand in optie 67:
4. De router start het downloaden van afbeeldingen:
5. Nadat de afbeelding is gedownload, wordt de installatie van de afbeeldingen op het apparaat gestart.
6. Zodra de router met succes start met het gedownload beeld, start hij een ander DHCP-verzoek:
In deze Discover, merk op dat de gebruiker-klasse info *.exr-fig omvat. Aangezien DHCP is geconfigureerd voor het retourneren van een configuratie-bestand of scripts (d.w.z. Else statement in etc/dhcp/dhcpd.conf).
7. DHCP-server retourneert de gewenste bestandinformatie in optie 67:
8. De router downloads de configuratie:
Het script kan worden opgenomen als een reactie van de DHCP-server en kan de beeldconfiguratie/configuratie laten kopiëren. Dit kan ook worden gebruikt als een post-install script, zoals in het onderstaande voorbeeld.
Automatisering na installatie
Verschillende automatisering kan worden uitgevoerd na installatie op de eXR-software.
In dit voorbeeld, installeert dit script alle vereiste pakketten en past de Config toe. Dit is een enigszins gewijzigde versie van ztp_helper.sh. Dit script wordt opgeroepen vanaf 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;
Gerelateerde informatie