المحتويات

المقدمة

معلومات أساسية

تكوين خادم Linux

تكوين DHCP

متطلبات خادم HTTP

تلميحات استكشاف المشكلات وإصلاحها

مكنت مسحاج تخديد أن يحصل عنوان مع DHCP

التحقق من عمل خادم HTTP

كيف تبدأ ztp؟

تهيئة ZTP يدويا

تمهيد الموجه باستخدام iPXE

التشغيل التلقائي بعد التثبيت

معلومات ذات صلة

المقدمة

يصف هذا المستند تلميحات أستكشاف المشكلات وإصلاحها لعمليات النشر الأولى للإمداد دون لمس (ZTP).

وقد استحدثت ZTP للحد من التفاعل البشري في توفير أجهزة XR. يستخدم ZTP تنفيذ بيئة تنفيذ ما قبل التمهيد (iPXE).

معلومات أساسية

يمكن ل ZTP القيام بما يلي:

- تحديث التكوين التلقائي: تنزيل تكوين XR وتطبيقه بعد تثبيت الصورة

- تنفيذ البرنامج النصي: قم بتنزيل ملفات البرنامج النصي المعرفة من قبل المستخدم وتنفيذها. يمكن تنفيذ أساليب/وظائف مختلفة كجزء من تنفيذ البرنامج النصي:

- تحديث حزم متعددة

- تثبيت SMU

- التحقق

- يحدد eXR أي من الإجراءات سيتم إجراؤه استنادا إلى محتويات السطر الأول في الملف

- إذا كان الملف يبدأ ب !! يشير IOS XR إلى ملف تكوين ويقوم بتنفيذ apply_config.

- وبالمثل، الملفات التي تبدأ ب #! /bin/bash أو #! /bin/sh أو #!/usr/bin/python يشير إلى ملف برنامج نصي، وقم بتنفيذ البرنامج النصي.

- يتم تقديم الدعم ل Python من خلال eXR 6.2.2

- يدعم eXR iPXE بروتوكول نقل الملفات المبسط (TFTP) وبروتوكول نقل الملفات (FTP) وبروتوكول نقل النص التشعبي (HTTP).

- بروتوكول نقل النص التشعبي الآمن (HTTPS) غير معتمد لأنه لا يمكنه توقع أي توقيع يتم التحقق منه.

تكوين خادم Linux

PXE هو تحسين عبر PXE يتطلب TFTP/FTP/HTTP لتنزيل الصورة/التكوين ويستخدم بروتوكول التكوين الديناميكي للمضيف (DHCP) للحصول على/توفير المعلومات الخاصة بالصورة والتكوين.

تكوين DHCP

في مثال لاحق، هناك مراجعة لالتقاط حزمة لتأكيد عملية DHCP.

متطلبات خادم HTTP

يجب أن يكون خادم HTTP قابلا للوصول إليه من واجهة Mgmt Ethernet.

تلميحات استكشاف المشكلات وإصلاحها

عند إعداد خادم 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

Interface MgmtEth 0/RP0/CPU0/0

Ipv4 address dhcp

Shut/no shut

التحقق من عمل خادم HTTP

- جرب أن http://<ip-servername>يعمل.

- افتح متصفح لاسم عنوان/خادم IP.

إذا فشل 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 يدويا

أستخدم أمر CLI بدء ZTP الخاص ب EXEC لاستدعاء ZTP.  بشكل افتراضي، تكون الواجهة المستخدمة ل ZTP هي MGMTEth. لبدء هذه العملية على واجهات أخرى، أستخدم هذا الخيار:

ZTP initiate interface <type> <number> <cr>

أو

Ztp initiate <cr>

تمهيد الموجه باستخدام iPXE

1. من Calvados، بدأت ال reload CLI أمر:

يتسبب هذا الأمر في إعادة تحميل الموجه، والذي يؤدي إلى بدء تشغيل iPXE.

ملاحظة: يتم تفسير المعلومات من فئة المستخدم على أنها خيار مكون بشكل غير صحيح بسبب خطأ في Wireshark.

2. يقوم الموجه بتهيئة اكتشاف DHCP، لاحظ أن فئة المستخدم يتم تعبئتها بخيار iPXE:

3. يتضمن عرض DHCP من الخادم اسم ملف التمهيد في الخيار 67:

4. يقوم الموجه ببدء تنزيل الصورة:

5. بمجرد تنزيل الصورة بنجاح، يبدأ تثبيت الصور على الجهاز.

6. بمجرد تمهيد الموجه بنجاح مع الصورة التي تم تنزيلها، فإنه يبدأ طلبا آخر من DHCP:

في هذا الاكتشاف، لاحظ أن معلومات فئة المستخدم تتضمن *.exr-config. بما أن ال DHCP يكون شكلت أن إما يرجع config مبرد أو نص برمجي (أي آخر عبارة في etc/dhcp/dhcpd.conf).

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;

معلومات ذات صلة

- 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/