Netplan | Στατική IP σε Ubuntu Server

Στον σημερινό οδηγό θα δούμε πως μπορούμε να ορίσουμε στατική IP σε Ubuntu Server έκδοσης 18.04 ή νεότερη έκδοση χρησιμοποιώντας το netplan.

  1. Τι είναι το Netplan
    1. Τι διαφορά έχει το Netplan από το κλασικό ifupdown;
  2. Static IP για production server με Netplan
    1. Εύρεση των συσκευών δικτύου
    2. Απενεργοποίηση αυτόματης διαρρύθμισης IP
    3. Δημιουργία αρχείου YAML για static IP
    4. Επιβεβαίωση της Στατικής IP
  3. Στατική IP | Επίλογος

Τι είναι το 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 και νεότερες εκδόσεις.

Παραπομπές:

Σου άρεσε το άρθρο; Πες την άποψή σου... έστω και Ανώνυμα: