Πίσω στο blog

English  ·  Ελληνικά

MikroTik / RouterOS  ·  Οδηγος  ·  Αυγουστος 2026

WireGuard
σε MikroTik

Το RouterOS 7 έρχεται με WireGuard μέσα στον πυρήνα, και κάνει κάθε παλιότερο VPN στην πλατφόρμα να μοιάζει με σχολική εργασία. Χωρίς πιστοποιητικά, χωρίς φάσεις, χωρίς proposals — ένα interface, ένα ζευγάρι κλειδιών, και μια λίστα peers. Αυτό το post χτίζει τα δύο setups που καλύπτουν σχεδόν κάθε πραγματική ανάγκη: το τηλέφωνο και το laptop σου να καλούν το σπίτι από οπουδήποτε, και δύο γραφεία ενωμένα με ένα tunnel που επιβιώνει reboots και αλλαγές ISP.

RouterOS 7 WireGuard VPN Road Warrior Site-to-Site Remote Access

Internet UDP 13231 ΓΡΑΦΕΙΟ (RB5009) wg0 10.99.0.1/24 LAN 192.168.88.0/24 Τηλεφωνο (4G) 10.99.0.10/32 Laptop (καφε) 10.99.0.11/32 ΥΠΟΚΑΤΑΣΤΗΜΑ (hEX) wg0 10.99.0.2 LAN 192.168.20.0/24 ένα interface wg0 στο ΓΡΑΦΕΙΟ, τρεις peers — οι road-warriors παίρνουν από ένα /32, το υποκατάστημα φέρνει όλο το LAN του

Όλο το μοντέλο config του WireGuard είναι: ένα interface με ιδιωτικό κλειδί, και peers που ταυτοποιούνται με δημόσια κλειδιά. Καμία διαπραγμάτευση να κάνεις debug — αν τα κλειδιά ταιριάζουν και φτάσει UDP, δουλεύει· αν κάποιο είναι λάθος, δεν δουλεύει σιωπηλά. Αυτή η σιωπή είναι το μόνο δύσκολο κομμάτι του WireGuard, και αυτό το post σου δίνει το μονοπάτι διάγνωσης γι' αυτό.

Η έννοια που πραγματικά χρειάζεται να μάθεις είναι το allowed-address. Είναι δύο πράγματα ταυτόχρονα: ένα inbound filter («τα πακέτα από αυτόν τον peer μπορούν να διεκδικούν αυτές τις source IP») και ένας outbound πίνακας routing («τα πακέτα προς αυτές τις IP πάνε σε αυτόν τον peer»). Κάθε μπερδεμένο deployment WireGuard που έχουμε ξεμπλέξει — handshake εντάξει, καμία κίνηση — ήταν παρεξήγηση αυτού του διπλού ρόλου. Κάν' το σωστά και τα δύο setups παρακάτω είναι είκοσι λεπτά το καθένα. Αυτή είναι επίσης η μοντέρνα απάντηση στο πρόβλημα που λύνει η σειρά Cisco με GRE over IPsec — ίδια ιδέα overlay, μια δεκαετία λιγότερη τελετουργία.

Προαπαιτουμενα

01

Η Πλευρα Server — Ενα Interface, Για Παντα

Ο router του γραφείου παίρνει ένα interface wg0, μια διεύθυνση, ένα listening port, και έναν κανόνα firewall. Αυτό το κομμάτι δεν αλλάζει ξανά, όσους peers κι αν προσθέσεις.

router ΓΡΑΦΕΙΟΥ — interface + firewall, μια φορα
[admin@Office] > /interface/wireguard add name=wg0 listen-port=13231
# Το ιδιωτικό κλειδί παράγεται μόνο του. Πάρε το ΔΗΜΟΣΙΟ κλειδί — οι peers το χρειάζονται:
[admin@Office] > /interface/wireguard print
 0  name="wg0" listen-port=13231
    public-key="offApub4T8yQ0eVX2mKcR9sJ1uYw3zB5nH7dL6gF0iM="

# Δώσε διεύθυνση στο tunnel — το γραφείο είναι .1 του subnet VPN
[admin@Office] > /ip/address add address=10.99.0.1/24 interface=wg0

# Firewall (input chain, πάνω από το τελικό drop):
#   1. άφησε handshakes να μπουν από το internet, 2. αντιμετώπισε την κίνηση tunnel ως σχεδόν-έμπιστη
[admin@Office] > /ip/firewall/filter add chain=input action=accept protocol=udp dst-port=13231 comment="wireguard handshake" place-before=[find comment="drop all else"]
[admin@Office] > /interface/list/member add list=LAN interface=wg0
# Το να προσθέσεις το wg0 στη λίστα LAN ξαναχρησιμοποιεί κάθε υπάρχουσα άδεια LAN —
# οι χρήστες VPN μπορούν τώρα ό,τι μπορούν οι χρήστες LAN. Περιόρισέ το αν δεν πρέπει.
💡 Το Port Ειναι Αορατο Ετσι Κι Αλλιως

Το WireGuard δεν απαντά σε unauthenticated πακέτα — ένας scanner που δοκιμάζει το UDP 13231 παίρνει την ίδια σιωπή με ένα κλειστό port. Δεν υπάρχει banner, κανένα handshake για fingerprint, τίποτα για να καταλογογραφήσει το Shodan. Γι' αυτό ο κανόνας accept παραπάνω είναι ασφαλές να μείνει ανοιχτός σε όλο το internet, και γι' αυτό το WireGuard δεν έχει αντίστοιχο του προβλήματος SSH brute-force από το οποίο υπερασπίζεται το post του firewall: χωρίς έγκυρο κλειδί, η υπηρεσία ουσιαστικά δεν υπάρχει.

02

Road Warriors — Τηλεφωνο και Laptop

Κάθε συσκευή είναι ένας peer: το δημόσιο κλειδί της, το δικό της /32 στο subnet VPN. Το config του client το καθρεφτίζει πίσω. Τα κλειδιά δεν ταξιδεύουν ποτέ — μόνο τα δημόσια μισά ανταλλάσσονται.

ΓΡΑΦΕΙΟ — ενας peer ανα συσκευη
# Το τηλέφωνο παράγει τα δικά του κλειδιά στην εφαρμογή WireGuard· αντιγράφεις το ΔΗΜΟΣΙΟ κλειδί του
[admin@Office] > /interface/wireguard/peers add interface=wg0 name=phone-sp1r4 public-key="PhOnEpUb..." allowed-address=10.99.0.10/32
[admin@Office] > /interface/wireguard/peers add interface=wg0 name=laptop-sp1r4 public-key="LaPtOpPuB..." allowed-address=10.99.0.11/32

# allowed-address=/32 σημαίνει: αυτός ο peer μπορεί να ΕΙΝΑΙ το 10.99.0.10, και μόνο αυτό.
# Ένα κλεμμένο κλειδί laptop δεν μπορεί να μιμηθεί το υποκατάστημα ή άλλον χρήστη.
Τηλεφωνο / laptop — η πλευρα client της ιδιας συνομιλιας
[Interface]
PrivateKey = <παράγεται στη συσκευή, δεν φεύγει ποτέ από αυτήν>
Address    = 10.99.0.10/32
DNS        = 192.168.88.1

[Peer]
PublicKey  = offApub4T8yQ0eVX2mKcR9sJ1uYw3zB5nH7dL6gF0iM=   ← pubkey γραφείου
Endpoint   = office.example.gr:13231
AllowedIPs = 192.168.88.0/24, 10.99.0.0/24   ← split tunnel: μόνο κίνηση δουλειάς
# AllowedIPs = 0.0.0.0/0                     ← full tunnel: ΤΑ ΠΑΝΤΑ μέσω γραφείου

Πρόσεξε τη συμμετρία: στον client, το AllowedIPs είναι το ίδιο πεδίο διπλού ρόλου — είναι αυτό που το τηλέφωνο θα κάνει route μέσα στο tunnel. Απαρίθμησε τα subnets του γραφείου και παίρνεις split tunnel (κίνηση δουλειάς μέσω VPN, YouTube απευθείας)· απαρίθμησε 0.0.0.0/0 και η συσκευή στέλνει τα πάντα στο σπίτι — η κίνησή σου βγαίνει από το IP του γραφείου, που είναι επίσης το κλασικό setup «έμπιστο internet από εχθρικό Wi-Fi». Για να δουλέψει πραγματικά το full-tunnel, ο router του γραφείου πρέπει επίσης να κάνει masquerade το 10.99.0.0/24 προς το WAN του, ακριβώς όπως κάθε subnet LAN.

⚠ Παγιδα — Handshake OK, Κινηση Νεκρη: Ειναι Παντα το allowed-address

Η κλασική αστοχία: το last-handshake χτυπά ευτυχισμένα, το ping πεθαίνει. Τα handshakes αποδεικνύουν μόνο κλειδιά και προσβασιμότητα· η κίνηση πρέπει να περάσει και τις δύο κατευθύνσεις του ελέγχου allowed-address. Διάγνωση σε μία γραμμή η καθεμία: το ping στο LAN από το τηλέφωνο αποτυγχάνει → στο AllowedIPs του τηλεφώνου λείπει το subnet LAN (ποτέ δεν κάνει route το πακέτο μέσα στο tunnel). Το LAN δεν φτάνει το τηλέφωνο → στην εγγραφή peer του router λείπει το /32 του τηλεφώνου (οι απαντήσεις φτάνουν αλλά ρίχνονται ως «not allowed from this peer»). Κάθε ticket «το WireGuard είναι up αλλά τίποτα δεν δουλεύει» είναι μία από αυτές τις δύο γραμμές.

03

Site-to-Site — το Υποκαταστημα

Ίδια μηχανή, μεγαλύτερο allowed-address: ο peer του υποκαταστήματος φέρνει όλο το LAN του. Πρόσθεσε ένα static route σε κάθε πλευρά και τα δύο γραφεία γίνονται ένα δίκτυο.

Και οι δυο routers — peers ο ενας του αλλου
# Το ΥΠΟΚΑΤΑΣΤΗΜΑ παίρνει το δικό του wg0 (10.99.0.2/24) όπως στο section 01, μετά:
[admin@Branch] > /interface/wireguard/peers add interface=wg0 name=office public-key="offApub..." endpoint-address=office.example.gr endpoint-port=13231 allowed-address=10.99.0.0/24,192.168.88.0/24 persistent-keepalive=25s

# Το ΓΡΑΦΕΙΟ προσθέτει το υποκατάστημα — πρόσεξε ότι φέρνει ολόκληρο /24, δεν χρειάζεται endpoint:
[admin@Office] > /interface/wireguard/peers add interface=wg0 name=branch public-key="BrAnChPuB..." allowed-address=10.99.0.2/32,192.168.20.0/24

# Routes: πες σε κάθε router ότι το άλλο LAN ζει μέσω του tunnel
[admin@Office] > /ip/route add dst-address=192.168.20.0/24 gateway=wg0
[admin@Branch] > /ip/route add dst-address=192.168.88.0/24 gateway=wg0

# Από ένα PC υποκαταστήματος:
C:\> ping 192.168.88.10
Reply from 192.168.88.10: bytes=32 time=9ms TTL=126   ← δύο γραφεία, ένα δίκτυο
⚠ Παγιδα — Το persistent-keepalive Ειναι Υποχρεωτικο Πισω απο NAT

Μόνο το υποκατάστημα καλεί προς τα έξω (ξέρει το endpoint του γραφείου· το γραφείο δεν έχει κανένα ρυθμισμένο για το υποκατάστημα — το μαθαίνει από εισερχόμενα πακέτα). Αν το υποκατάστημα κάθεται πίσω από CGNAT ή οποιονδήποτε οικιακό router, η αντιστοίχιση NAT λήγει μετά από ~30–180 δευτερόλεπτα σιωπής — και τότε το γραφείο δεν μπορεί να ξεκινήσει τίποτα: τα πακέτα προς το υποκατάστημα πεθαίνουν σε ένα NAT που έχει ξεχάσει την αντιστοίχιση. Το persistent-keepalive=25s κρατά την τρύπα ανοιχτή από μέσα. Κανόνας: η πλευρά με NAT/dynamic βάζει το endpoint και το keepalive· η static πλευρά δεν βάζει κανένα από τα δύο. Ξέχασέ το και παίρνεις το τρελαντικό «δουλεύει για ένα λεπτό αφού μας κάνει ping το υποκατάστημα, μετά κουφαίνεται».

04

Επαληθευσε και Διαγνωσε Ασφαλες να το Τρεξεις

Το WireGuard αποτυγχάνει σιωπηλά εξ ορισμού — οπότε διαβάζεις μετρητές, όχι μηνύματα σφάλματος. Τρεις αριθμοί λένε όλη την ιστορία: last-handshake, rx, tx.

RouterOS — οι τρεις αριθμοι
[admin@Office] > /interface/wireguard/peers print detail
 0  name="phone-sp1r4" interface=wg0 public-key="PhOnEpUb..."
    allowed-address=10.99.0.10/32
    current-endpoint-address=94.66.58.121 current-endpoint-port=41922
    last-handshake=14s rx=48.1MiB tx=512.3MiB
ΕνδειξηΣημασια
ποτέ κανένα last-handshakeΤα κλειδιά δεν ταιριάζουν (pubkeys ανταλλάχτηκαν ή ξαναπαράχθηκαν), ή το UDP δεν φτάνει ποτέ — έλεγξε το DNS/port του endpoint και τον κανόνα input.
handshake φρέσκο, το rx ανεβαίνει, το tx ~0Η κίνησή τους σε φτάνει· η δική σου δεν μπαίνει ποτέ στο tunnel — λείπει το allowed-address/route σου για τα subnets τους.
handshake φρέσκο, το tx ανεβαίνει, το rx ~0Καθρεφτισμένη εικόνα — η απέναντι πλευρά δεν κάνει route πίσω, ή ρίχνει το source σου ως not-allowed.
το handshake μπαγιατεύει μετά από λεπτάΗ αντιστοίχιση NAT έληξε — βάλε persistent-keepalive στην πλευρά με NAT (section 03).
δουλεύει, αλλά μεγάλες μεταφορές κολλάνεMTU. Το wg0 κάνει default σε 1420· σε underlays PPPoE ή LTE δοκίμασε 1380, και το μάθημα overlay-MTU από το lab GRE ισχύει αυτολεξεί.
💡 Που Καθεται Αυτο Αναμεσα στα VPN της Πλατφορμας

Για οτιδήποτε νέο σε RouterOS 7, το WireGuard πρέπει να είναι το default: γρήγορο σε επίπεδο πυρήνα (συνήθως ξεπερνά το IPsec στο ίδιο hardware), τέσσερις εντολές ανά peer, και σιωπηλό σε scanners. Στρέψου σε IPsec/L2TP μόνο όταν η απέναντι άκρη δεν μπορεί να μιλήσει WireGuard — ένα router Cisco (δες το post IKEv2), ένας εταιρικός VPN concentrator, ή built-in clients OS στα οποία δεν μπορείς να εγκαταστήσεις εφαρμογές. Και αφού τα κλειδιά είναι όλη η ταυτότητα: το ιδιωτικό κλειδί του router είναι σε κάθε binary backup — αντιμετώπισε ανάλογα εκείνα τα αρχεία.

Βασικα Συμπερασματα

  1. Το WireGuard είναι ένα interface συν peers — καμία φάση, κανένα πιστοποιητικό. Αν τα κλειδιά ταιριάζουν και φτάσει UDP, δουλεύει· η επιφάνεια debugging είναι πραγματικά τόσο μικρή.
  2. Το allowed-address είναι φίλτρο ΚΑΙ πίνακας routing. Inbound: ποιες source IP μπορεί να χρησιμοποιήσει ένας peer. Outbound: ποιοι προορισμοί πάνε σε εκείνον τον peer. Σχεδόν κάθε «handshake εντάξει, καμία κίνηση» είναι αυτό το πεδίο.
  3. Οι road warriors παίρνουν από ένα /32· ένα site φέρνει το LAN του. Όσο πιο στενό το allowed-address, τόσο λιγότερο αξίζει ένα κλεμμένο κλειδί.
  4. Split vs full tunnel είναι μία γραμμή στον client — subnets γραφείου για split, 0.0.0.0/0 (συν masquerade του subnet VPN στον router) για τα-πάντα-μέσω-σπιτιού.
  5. Η πλευρά με NAT βάζει endpoint + persistent-keepalive=25s· η static πλευρά δεν βάζει κανένα από τα δύο. Το να ξεχάσεις το keepalive σου δίνει ένα tunnel που κουφαίνεται ανάμεσα σε συνομιλίες.
  6. Κάν' το diagnose με τρεις μετρητές — last-handshake, rx, tx — και τον πίνακα παραπάνω· το WireGuard δεν καταγράφει ποτέ σφάλμα για σένα.
  7. Σιωπηλό εξ ορισμού: καμία απάντηση χωρίς έγκυρο κλειδί σημαίνει καμία fingerprinting και καμία επιφάνεια brute-force — ασφαλές να το εκθέσεις, σε αντίθεση με όλα τα υπόλοιπα στην αλυσίδα input.

Θελεις τα sites και τους ανθρωπους σου σε ενα ασφαλες δικτυο;

Αναπτύσσω WireGuard για remote access και links site-to-site — τηλέφωνα, laptops, υποκαταστήματα, ακόμα και το NVR σε μια απομακρυσμένη βίλα — το καθένα με πρόσβαση ελάχιστου προνομίου αντί για ένα flat tunnel προς τα πάντα.

Κλεισε μια Discovery Call →