English · Ελληνικά
Δύο γραφεία, ένα κρυπτογραφημένο tunnel μέσω του δημόσιου internet — σαν να μοιράζονταν ένα switch. Το χτίζουμε με τον μοντέρνο τρόπο: ένα route-based tunnel IKEv2 (VTI) πάνω στο οποίο μπορείς να κάνεις route και να παρακολουθείς σαν κάθε interface, όχι ένα legacy crypto-map που δεν μπορείς. Με την παγίδα NAT-exemption που χαλάει κάθε πρώτη προσπάθεια.
Ένα site-to-site VPN κάνει δύο LAN υποκαταστημάτων να συμπεριφέρονται σαν ένα δίκτυο πάνω στο ανοιχτό internet, με τα πάντα ανάμεσα στους routers κρυπτογραφημένα. Το IPsec κάνει το crypto σε δύο φάσεις: το IKE (θα χρησιμοποιήσουμε το μοντέρνο IKEv2) κάνει authenticate τους peers και διαπραγματεύεται κλειδιά, μετά το ESP κρυπτογραφεί τα πραγματικά δεδομένα. Ο παλιός τρόπος να κατευθύνεις κίνηση μέσα του ήταν ένα crypto map με ένα ACL «ποια κίνηση να κρυπτογραφηθεί» κολλημένο στο interface WAN — άκαμπτο, δύσκολο να κάνεις route πάνω του, και μαρτύριο στο troubleshooting.
Ο μοντέρνος τρόπος, και αυτό που χτίζει αυτό το post, είναι ένα route-based VPN χρησιμοποιώντας Virtual Tunnel Interface (VTI). Το tunnel γίνεται ένα πραγματικό interface Tunnel0: δείχνεις ένα route προς αυτό, ή ακόμα και τρέχεις OSPF πάνω του, και ό,τι στέλνει προς τα εκεί ο πίνακας routing κρυπτογραφείται αυτόματα. Συμπεριφέρεται σαν το interface που είναι — το βλέπεις στο show ip interface brief, το παρακολουθείς, και κάνεις dynamic routing. Έτσι πρέπει να χτίζονται τα site-to-site VPN σε κάθε μοντέρνο IOS. Το ένα πράγμα που χαλάει κάθε πρώτη προσπάθεια — το NAT που τρώει την κίνηση VPN — παίρνει τη δική του ενότητα.
01
Πρώτα οι δύο routers πρέπει να συμφωνήσουν πώς θα προστατέψουν την ίδια τη διαπραγμάτευση και να αποδείξουν ποιοι είναι. Proposal (αλγόριθμοι), policy, keyring (το κοινό μυστικό), και ένα profile που δένει την ταυτότητα του peer με εκείνο το κλειδί.
# 1. Τι crypto προσφέρουμε για να προστατέψουμε το κανάλι IKE; R1(config)# crypto ikev2 proposal PROP-1 R1(config-ikev2-proposal)# encryption aes-cbc-256 R1(config-ikev2-proposal)# integrity sha256 R1(config-ikev2-proposal)# group 14 # DH group 14 (2048-bit) R1(config-ikev2-proposal)# exit R1(config)# crypto ikev2 policy POL-1 R1(config-ikev2-policy)# proposal PROP-1 R1(config-ikev2-policy)# exit # 2. Το pre-shared key, δεμένο με το public IP του PEER R1(config)# crypto ikev2 keyring KR-1 R1(config-ikev2-keyring)# peer BRANCH R1(config-ikev2-keyring-peer)# address 198.51.100.2 R1(config-ikev2-keyring-peer)# pre-shared-key S3cr3t-VPN-Key! R1(config-ikev2-keyring-peer)# exit # 3. Το profile: ταίριαξε τον peer, κάνε authenticate και προς τις δύο πλευρές με το keyring R1(config)# crypto ikev2 profile IKEV2-PROF R1(config-ikev2-profile)# match identity remote address 198.51.100.2 255.255.255.255 R1(config-ikev2-profile)# authentication local pre-share R1(config-ikev2-profile)# authentication remote pre-share R1(config-ikev2-profile)# keyring local KR-1 R1(config-ikev2-profile)# exit
Το IPsec δεν συγχωρεί ασυμμετρία. Το proposal (encryption, integrity, DH group), το pre-shared key, και οι διευθύνσεις identity πρέπει να ταιριάζουν και στους δύο routers — καθρεφτισμένα για τη διεύθυνση peer, πανομοιότυπα για το crypto. Μία παράμετρος που δεν ταιριάζει και το Phase 1 δεν ολοκληρώνεται ποτέ· το show crypto ikev2 sa δεν δείχνει SA και τα logs αναφέρουν αστοχία proposal ή authentication. Όταν ένα tunnel δεν ανεβαίνει, κάνε diff τα δύο configs γραμμή προς γραμμή πριν από οτιδήποτε άλλο — σχεδόν πάντα είναι ένα typo ενός χαρακτήρα στο key ή mismatch σε group/hash.
02
Τώρα όρισε πώς κρυπτογραφούνται τα πραγματικά δεδομένα (το transform set) και τύλιξέ το, μαζί με το profile IKEv2, σε ένα IPsec profile που θα αναφέρει το tunnel interface.
# Πώς προστατεύονται τα ΔΕΔΟΜΕΝΑ — AES-256 + SHA-256 HMAC, tunnel mode R1(config)# crypto ipsec transform-set TS-1 esp-aes 256 esp-sha256-hmac R1(cfg-crypto-trans)# mode tunnel R1(cfg-crypto-trans)# exit # Πακετάρισε transform set + IKEv2 profile σε ένα IPsec profile. # Με αυτό θα «προστατεύεται» το Tunnel interface. R1(config)# crypto ipsec profile IPSEC-PROF R1(ipsec-profile)# set transform-set TS-1 R1(ipsec-profile)# set ikev2-profile IKEV2-PROF R1(ipsec-profile)# exit
03
Εδώ είναι που το route-based νικά το crypto-map. Το tunnel γίνεται ένα πραγματικό interface με δικό του IP, source και destination, και IPsec protection δεμένο πάνω του. Κάνε route κίνηση προς αυτό και κρυπτογραφείται — χωρίς ACL crypto.
R1(config)# interface Tunnel0 R1(config-if)# ip address 169.254.0.1 255.255.255.252 # μικροσκοπικό tunnel /30 R1(config-if)# tunnel source GigabitEthernet0/0 # το δικό μας interface WAN R1(config-if)# tunnel destination 198.51.100.2 # public IP του peer R1(config-if)# tunnel mode ipsec ipv4 R1(config-if)# tunnel protection ipsec profile IPSEC-PROF R1(config-if)# exit # Κατεύθυνε το ΑΠΟΜΑΚΡΥΣΜΕΝΟ LAN μέσω του tunnel (static, ή τρέξε OSPF πάνω από Tunnel0) R1(config)# ip route 10.2.0.0 255.255.0.0 Tunnel0 R1(config)# end # Το R2 είναι η καθρεφτισμένη εικόνα: tunnel dest 203.0.113.1, ip 169.254.0.2, # route 10.1.0.0/16 προς Tunnel0, ίδιο crypto και ταιριαστό key.
Επειδή το Tunnel0 είναι πραγματικό interface, δεν περιορίζεσαι σε static routes. Τρέξε OSPF πάνω του και τα δύο sites ανταλλάσσουν routes δυναμικά — πρόσθεσε τρίτο subnet σε οποιαδήποτε άκρη και είναι προσβάσιμο με μηδέν αλλαγές VPN. Μπορείς επίσης να δείξεις ένα probe IP SLA μέσα στο tunnel και να κάνεις failover σε ένα backup tunnel στην απώλεια, ακριβώς όπως το dual-WAN. Αυτή η δυνατότητα σύνθεσης είναι όλος ο λόγος που τα route-based VPN αντικατέστησαν τα crypto maps: το tunnel παίζει με τους ίδιους κανόνες με κάθε άλλο interface που ήδη ξέρεις.
04
Ο λόγος νούμερο ένα που ένα φρεσκοχτισμένο tunnel «ανεβαίνει αλλά τίποτα δεν περνάει». Το edge σου κάνει ήδη PAT το LAN προς το internet — και θα κάνει ευχαρίστως NAT και την κίνηση προς το VPN, αλλοιώνοντάς τη πριν φτάσει στο tunnel. Πρέπει να εξαιρέσεις την κίνηση site-to-site από το NAT.
# Ο υπάρχων κανόνας PAT από το post του NAT χρησιμοποιεί ACL 1 για «ποιος κάνει NAT». # Πρέπει να το κάνουμε να κάνει NAT κίνηση προς internet αλλά ΟΧΙ κίνηση site-to-site. R1(config)# ip access-list extended NAT-LIST # DENY (εξαίρεσε) κίνηση προς το απομακρυσμένο site — πρέπει να έρθει ΠΡΩΤΟ R1(config-ext-nacl)# deny ip 10.1.0.0 0.0.255.255 10.2.0.0 0.0.255.255 # PERMIT ό,τι άλλο για να γίνει NAT προς το internet R1(config-ext-nacl)# permit ip 10.1.0.0 0.0.255.255 any R1(config-ext-nacl)# exit R1(config)# ip nat inside source list NAT-LIST interface GigabitEthernet0/0 overload # Τώρα η κίνηση προς 10.2.x παρακάμπτει το NAT (μπαίνει στο tunnel ανέγγιχτη)· # όλα τα υπόλοιπα ακόμα κάνουν PAT προς το internet κανονικά.
Η γραμμή deny (εξαίρεση) πρέπει να κάθεται πάνω από το permit … any — κερδίζει το πρώτο match (οι κανόνες ACL ισχύουν και εδώ). Αν το permit είναι πρώτο, η κίνηση VPN κάνει NAT και εξαφανίζεται μέσα στο tunnel αλλοιωμένη. Και αν το tunnel ήταν ήδη up και έκανε NAT πριν το διορθώσεις, μπαγιάτικες μεταφράσεις παραμένουν: τρέξε clear ip nat translation * μετά την αλλαγή αλλιώς θα ορκίζεσαι ότι ακόμα δεν δουλεύει. Αυτή η μία παγίδα ευθύνεται για τα περισσότερα tickets «το tunnel είναι up αλλά δεν μπορώ να κάνω ping μέσα από αυτό».
05
Το IPsec έχει δύο SA να επιβεβαιώσεις — Phase 1 (IKEv2) και Phase 2 (IPsec) — συν το interface και τους μετρητές πακέτων κρυπτογράφησης. Έλεγξέ τα με αυτή τη σειρά· το σπάσιμο είναι πάντα σε ένα συγκεκριμένο επίπεδο.
# 1. Το Phase 1 up; Ψάξε για READY. R1# show crypto ikev2 sa Tunnel-id Local Remote fvrf/ivrf Status 1 203.0.113.1/500 198.51.100.2/500 none/none READY # 2. Το Phase 2 up και κρυπτογραφεί πραγματικά; τα pkts encaps/decaps πρέπει να ανεβαίνουν. R1# show crypto ipsec sa | include pkts|peer|ident local ident (addr/mask): (10.1.0.0/255.255.0.0) remote ident (addr/mask): (10.2.0.0/255.255.0.0) #pkts encaps: 4021, #pkts decaps: 3998 # 3. Το tunnel interface up/up; R1# show ip interface brief | include Tunnel Tunnel0 169.254.0.1 YES manual up up # 4. End-to-end, με source το LAN (όχι το WAN IP του router!) R1# ping 10.2.0.1 source 10.1.0.1
| Συμπτωμα | Που να κοιταξεις |
|---|---|
| Κανένα IKEv2 SA / όχι READY | Mismatch Phase 1 — proposal, key, ή διεύθυνση identity. debug crypto ikev2. |
| IKEv2 READY αλλά κανένα IPsec SA | Mismatch transform-set, ή κακό config στο Tunnel0. |
| SA up, το encaps ανεβαίνει, το decaps 0 | Πρόβλημα κίνησης επιστροφής — η ΑΠΕΝΑΝΤΙ πλευρά δεν στέλνει πίσω (το route ή το NAT της). |
| SA up, καθόλου pkts | Το NAT τρώει την κίνηση (section 04), ή κανένα route δεν δείχνει στο Tunnel0. |
06
Το IPsec του RouterOS έχει την ίδια δομή δύο φάσεων· η ορολογία ευθυγραμμίζεται μόλις δεις τη χαρτογράφηση.
| MikroTik / RouterOS | Cisco IOS |
|---|---|
| /ip ipsec profile (phase 1) | crypto ikev2 proposal + policy |
| /ip ipsec peer + identity | crypto ikev2 profile + keyring |
| /ip ipsec proposal (phase 2) | crypto ipsec transform-set |
| /ip ipsec policy (ή IPsec στο interface) | crypto ipsec profile στο Tunnel0 (VTI) |
| Κανόνας Src-NAT με accept πάνω από masquerade | NAT exemption: γραμμή deny πάνω από permit |
| /ip ipsec active-peers | show crypto ikev2 sa |
Θα συναντήσεις παλιότερα configs (και μερικές συσκευές peer, μαζί με κάποια firewalls) που μιλάνε μόνο policy-based IPsec: ένα crypto map με ένα ACL «ταίριαξε αυτή την κίνηση» εφαρμοσμένο στο interface WAN, χωρίς tunnel interface. Δουλεύει, αλλά δεν μπορείς να κάνεις dynamic routing πάνω του, το monitoring είναι αδέξιο, και το troubleshooting χειρότερο. Όταν κληρονομείς ένα, συνήθως αξίζει να μεταναστεύσεις σε VTI — εκτός αν η απέναντι άκρη είναι συσκευή μόνο-policy-based, οπότε ταιριάζεις το στιλ της. Για οτιδήποτε greenfield και Cisco-προς-Cisco, το route-based VTI όπως εδώ είναι το default.
Συμπερασματα
Tunnel0 πάνω στο οποίο κάνεις route, παρακολουθείς, και τρέχεις OSPF — χωρίς ACL «interesting traffic».deny — τοποθετημένη πάνω από το permit — αποκλείει τους απομακρυσμένους προορισμούς LAN. Αυτό χαλάει σχεδόν κάθε πρώτη προσπάθεια.Τα site-to-site VPN που στηρίζονται σε static crypto maps και χειροκίνητες εξαιρέσεις NAT είναι εύθραυστα εξ ορισμού. Τα χτίζω ώστε να κάνουν dynamic routing και να κάνουν failover καθαρά αντ' αυτού, τεκμηριωμένα και παρακολουθούμενα σαν κάθε άλλο production link.
Κλεισε μια Discovery Call →