Στον σημερινό οδηγό θα δούμε πως μπορούμε να ορίσουμε στατική IP σε Ubuntu Server έκδοσης 18.04 ή νεότερη έκδοση χρησιμοποιώντας το netplan.
Τι είναι το Netplan
Το Netplan είναι ένα βοηθητικό πρόγραμμα για εύκολη ρύθμιση παραμέτρων δικτύωσης σε ένα σύστημα Linux. Εσείς απλά δημιουργείτε μια περιγραφή (όπως θα δούμε παρακάτω) σε μορφή YAML για την διαμόρφωση που θα έχουν οι διεπαφές δικτύου και τι θα κάνουν.
Από αυτήν την περιγραφή, το Netplan θα δημιουργήσει όλες τις απαραίτητες ρυθμίσεις για το επιλεγμένο πάροχο (NetworkManager or networkd). Με αυτόν τον τρόπο μπορούν μαζικά να ρυθμίζονται οι δικτυώσεις πολλαπλών συσκευών τροφοδοτώντας τα απλά με ένα αρχείο κειμένου.
Τι διαφορά έχει το Netplan από το κλασικό ifupdown;
Το Netplan δημιουργήθηκε από ανάγκη μιας κοινής και φορητής διαμόρφωσης δικτύου του Ubuntu είτε αυτό πρόκειται για
- Cloud image,
- VPS,
- IoT
- είτε απλά για Desktop.
Δεδομένης της αυξανόμενης ανάγκης για σύνθετα σενάρια δικτύωσης (οι cloud δικτυώσεις συχνά απαιτούν σύνθετη διαρρύθμιση διαφορετικών λειτουργιών, όπως bridges πάνω από bonds μέσω VLAN κ.λπ.), και έχει αποδειχθεί σημαντικό να βελτιωθεί η ευκολία αναπαράστασης της διαμόρφωσης δικτύου.
Το Netplan υποστηρίζει απλή, δηλωτική αναπαράσταση σύνθετων διαμορφώσεων δικτύου σε αντίθεση με τους περιορισμούς του παλιού ifupdown. Το Netplan παρέχει μια πιο απλή και κομψή μορφή δήλωσης ρυθμίσεων δικτύου χρησιμοποιώντας την διαμόρφωση yaml και υποστήριξη για πολλούς backend παρόχους δικτύωσης.
Μερικές από τις αδυναμίες του ifupdown που ξεπερνιούνται με το netplan:
- Το ifupdown δεν μπορεί να αντιπροσωπεύει όλες τις διαμορφώσεις δικτύου με μια καθαρά δηλωτική σύνταξη. επομένως δεν μπορούμε να κάνουμε parsing τη διαμόρφωση. Αντίθετα όλα τα config του netplan είναι καθαρά δηλωτικά.
- Το ifupdown μπορεί να αντιπροσωπεύει διεπαφές (π.χ. eth0) με το όνομα, επομένως δεν είναι φορητό σε όλες τις συσκευές (π.χ. IoT συσκευές) ενώ το netplan μπορεί να χρησιμοποιεί αντιστοίχιση με όνομα, διεύθυνση MAC, drivers κ.λπ.
- Σε συνθήκες με σύνθετες ρυθμίσεις με το ifupdown είναι εύκολο να πέσουμε σε race condition ενώ αντίθετα το netplan έχει το πλαίσιο της ιεραρχίας στον ορισμό των διεπαφών, έτσι ώστε αυτές οι πληροφορίες να μεταφέρονται στο πρόγραμμα απόδοσης που χρησιμοποιείται και εφαρμόζεται με τη σωστή σειρά.
Static IP για production server με Netplan
Όπως στον οδηγό Ας φτιάξουμε έναν Home Server: Πρώτες ρυθμίσεις (Μέρος 2) έτσι και εδώ το σενάριο μας εδώ είναι έστω ότι έχουμε έναν Ubuntu server ή Ubuntu υπολογιστή ή μια Ubuntu εικονική μηχανή στο τοπικό μας δίκτυο και επειδή πρέπει να διαθέτει στατική IP ώστε να μην αλλάζει μετά από επανεκκίνηση, θα του δώσουμε στατική IP.
Ας ξεκινήσουμε…
Εύρεση των συσκευών δικτύου
Αφού συνδεθούμε στον server μας, πρώτα θα βρούμε την συσκευή δικτύου (ethernet) του server για την οποία θα ρυθμίσουμε μια σταθερή IP με την εντολή ip a:
ip -c a
το οποίο θα εμφανίσει κάτι σαν το παρακάτω:
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.2.9/24 brd 192.168.2.255
inet6 fd50:1d9:9fe3:1400:79fa:c48f:b679:c85 prefixlen 64 scopeid 0x0
[.....]
ether 08:00:27:36:34:ae txqueuelen 1000 (Ethernet)
[.....]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1 (Local Loopback)
[.....]
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Οπότε η συσκευή που μας ενδιαφέρει στην δική μου περίπτωση είναι η enp0s8.
Απενεργοποίηση αυτόματης διαρρύθμισης IP
Σημείωση: Το αρχείο που αποθηκεύει την netplan configuration μπορεί να έχει διαφορετικό όνομα από το
01-netcfg.yaml, όπως50-cloud-init.yaml. Επίσης, μπορεί να έχετε πολλά αρχεία στον κατάλογο. Εάν έχετε πολλά αρχεία, επιλέξτε αυτό με τον υψηλότερο αριθμό. Εάν δεν έχετε τον κατάλογο/etc/netplan, ενδέχεται να χρησιμοποιείτε ένα παλαιότερο σύστημα Ubuntu και συνιστούμε την αναβάθμιση.
Έχοντας υπόψιν ότι το netplan παρακολουθεί για αρχεία yaml στην διαδρομή /etc/netplan/*.yaml θα φτιάξουμε ένα αρχείο στη διαδρομή αυτή αφού πρώτα αφαιρέσουμε ότι υπόλειμμα αρχείων μπορεί να έχει δημιουργήσει το cloud-init όταν πήραμε τον server μας (π.χ. DigitalOcean).
Άρα το πρώτο που κάνουμε είναι να μεταφέρουμε ότι αρχεία υπάρχουν στο netplan σε κάποιον φάκελο, π.χ. του /root για να τα έχουμε ως αντίγραφα:
sudo mv /etc/netplan/* /root
Έπειτα χρησιμοποιώντας τον αγαπημένο μας vim editor
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
απενεργοποιούμε την διαχείριση του δικτύου από το cloud-init προσθέτοντας την παρακάτω γραμμή:
network: {config: disabled}
Δημιουργία αρχείου YAML για static IP
Από τις πληροφορίες που μας είχε δώσει το ip a έχουμε μια εικόνα για το τι τιμές θα πρέπει να βάλουμε στα στοιχεία όπως netmask, gateway κ.λπ. Αυτές οι τιμές είναι που πήρε ο Server μας αυτόματα από τον DHCP server (το router μας), οπότε είναι ασφαλής για να τα χρησιμοποιήσουμε ως τιμές για στατική IP.
- IP Address = 192.168.2.10
- Netmask = 255.255.255.0
- GATEWAY=192.168.2.1
- DNS Server 1 = 192.168.2.1
- DNS Server 2 = 1.1.1.1
Σημείωση: Τροποποιήστε τις τιμες ώστε να ταιριάζουν με τις απαιτήσεις του δικτύου σας.
Ξεκινάμε την δημιουργία του αρχείο με το vim, το οποίο έχει και αυτόματη διαρρύθμιση για YAML:
sudo vim /etc/netplan/01-netcfg.yaml
και προσθέτω τις παρακάτω ρυθμίσεις με βάση αυτά που είπα ότι θέλω να πάρει το δίκτυο μου:
network:
version: 2
ethernets:
enp0s8:
dhcp4: false
addresses:
- 192.168.2.10/24
routes:
- to: default
via: 192.168.2.1
nameservers:
addresses:
- 192.168.2.1
- 1.1.1.1
Συνοπτικά τι σημαίνουν όλα αυτά:
- enp0s8: Αυτό προσδιορίζει τη συγκεκριμένη ethernet interface που ρυθμίζεται
- dhcp4: false Εδώ εξασφαλίζουμε οτι δεν θα ζητήσει από το dhcp κάποια IP
- addresses: Εδώ, καθορίζετε τη static IP address και το subnet mask.
- routes: Αυτή η ενότητα ορίζει static routes («από που θα μιλάει με τον έξω κόσμο») όπου
to: defaultκαθορίζει μια default route μέσω του ρούτερ μας192.168.2.1 - nameservers: addresses: Καθορίζει τα DNS που θα χρησιμοποιήσει, π.χ. το router αλλά και το DNS της CloudFlare
ΠΡΟΣΟΧΗ: Επειδή μιλάμε για YAML αρχείο, έχει σημασία τα κενά και οι εσοχές που αφήνετε. Αν πάρετε το περιεχόμενο του αρχείου σας και το επικολλήσετε στο https://www.yamllint.com/ , θα σας εμφανίσει τυχών συντακτικά λάθη
Αφού αποθηκεύσουμε τις αλλαγές μας και κλείσουμε το vim (:x) καλούμε το netplan να δοκιμάσει τις αλλαγές (πριν τις αποθηκεύσουμε μόνιμα):
sudo netplan try
Αν ανοίξουμε ένα άλλο τερματικό και τσεκάρουμε μέσα απο τον server το internet με ένα απλό ping www.google.com και δούμε ότι δουλεύει τότε ζητάμε από το netplan να αποθηκεύσει τις αλλαγές
sudo netplan generate && sudo netplan apply
Επιβεβαίωση της Στατικής IP
To μόνο που μένει να κάνουμε είναι να επιβεβαιώσουμε ότι ο server μας έχει την στατική IP που του ορίσαμε:
ip -c a | grep "inet "
inet 127.0.0.1/8 scope host lo
inet 192.168.2.10/24 brd 192.168.2.255 scope global enp0s8
Βλέπουμε ότι η κάρτα δικτύου enp0s8 έχει πάρει την static IP 192.168.1.10
Στατική IP | Επίλογος
Στον σημερινό οδηγό, είδαμε πως διαμορφώνουμε μια στατική διεύθυνση IP στο Ubuntu server μας. Μάθαμε επίσης την χρήση του netplan, του νέου διαμορφωτή ρυθμίσεων δικτύου για Ubuntu 18.04 και νεότερες εκδόσεις.
Παραπομπές: