Πραγματοποιήστε ping σε όλους τους κόμβους IPv6 σε ένα κανάλι

Λίγες μέρες απομένουν μέχρι την έναρξη νέας ροής με ρυθμό "Μηχανικός Δικτύου" από το OTUS. Από αυτή την άποψη, θα θέλαμε να μοιραστούμε μαζί σας μια μετάφραση χρήσιμου υλικού για το θέμα.

Πραγματοποιήστε ping σε όλους τους κόμβους IPv6 σε ένα κανάλι

Μια σειρά από αναρτήσεις ιστολογίου σχετικά με συμβουλές και κόλπα για την αντιμετώπιση προβλημάτων ping IPv6 (ICMPv6 Echo Request/Echo Reply)

Λάβετε υπόψη ότι χρησιμοποιώ Linux (συγκεκριμένα Fedora 31), ωστόσο η σύνταξη της εντολής ping για άλλα λειτουργικά συστήματα θα πρέπει να είναι πολύ παρόμοια.

Πραγματοποιήστε ping σε όλους τους κόμβους IPv6 σε ένα κανάλι

Η πρώτη και απλούστερη συμβουλή είναι να κάνετε ping σε όλους τους κόμβους IPv6 στη σύνδεση.

Το IPv6 χρησιμοποιεί διευθύνσεις πολλαπλής διανομής για όλους τους τύπους επικοινωνιών ένα προς πολλά. Δεν υπάρχουν διευθύνσεις IPv6 εκπομπής (ή εκπομπής). Αυτό διακρίνει το IPv6 από το IPv4, όπου υπάρχουν διάφοροι τύποι διευθύνσεων εκπομπής, για παράδειγμα, η διεύθυνση "περιορισμένης εκπομπής" 255.255.255.255 [RFC1122].

Ωστόσο, υπάρχει μια διεύθυνση IPv6 "all-nodes multicast", επομένως θα τη χρησιμοποιήσουμε για να κάνουμε ping σε όλους τους κόμβους IPv6 στη σύνδεση. (Μια διεύθυνση "εκπομπής" είναι στην πραγματικότητα απλώς μια ειδικά ονομασμένη διεύθυνση πολλαπλής διανομής, η οποία είναι μια ομάδα πολλαπλής εκπομπής που περιλαμβάνει όλους τους κόμβους. Σημειώστε ότι, για παράδειγμα, το bit διεύθυνσης "ομάδα" ή πολλαπλής εκπομπής είναι ενεργοποιημένο στις διευθύνσεις εκπομπής Ethernet στο επίπεδο σύνδεσης ).

Διεύθυνση πολλαπλής διανομής IPv6 όλων των κόμβων για το κανάλι: ff02::1. ff υποδηλώνει μια διεύθυνση IPv6 πολλαπλής διανομής. Το επόμενο 0 είναι το τμήμα της σημαίας με μη καθορισμένα bits.

Επόμενο 2 ορίζει την περιοχή μιας ομάδας πολλαπλής εκπομπής. Σε αντίθεση με τις διευθύνσεις IPv4 πολλαπλής διανομής, οι διευθύνσεις IPv6 πολλαπλής διανομής έχουν ένα εύρος. Η τιμή εμβέλειας υποδεικνύει το τμήμα του δικτύου μέσω του οποίου επιτρέπεται η προώθηση ενός πακέτου πολλαπλής διανομής. Μόλις ένα πακέτο φτάσει στο όριο του καθορισμένου εύρους, το πακέτο πρέπει να απορριφθεί, ανεξάρτητα από το αν το πεδίο του Hop Count είναι μη μηδενικό. Φυσικά, εάν το πλήθος hop φτάσει στο μηδέν πριν φτάσετε στο καθορισμένο όριο της ομάδας πολλαπλής εκπομπής, επαναφέρεται επίσης αμέσως. Ακολουθεί μια πλήρης λίστα του εύρους πολλαπλής εκπομπής IPv6.

Τέλος, η ::1 καθορίζει μια ομάδα πολλαπλής διανομής όλων των κόμβων.

Σχετικά με τη διεύθυνση ff02::1 Πρέπει να σημειωθεί ότι είναι διφορούμενο. Σε έναν κεντρικό υπολογιστή IPv6 με πολλαπλές διεπαφές, όπως ένας δρομολογητής ή ένας κεντρικός υπολογιστής πολλαπλών κατοικιών, η διεύθυνση ff02::1 Δεν υπάρχει τίποτα όπου μπορείτε να καθορίσετε σε ποια διεπαφή να στέλνετε αιτήματα ηχούς ICMPv6 ή να περιμένετε να λαμβάνετε απαντήσεις ηχούς ICMPv6 όταν φτάσουν. ff02::1 είναι έγκυρη και μπορεί να χρησιμοποιηθεί σε οποιαδήποτε από τις διεπαφές και τα κανάλια που είναι συνδεδεμένα στον κόμβο πολλαπλών διεπαφών.

Έτσι, όταν κάνουμε ping σε όλους τους κόμβους IPv6 σε έναν σύνδεσμο, πρέπει να πούμε με κάποιο τρόπο και το βοηθητικό πρόγραμμα ping για το IPv6, ποια διεπαφή θα χρησιμοποιηθεί.

Καθορισμός διεπαφών - Επιλογή γραμμής εντολών

Όπως έχουμε ήδη δει, η διεύθυνση πολλαπλής διανομής όλων των κόμβων που θέλουμε να χρησιμοποιήσουμε είναι − ff02::1 - δεν παρέχει καμία πληροφορία σχετικά με τη διεπαφή για αποστολή και λήψη πακέτων αίτησης ηχούς και απάντησης ηχούς ICMPv6.

Λοιπόν, πώς καθορίζουμε τη διεπαφή που θα χρησιμοποιηθεί για τον χώρο διευθύνσεων πολλαπλής διανομής ή τον χώρο διευθύνσεων unicast Link-Local;

Ο πρώτος και πιο προφανής τρόπος είναι να το παρέχουμε ως παράμετρο στην εφαρμογή που χρησιμοποιούμε.

Για χρησιμότητα ping το παρέχουμε μέσω της επιλογής -I.

[mark@opy ~]$ ping -w 1 -I enp3s2 ff02::1
ping: Warning: source address might be selected on device other than: enp3s2
PING ff02::1(ff02::1) from :: enp3s2: 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.589 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=5.15 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=58.0 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=62.3 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=62.8 ms (DUP!)
 
--- ff02::1 ping statistics ---
1 packets transmitted, 1 received, +5 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.438/31.544/62.786/29.566 ms
[mark@opy ~]$

Χρησιμοποιώντας αυτό το multicast ping όλων των κόμβων, λάβαμε απαντήσεις από 6 κόμβους IPv6. Οι απαντήσεις προήλθαν από τις διευθύνσεις κόμβων Link-Local IPv6, ξεκινώντας με το πρόθεμα fe80::/10.

Ότι ping δεν συνεχίζει να στέλνει αιτήματα ηχούς ICMPv6 επ' αόριστον μέχρι να το διακόψουμε, συνήθως καθορίζουμε τον αριθμό των πακέτων που θα στείλουμε μέσω της επιλογής -c. Ωστόσο, αυτό αποτρέπει επίσης το ping από το να δέχεται και να εμφανίζει περισσότερες από μία απαντήσεις ηχούς ICMPv6 κατά την αποστολή ενός αιτήματος ηχούς ICMPv6 πολλαπλής εκπομπής. Αντίθετα, χρησιμοποιήσαμε την επιλογή -w για να καθορίσουμε ότι το ping θα πρέπει να ολοκληρωθεί μετά από 1 δευτερόλεπτο, ανεξάρτητα από το πόσα αιτήματα ηχούς ICMPv6 ή απαντήσεις ηχούς στάλθηκαν ή ελήφθησαν.

Ένα άλλο πράγμα που πρέπει να προσέξετε είναι (DUP!) έξοδο για τη δεύτερη και τις επόμενες απαντήσεις. Αυτά τα πακέτα αναγνωρίζονται ως διπλότυπες αποκρίσεις επειδή έχουν την ίδια τιμή ακολουθίας ICMP με τα μεμονωμένα αιτήματα ηχούς ICMPv6 που στάλθηκαν εξαρχής. Εμφανίζονται επειδή ένα αίτημα ηχούς πολλαπλής εκπομπής ICMPv6 οδηγεί σε πολλαπλές μεμονωμένες αποκρίσεις unicast. Ο αριθμός των διπλότυπων υποδεικνύεται επίσης στη σύνοψη στατιστικών στοιχείων.

Καθορισμός διεπαφών - Αναγνωριστικό ζώνης

Ένας άλλος τρόπος έκθεσης μιας διεπαφής για χρήση είναι ως μέρος μιας παραμέτρου διεύθυνσης IPv6.

Μπορούμε να δούμε ένα παράδειγμα αυτού στην έξοδο ping, όπου οι διευθύνσεις των κεντρικών υπολογιστών IPv6 που αποκρίνονται έχουν επίσης το επίθημα %enp3s2, για παράδειγμα:

64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.438 ms

Αυτή η μέθοδος καθορισμού διεπαφών περιγράφεται επίσημα στο [RFC4007], "IPv6 Defined Address Architecture". Αν και συνήθως ονομάζονται διεπαφή λειτουργικού συστήματος, στην πραγματικότητα ορίζουν κάτι πιο γενικό — μια «ζώνη» ή «πεδίο».

Ο λόγος για την ύπαρξη πιο γενικών ζωνών ή ζωνών εμβέλειας είναι ότι, όπως αναφέρθηκε στο [RFC4007], ένας κόμβος IPv6 μπορεί να έχει πολλές διαφορετικές διεπαφές IPv6 συνδεδεμένες στο ίδιο κανάλι. Αυτές οι διεπαφές είναι μέλη της ίδιας ζώνης.

Θα πρέπει να είναι δυνατή η ομαδοποίηση πολλαπλών διεπαφών σε μια ζώνη κάτω από το λειτουργικό σύστημα. Προς το παρόν δεν ξέρω αν αυτό είναι δυνατό στο Linux ή πώς να το κάνω.

Χρησιμοποιώντας το επίθημα %<zone_id>, μπορούμε να αφαιρέσουμε την επιλογή της γραμμής εντολών -I ping.

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.606 ms (DUP!)
64 bytes from fe80::7e31:f5ff:fe1b:9fdb%enp3s2: icmp_seq=1 ttl=64 time=6.23 ms (DUP!)
64 bytes from fe80::f7f8:15ff:fe6f:be6e%enp3s2: icmp_seq=1 ttl=64 time=157 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:ad79%enp3s2: icmp_seq=1 ttl=64 time=159 ms (DUP!)
64 bytes from fe80::877d:4ff:fe1a:b881%enp3s2: icmp_seq=1 ttl=64 time=161 ms (DUP!)
64 bytes from fe80::23d:e8ff:feec:958c%enp3s2: icmp_seq=1 ttl=64 time=179 ms (DUP!)
 
--- ff02::1%enp3s2 ping statistics ---
1 packets transmitted, 1 received, +7 duplicates, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.106/82.858/179.216/81.281 ms
 
[mark@opy ~]$

Σύνδεσμος-Απαντήσεις τοπικής διεύθυνσης

Από αυτό το multicast ping όλων των κόμβων λάβαμε συνολικά 6 μοναδικές απαντήσεις.

Αυτές οι απαντήσεις προήλθαν από διευθύνσεις κεντρικού υπολογιστή unicast Link-Local IPv6. Για παράδειγμα, εδώ είναι η πρώτη απάντηση:

64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms

Οι διευθύνσεις Unicast Link-Local IPv6 απαιτούνται σε όλες τις διεπαφές με δυνατότητα IPv6 [RFC4291], «Αρχιτεκτονική διευθύνσεων IP Έκδοσης 6». Ο λόγος για αυτό είναι ότι ένας κόμβος IPv6 έχει πάντα αυτόματα μια unicast διεύθυνση IPv6, την οποία μπορεί τουλάχιστον να χρησιμοποιήσει για να επικοινωνήσει με άλλους κόμβους στους άμεσα συνδεδεμένους συνδέσμους του. Αυτό περιλαμβάνει την επικοινωνία με εφαρμογές σε άλλους κεντρικούς υπολογιστές μέσω διευθύνσεων κεντρικού υπολογιστή Link-Local.

Αυτό απλοποιεί τον σχεδιασμό και την υλοποίηση πρωτοκόλλων όπως το IPv6 Neighbor Discovery και το OSPFv3. Επιτρέπει επίσης στις εφαρμογές τελικού χρήστη σε κεντρικούς υπολογιστές να επικοινωνούν μέσω του καναλιού χωρίς να απαιτείται οποιαδήποτε άλλη υποστηρικτική υποδομή IPv6 στο κανάλι. Η άμεση επικοινωνία μεταξύ συνδεδεμένων κεντρικών υπολογιστών IPv6 δεν απαιτεί δρομολογητή IPv6 ή διακομιστή DHCPv6 στη σύνδεση.

Οι τοπικές διευθύνσεις Link ξεκινούν με ένα πρόθεμα 10-bit fe80, ακολουθούμενα από 54 μηδενικά bit και στη συνέχεια ένα αναγνωριστικό διεπαφής 64 bit (IID). Στην παραπάνω πρώτη απάντηση 2392:6213:a15b:66ff είναι ένα αναγνωριστικό 64-bit.

Looped Multicast

Από προεπιλογή, τα πακέτα πολλαπλής διανομής επιστρέφονται εσωτερικά στον κόμβο που τα έστειλε. Αυτό συμβαίνει και για τη διευθυνσιοδότηση IPv6 και IPv4.

Ο λόγος για αυτήν την προεπιλεγμένη συμπεριφορά είναι ότι όταν αποστέλλονται πακέτα πολλαπλής διανομής, μπορεί επίσης να εκτελείται μια τοπική εφαρμογή πολλαπλής διανομής ακρόασης στον ίδιο τον κεντρικό υπολογιστή αποστολής, καθώς και σε κάποιο σημείο του δικτύου. Αυτή η τοπική εφαρμογή πρέπει επίσης να λαμβάνει πακέτα πολλαπλής διανομής.

Μπορούμε να δούμε αυτόν τον τοπικό βρόχο πολλαπλής διανομής στην έξοδο ping μας:

[mark@opy ~]$ ping -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::2392:6213:a15b:66ff%enp3s2: icmp_seq=1 ttl=64 time=0.106 ms
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.453 ms (DUP!)
...

Η πρώτη και ταχύτερη απόκριση (0,106 ms σε σύγκριση με 0,453 ms) προέρχεται από τη διεύθυνση Link-Local που έχει διαμορφωθεί στην ίδια τη διεπαφή enp3s2.

[mark@opy ~]$ ip addr show dev enp3s2 | grep fe80
    inet6 fe80::2392:6213:a15b:66ff/64 scope link noprefixroute 
[mark@opy ~]$

Χρησιμότητα ping παρέχει έναν τρόπο καταστολής της τοπικής πολυεκπομπής ανατροφοδότησης χρησιμοποιώντας την παράμετρο -L. Εάν στείλουμε ένα ping πολλαπλής διανομής όλων των κόμβων με αυτήν τη σημαία, τότε οι απαντήσεις περιορίζονται σε απομακρυσμένους κόμβους. Δεν λαμβάνουμε απάντηση από τη διεύθυνση Link-Local της διεπαφής αποστολής.

[mark@opy ~]$ ping -L -w 1 ff02::1%enp3s2
PING ff02::1%enp3s2(ff02::1%enp3s2) 56 data bytes
64 bytes from fe80::1d36:1fff:fefd:82be%enp3s2: icmp_seq=1 ttl=64 time=0.383 ms
 
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.467 ms (DUP!)
...

Σύνδεσμος Ping-Τοπικές διευθύνσεις

Όπως μπορείτε να μαντέψετε, οι διευθύνσεις unicast Link-Local από μόνες τους δεν παρέχουν επίσης αρκετές πληροφορίες για να υποδείξουν ποια διεπαφή θα χρησιμοποιήσετε για να τις προσεγγίσετε. Όπως και με το multicast ping όλων των κόμβων, πρέπει επίσης να καθορίσουμε τη διεπαφή ως παράμετρο γραμμής εντολών ping ή αναγνωριστικό ζώνης με διεύθυνση όταν κάνετε ping στις διευθύνσεις Link-Local.

Αυτή τη φορά μπορούμε να χρησιμοποιήσουμε -cγια τον περιορισμό του αριθμού των πακέτων και των απαντήσεων που αποστέλλονται και λαμβάνονται ping, αφού εκτελούμε unicast ping.

[mark@opy ~]$ ping -c 1 fe80::f31c:ccff:fe26:a6d9%enp3s2
 
PING fe80::f31c:ccff:fe26:a6d9%enp3s2(fe80::fad1:11ff:feb7:3704%enp3s2) 56 data bytes
64 bytes from fe80::f31c:ccff:fe26:a6d9%enp3s2: icmp_seq=1 ttl=64 time=0.395 ms
 
--- fe80::f31c:ccff:fe26:a6d9%enp3s2 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.395/0.395/0.395/0.000 ms
[mark@opy ~]$

Ping (όλες) άλλες διευθύνσεις IPv6;

Σε αυτό το άρθρο, είδαμε πώς να κάνετε ping σε όλους τους κόμβους IPv6 σε ένα κανάλι χρησιμοποιώντας μια διεύθυνση IPv6 πολλαπλής διανομής όλων των κόμβων ff02::1. Είδαμε επίσης πώς να καθορίσουμε ποια διεπαφή θα χρησιμοποιηθεί με μια διεύθυνση IPv6 πολλαπλής διανομής όλων των κόμβων, καθώς η ίδια η διεύθυνση δεν μπορεί να παρέχει αυτές τις πληροφορίες. Χρησιμοποιήσαμε είτε την επιλογή της γραμμής εντολών ping, ή καθόρισε τη διεπαφή χρησιμοποιώντας το επίθημα %<zone_id>.

Στη συνέχεια μάθαμε για τις διευθύνσεις unicast Link-Local, οι οποίες είναι διευθύνσεις που χρησιμοποιούνται για να ανταποκρίνονται σε αιτήματα ηχούς ICMPv6 multicast όλων των κόμβων.

Είδαμε επίσης πώς τα πακέτα πολλαπλής διανομής επιστρέφονται στον κόμβο αποστολής από προεπιλογή και πώς να το απενεργοποιήσετε για το βοηθητικό πρόγραμμα ping.

Τέλος, κάναμε ping σε μια μεμονωμένη διεύθυνση Link-Local χρησιμοποιώντας το επίθημα %<zone_id>, καθώς και οι ίδιες οι διευθύνσεις Link-Local δεν παρέχουν πληροφορίες σχετικά με την εξερχόμενη διεπαφή.

Τι γίνεται λοιπόν με το ping σε όλους τους άλλους κόμβους και να λάβετε τις καθολικές unicast διευθύνσεις τους (GUA) (δηλαδή τις δημόσιες διευθύνσεις τους στο Διαδίκτυο) ή τις μοναδικές τοπικές διευθύνσεις unicast (ULA); Θα το δούμε αυτό στην επόμενη ανάρτηση ιστολογίου.

Αυτό είναι όλο.

Μπορείτε να μάθετε περισσότερα για το μάθημά μας στο σημειώσεις ανοιχτής ημέρας.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο