PDA

Επιστροφή στο Forum : IPv6 Tunnel Configuration



paspro
19-04-10, 17:38
Θέλοντας να πειραματιστώ με ένα IPv6 tunnel configuration σε Cisco router κατάφερα να δημιουργήσω κάτι που δουλεύει σωστά με τη βοήθεια ενός IPv6 Tunnel Broker service που προσφέρει δωρεάν η Hurricane Electric (http://www.tunnelbroker.net/). Σκέφτηκα λοιπόν να γράψω εδώ το τι έκανα ώστε αν κάποιος άλλος ενδιαφέρεται για κάτι παρόμοιο να έχει έναν βοηθητικό οδηγό. Το βασικό χαρακτηριστικό αυτού του configuration είναι ότι επιτρέπει σε κάποιον να έχει IPv6 χωρίς να χρειάζεται να τρέχει κάποια εφαρμογή σε υπολογιστή μια και όλες οι απαραίτητες ρυθμίσεις και υποστήριξη γίνεται απο τον router.

1. Το πρώτο βήμα είναι να ανοίξουμε έναν δωρεάν λογαριασμό στην Hurricane Electric (http://www.tunnelbroker.net/). Αφού ο λογαριασμός δημιουργηθεί κάνουμε login και αυτόματα μπαίνουμε στη προσωπική μας σελίδα.

2. Το δεύτερο βήμα είναι η δημιουργία ενός IPv6 tunnel με τα δικά μας στοιχεία. Αυτό γίνεται επιλέγοντας το link στο User Functions menu με τον τίτλο Create Regular Tunnel. Το μόνο στοιχείο που πρέπει να δώσουμε για τη δημιουργία του tunnel είναι το εξωτερικό IP address που έχει πάρει ο router απο τον ISP. Αν έχουμε static IP δίνουμε αυτή τη διεύθυνση και αν έχουμε dynamic IP δίνουμε την διεύθυνση που έχει πάρει ο router και στη συνέχεια θα περιγράψω τον τρόπο που μπορούμε να την αλλάζουμε κάθε φορά που αυτή αλλάζει στον router. Για χρήστες απο την Ελλάδα το service αυτό θα επιλέξει αυτόματα σαν IPv6 tunnel broker server αυτόν της Αγγλίας (216.66.80.26) ο οποίος δουλεύει μια χαρά και δεν χρειάζεται αλλαγή, αν και κάποιος μπορεί αν θέλει να επιλέξει κάποιον διαφορετικό server.

3. Στο σημείο αυτό το tunnel έχει δημιουργηθεί και είναι έτοιμο για χρήση. Για να δούμε τα στοιχεία του tunnel και τις IPv6 διευθύνσεις που έχουν οριστεί για τη προσωπική μας χρήση πρέπει απο τη προσωπική μας σελίδα στο Hurricane Electric (http://www.tunnelbroker.net/) να επιλέξουμε το tunnel που δημουργήσαμε στο κάτω μέρος της σελίδας. Αυτό το link μας οδηγεί στη σελίδα με τον τίτλο Tunnel Details. Κρατάμε στον web browser τη σελίδα αυτή ανοικτή και περνάμε στον Cisco router για τις απαραίτητες ρυθμίσεις.

4. Στον router ξεκινάμε με την ενεργοποίηση του IPv6. Στο CLI δίνουμε τις εντολές:



ipv6 unicast-routing
ipv6 cef


5. Δημιουργούμε το IPv6 Tunnel interface:



interface Tunnel0
description --- Hurricane Electric IPv6 Tunnel Broker ---
no ip address
ipv6 address <Client IPv6 address>
ipv6 enable
tunnel source Dialer0
tunnel mode ipv6ip
tunnel destination 216.66.80.26


Ότι βρίσκεται μέσα στις αγκύλες <> πρέπει να αντικατασταθεί με την αντίστοιχη τιμή που βλέπουμε στη σελίδα του web browser στο βήμα (3). Π.χ. στη περίπτωσή μου το Client IPv6 address είναι το 2001:470:1f08:9ce::2/64. Επίσης, στο παραπάνω tunnel προσδιορίσαμε ότι το Internet έρχεται απο το interface Dialer0 που ισχύει όταν έχουμε Cisco router που έχει κάνει ADSL2+ σύνδεση. Σε διαφορετική περίπτωση βάζουμε το κατάλληλο interface π.χ. tunnel source FastEthernet0 ή όποιο άλλο είναι το interface που βλέπει το Internet.

6. Ρυθμίζουμε το IPv6 routing να γίνεται μέσω του Tunnel0:



ipv6 route ::/0 Tunnel0


7. Κάνουμε τις απαραίτητες ρυθμίσεις για το τοπικό μας δίκτυο:



interface Vlan1
ipv6 address <Routed /64>::1/64
ipv6 enable
ipv6 nd prefix <Routed /64>
ipv6 nd ra lifetime 180
ipv6 nd ra interval 4


Προσοχή: στην εντολή ipv6 nd prefix δίνουμε ότι ακριβώς βλέπουμε στην σελίδα του web browser στο βήμα (3) σαν τιμή στην παράμετρο Routed /64, στη δικιά μου περίπτωση αυτό είναι 2001:470:1f09:9ce::/64. Στην εντολή ipv6 address δίνουμε την ίδια τιμή αλλά όχι σαν address prefix αλλά address με την προσθήκη του ::1/64 στο τέλος. Στη δική μου περίπτωση αυτό είναι: 2001:470:1f09:9ce::1/64.

8. Αν ο router έχει κάποιο firewall που εμποδίζει την ελεύθερη διακίνηση πακέτων μεταξύ του Internet και του router (δεν μιλάω για το LAN) τότε θα πρέπει να επιτρέψετε την κυκλοφορία πακέτων απο την παρακάτω IP address:

Tunnel Broker: 216.66.80.26 (TCP connections, Αγγλικός server)

και για όσους δεν έχουν static IP address αλλά dynamic IP address τους παρακάτω επιπλέον servers:

Tunnel Update Server: 64.62.200.2 (TCP 443, ipv4.tunnelbroker.net)
Ping Server: 66.220.2.74 (ICMP traffic)

Όσοι δεν έχουν static IP θα πρέπει να τροποποιούν το tunnel αυτόματα κάθε φορά που αλλάζει η IP στον router. Αυτό μπορούμε να το κάνουμε με έναν τρόπο αντίστοιχο του DDNS που μας προσφέρει η Hurricane Electric. Για το σκοπό αυτό κάνουμε τις παρακάτω ρυθμίσεις στον router.

A. Δημιουργούμε μια update method:



ip ddns update method ipv6_ddns
HTTP
add <update url>
remove <update url>
interval maximum 1 0 0 0


όπου το update url είναι το εξής:

https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=<a>&pass=MD5PASS&user_id=USERID&tunnel_id=TUNNELID

όπου:

MD5PASS = το MD5 hash του password που έχουμε προδιορίσει για το web site της Hurricane Electric. Αυτό μπορούμε να το βρούμε δίνοντας σε έναν υπολογιστή την εντολή:

echo -n 'yourpassword' | md5sum

και για υπολογιστές με MacOS X την εντολή:

echo -n 'yourpassword' | md5

USERID = είναι η παράμετρος UserID που βλέπουμε στην κορυφή της προσωπικής μας σελίδας όταν κάνουμε login στην Hurricane Electric. Δεν είναι το ίδιο με το όνομα χρήστη που επιλέξαμε όταν δημιουργήσαμε τον λογαριασμό μας.

TUNNELID = είναι το νούμερο που βλέπουμε στην σελίδα που μας δίνει τα στοιχεία του προσωπικού μας tunnel (βήμα 3) σαν Global Tunnel ID.

Β. Εφαρμόζουμε αυτή την update method στο interface που βλέπει το Internet π.χ. το Dialer0:



interface Dialer0
ip ddns update ipv6_ddns


C. Επειδή η μέθοδος αυτή γίνεται με HTTPS πρέπει επίσης να εισάγουμε στον router το certificate που χρησιμοποιεί η Hurricane Electric. Για τον σκοπό αυτό δίνουμε τις εντολές:



crypto pki trustpoint TunnelBroker-IPv6
enrollment terminal
revocation-check none




crypto pki authenticate TunnelBroker-IPv6
-------------------------------
-----BEGIN CERTIFICATE-----
MIICsTCCAhoCCQC8IBpX67SYlzANBgkqhkiG9w0BAQQFADCBnDELMAkGA1UEBhMC
VVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEDAOBgNVBAcTB0ZyZW1vbnQxIDAeBgNV
BAoTF0h1cnJpY2FuZSBFbGVjdHJpYywgTExDMQ0wCwYDVQQLEwRJUFY2MRkwFwYD
VQQDExB0dW5uZWxicm9rZXIubmV0MRowGAYJKoZIhvcNAQkBFgtpbmZvQGhlLm5l
dDAeFw0wNzA3MTEwMTM1MzFaFw0xNzA3MDgwMTM1MzFaMIGcMQswCQYDVQQGEwJV
UzETMBEGA1UECBMKQ2FsaWZvcm5pYTEQMA4GA1UEBxMHRnJlbW9udDEgMB4GA1UE
ChMXSHVycmljYW5lIEVsZWN0cmljLCBMTEMxDTALBgNVBAsTBElQVjYxGTAXBgNV
BAMTEHR1bm5lbGJyb2tlci5uZXQxGjAYBgkqhkiG9w0BCQEWC2luZm9AaGUubmV0
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXJHwlKn5pdUqFAZGGYI8sluS+
luS2NiihelZTXAGkE8hrlkS3Xj3AYLknddWgcoTXVMlI9LK0tEQMPZBIV/QXjXHq
HvhOb4hoT14w+VbySPRXGDqUiakJYBnNFZiIR8OA51AwM9+pUZGkNEAJYMXE+Th8
euta8zxjPS0kEgjGbwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAFVFliiWM802HDqY
loveIJOZdcnXhpQuYmnDgHHC9PAadOVcYzdkkmBoQ1APSfugkHEc7zc/vzjiMlVs
62PFaqFxi692CknGCnwyCn+Hm/PFWx+YnOyNLCji2oOYbTZre97n5iZKrOk/hJZO
y7bsxRNdmUWgy0urugi331F9y7cf
-----END CERTIFICATE-----
quit
-------------------------------


Είμαστε έτοιμοι! Δοκιμάστε σύνδεση σε έναν IPv6 server στον web broswer π.χ. ipv6.google.com και αν οι ρυθμίσεις έγιναν σωστά θα πρέπει να δείτε τη σελίδα. Καλό IPv6 web surfing!

zlimvos
20-04-10, 12:42
Πολύ καλό post, μακάρι να το είχα οταν εστησα τα δικά μου θα μου έσωζε χρόνο..
Να προσθέσω για όσους ανησυχούν για το γεγονος οτι πλεον δεν υπάρχει η έννοια ΝΑΤ και οτι ολα τα hosts εχουν πλεον IP που κοιτάει στο ipv6 internet, με την εντολή 'ipv6 inspect' μπορεις να πετυχεις ακριβώς το ίδιο επίπεδο ασφαλείας: Ολα απο έξω προς τα μέσα κλειστά εκτός αν κατι απο μέσα ανοιξε ηδη καποιο connection.
Στο παράδειγμα του φίλου, προσθέτωντας και την acl για default deny των εισερχόμενων (προσοχη τα pings toul. στο ipv6 int του router ειναι συνήθως αναγκαίο απο τον tunnel broker):
!
!

ipv6 access-list IPv6-OUTSIDE
permit icmp any any
interface Tunnel0
ipv6 traffic-filter IPv6-OUTSIDE in
!
!
ipv6 inspect name STD6 udp
ipv6 inspect name STD6 tcp
ipv6 inspect name STD6 icmp

interface FastEthernet0/0
ipv6 inspect STD6 in

(εγω το εχω με 'ipv6 inspect STD out' sto LAn kai sto tunnel μου και δειχνει να δουλευει, αλλα το παραπανω ειναι απο documentation)

paspro
20-04-10, 15:10
Ένας απλός τρόπος να βάλει κάποιος ένα τυπικό firewall στο IPv6 traffic του Tunnel είναι να χρησιμοποιήσει reflective access list ώστε να επιτρέπει inbound traffic μόνο απο συνδέσεις που έχουν δημιουργηθεί απο το LAN.



ipv6 access-list Outbound-IPv6-Filter
permit ipv6 <your IPv6 LAN range> any reflect Reflective-IPv6-Access-List

ipv6 access-list Inbound-IPv6-Filter
evaluate Reflective-IPv6-Access-List

interface Tunnel0
ipv6 traffic-filter Inbound-IPv6-Filter in
ipv6 traffic-filter Outbound-IPv6-Filter out

zlimvos
20-04-10, 15:23
Ένας απλός τρόπος να βάλει κάποιος ένα τυπικό firewall στο IPv6 traffic του Tunnel είναι να χρησιμοποιήσει reflective access list ώστε να επιτρέπει inbound traffic μόνο απο συνδέσεις που έχουν δημιουργηθεί απο το LAN.


Αυτο ακουγεται ιδια λογικη με το ipv6 inspect, ξερουμε ποια η διαφορά?

rGrds
George

paspro
21-04-10, 01:29
Φίλε George, η αλήθεια είναι πως δεν έχω καταλάβει ποτέ τι ακριβώς κάνει το "inspect" στο Cisco IOS, το οποίο βέβαια χρησιμοποιείται και για το IPv4. Κάνει κάποιο έλεγχο στα πακέτα κι αν ναι τι είδους έλεγχο κάνει;

Το firewall που εχω φτιάξει για το IPv4 χρησιμοποεί zones και class-maps, σαν αυτό που δημιουργεί το CCP/SDM. Τα class-maps του firewall είναι τύπου "inspect" αλλά και παλι δεν καταλαβαίνω τι διαφορά έχει αυτό απο ένα απλό class-map σαν αυτά που χρησιμοποιεί κανείς για QoS. Όσο για εντολές του τύπου "ip/ipv6 inspect name STD tcp" δεν έχω ιδέα τι σημαίνουν και θα ήθελα να μάθω.

Αν κάποιος γνωρίζει σχετικά θα τον παρακαλούσα να μας εξηγήσει την έννοια του "inspect" !

karavagos
21-04-10, 08:27
Σχεδόν το ίδιο είναι (το CBAC προσφέρει κάποια πράγματα παραπάνω στα τελευταία IOS), απλά οι reflexive ACLs είναι ο παλιός/φτηνός τρόπος, ενώ το inspect (CBAC) ο καινούργιος/ακριβός.

bonzo
21-04-10, 13:44
@paspro
Το firewall της Cisco (CBAC) πραγματοποιεί Stateful Packet Inspection (SPI - είναι η ορολογία που προτιμά και η ίδια η Cisco) για τα πρωτόκολλα που εμείς ορίζουμε με την εντολή ip inspect. Αυτό χονδρικά σημαίνει ότι διαθέτει μηχανισμούς με τους οποίους παρακολουθεί τα ανοικτά TCP και UDP sessions είτε αυτά έχουν ξεκινήσει από μέσα είτε από έξω (ανάλογα πως θα το ρυθμίσουμε) ανοίγοντας τα κατάλληλα ports για το returning traffic και διατηρώντας session state tables τα οποία ενημερώνονται κατά τη διάρκεια της σύνδεσης. Αυτό ισχύει μόνο για το traffic που επιτρέπει η ACL (standard or extended) που έχει εφαρμοστεί στο ιnterface που ξεκίνησε η σύνδεση, δηλαδή είναι η δεύτερη γραμμή άμυνας μετά το αρχικό ξεσκαρτάρισμα που γίνεται από τις ACL. Μπορεί για παράδειγμα να κάνει reset ή block σε TCP sessions τα οποία παρουσιάζουν πλήθος από ανολοκλήρωτες 3-way TCP handshakes τα οποία χρησιμοποιούνται σε DοS attacks (TCP-flooding) ή όταν ένα interface δεχτεί μεγάλο αριθμό από ημιτελή fragmented packets με πολύ μικρό μέγεθος που μπορεί να προκαλέσουν CPU και memory overhead κ.ά. ανάλογα με την παραμετροποίηση που θα του κάνεις. Τώρα το πως παρακολουθεί UDP συνδέσεις όπου δεν υπάρχουν sequence numbers όπως σε TCP, κατά προσέγγιση, χρησιμοποιώντας το χρονικό όριο (UDP idle timeout) της αναμενόμενης απάντησης για παρόμοια πακέτα από την ίδια ip address και για τα ίδια port numbers. Πρόκειται κυρίως για ένα transport/network layer firewall που λειτουργεί και σαν application layer firewall αφού πραγματοποιεί Ιnspection και στα πρωτόκολλα http, ftp, tftp κ.λπ Από εκεί και πέρα, η λογική του security μπορεί να είναι interface-based ή zone-based. Για να μη γίνομαι κουραστικός απλά θα παραπέμψω σε βιβλιογραφία για λεπτομέρειες:

CCSP SNRS Exam Certification Guide
* By Greg Bastien, Sara Nasseh, Christian Degu.
* Published by Cisco Press
http://www.papasotiriou.gr/product.ebook.asp?pfid=1086781&prid=295393

CCNP ISCW Official Exam Certification Guide, 3rd Edition
# By Brian Morgan, Neil Lovering.
# Published by Cisco Press
http://www.papasotiriou.gr/product.ebook.asp?pfid=1582326&prid=836572

Τώρα, οι κάθε είδους maps είναι απλά ένας τρόπος να ομαδοποιήσεις παραμέτρους τις οποίες έτσι μαζικά μπορείς να εφαρμόσεις κατά περίπτωση π.χ. QoS, security, VPN, routing κ.λπ. Η λογική είναι ακριβώς η ίδια και αφορά ομαδοποίηση παραμέτρων, το μόνο που αλλάζει είναι το όνομα, το περιεχόμενο και η σύνταξη των επιμέρους εντολών φυσικά, ανάλογα τη χρησιμότητα πχ. class-maps, route-maps, crypto-maps, policy-maps.

paspro
21-04-10, 16:44
bonzo, ευχαριστώ για την απάντησή σου!

paspro
27-04-10, 05:47
Έκανα λίγο διάβασμα σχετικά το με inspection και νομίζω ότι ο σωστός τρόπος για firewall στο Tunnel0 με τη βοήθεια του inspection είναι ο παρακάτω:



ipv6 inspect name IPv6-Inspection tcp
ipv6 inspect name IPv6-Inspection udp
ipv6 inspect name IPv6-Inspection icmp

ipv6 access-list WAN-to-Tunnel-Allowed-Traffic
permit icmp any any

interface Tunnel0
ipv6 inspect IPv6-Inspection out
ipv6 traffic-filter WAN-to-Tunnel-Allowed-Traffic in

bonzo
27-04-10, 10:42
Δεν υπάρχει καμία ACL inbound στο inside interface ή outbound στο outside (tunnel) interface άρα επιτρέπονται τα πάντα από μέσα προς τα έξω. Το firewall θα παρακολουθεί τα πακέτα που χρησιμοποιούν τα πρωτόκολλα tcp, udp και icmp για sessions που έχουν ξεκινήσει από μέσα. Το firewall θα επιτρέψει το returning traffic για τα τρία αυτά πρωτόκολλα αλλά η inbound ACL στο tunnel interface μόνο για το icmp αν η επικοινωνία έχει ξεκινήσει από την άλλη πλευρά. Λογικά δεν θα επιτρέψει το firewall απάντηση από την πλευρά σου σε icmp messages. Αν θέλεις να συμβαίνει αυτό θα πρέπει να οριστεί στο tunnel interface με κατεύθυνση outbound μια ACL του τύπου:

ipv6 access-list Tunnel-to-WAN-Allowed-Traffic
permit icmp any any echo
permit icmp any any echo-reply
permit icmp any any source-quench
permit icmp any any unreachable
permit icmp any any time-exceeded
permit tcp any any
permit udp any any
deny ip any any log

Αν αυτό είναι το ζητούμενο, είσαι εντάξει.

paspro
27-04-10, 12:39
Νομίζω ότι έχεις δίκιο. Θα μπορούσα όμως να επιτρέπω ICMP traffic απο το Tunnel στο WAN σαν απάντηση σε επικοινωνία που έχει ξεκινήσει απο έξω αν απλά βγάλω το inspection του ICMP, δηλαδή σβήσω την εντολή:



ipv6 inspect name IPv6-Inspection icmp


Έτσι δεν είναι;

@ ADSLgr.com All rights reserved.