Inhoud

Inleiding

Achtergrondinformatie

Configuratie van Linux-server

DHCP-configuratie

HTTP-serververeisten

Tips bij het oplossen van problemen

Router in staat om IP-adres te verkrijgen met DHCP

Controleer of HTTP Server functioneel is

Hoe Start ZTP?

ZTP handmatig starten

Start de router met iPXE

Automatisering na installatie

Gerelateerde informatie

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

- https://xrdocs.github.io/software-management/tutorials/2016-08-26-working-with-ztp/

- https://xrdocs.github.io/software-management/tutorials/2016-07-27-ipxe-deep-dive/

- https://xrdocs.github.io/software-management/blogs/2016-10-14-ios-xr-packages-and-security/