Konfigurasi Jaringan Di Ubuntu Dengan Netplan
Pada suatu hari, saya ingin melakukan konfigurasi sederhana di server Ubuntu. Saya ingin mengubah yang sebelumnya menggunakan DHCP menjadi alamat statis dan memakai DNS yang saya tentukan. Seperti biasanya, saya segera melakukan pencarian di Google. Namun, semakin banyak membaca hasil pencarian yang muncul, saya semakin bingung apa yang harus dilakukan. Saya menemukan beberapa kata kunci seperti NetworkManager, systemd-networkd, dan Netplan, namun tidak mendapatkan penjelasan yang berarti mengenai seperti apa hubungan mereka dan mana yang harus saya pakai. Saya pun melakukan sedikit riset untuk mencari tahu jawaban ini.
Konfigurasi Jaringan Klasik
Setelah bootloader selesai dikerjakan, sistem operasi harus menjalankan sebuah program pertama yang berperan untuk menyiapkan komponen sistem operasi lainnya. Pada distro Linux modern, program pertama ini umumnya adalah systemd. Komponen yang menangani jaringan di systemd adalah systemd-networkd. Walaupun demikian, masih ada juga distro yang tidak memakai systemd secara default seperti Alpine Linux yang menggunakan OpenRC.
Untuk mengaktifkan jaringan di Alpine Linux, saya perlu membuat file /etc/network/interfaces
dengan isi seperti berikut ini:
Setelah itu, ada beberapa alternatif perintah yang dapat saya berikan untuk mengaktifkan konfigurasi ini. Bila saya hanya ingin mengaktifkan jaringan eth0
, saya dapat memberikan perintah seperti:
Alternatif lainnya, untuk mengatifkan seluruh kartu jaringan yang ada, saya dapat memberikan perintah:
atau
Setelah ini, saya sudah bisa memakai jaringan dengan baik.
Bagaimana bila saya tidak ingin menggunakan DHCP dan ingin memberikan pengaturan secara statis? Saya bisa mengubah isi /etc/network/interfaces
menjadi seperti berikut ini:
Untuk mengatur DNS server yang akan dipakai, saya dapat membuat file /etc/resolv.conf
dengan isi seperti berikut ini:
Setelah itu, saya men-restart jaringan dengan perintah seperti berikut ini:
Sangat sederhana dan mudah dimengerti, bukan? Walaupun demikian, pengaturan seperti ini tidak disarankan lagi di sistem operasi seperti Ubuntu modern. Bila saya melihat isi file /etc/network/interfaces
di Ubuntu, saya akan menemukan bahwa file tersebut tidak lagi berisi konfigurasi selain komentar peringatan seperti:
Untuk /etc/resolv.conf
, walaupun terdapat nilai konfigurasi nameserver
, beberapa baris pertama-nya berisi komentar peringatan seperti berikut ini:
Ini berarti bila saya menemukan panduan jaringan Linux yang melakukan pengaturan dengan menulis ke dua file tersebut, saya harus segera mencari ulang lagi panduan baru yang lebih tepat untuk sistem operasi Ubuntu yang saya pakai.
Konfigurasi Jaringan Dengan NetworkManager
NetworkManager adalah sebuah utilitas yang diciptakan untuk mempermudah menangani koneksi jaringan di Linux. Utilitas ini lebih sering digunakan oleh distro untuk desktop. Sebagai contoh, pada saat saya melakukan konfigurasi jaringan di control center di Ubuntu (secara GUI), konfigurasi yang dipakai adalah konfigurasi untuk NetworkManager. Ini adalah default untuk Ubuntu versi desktop. Pada versi server, pengaturan jaringan dilakukan oleh systemd-networkd tanpa melalui NetworkManager.
NetworkManager sebenarnya tidak tergantung pada systemd-networkd. Untuk membuktikannya, saya akan melakukan instalasi NetworkManager di Alpine Linux yang secara bawaan tidak menggunakan systemd. Untuk itu, saya memberikan perintah berikut ini di Alpine Linux:
Setelah instalasi selesai, saya dapat menjalankan NetworkManager dengan memberikan perintah berikut ini:
Walaupun umumnya lebih sering digunakan untuk GUI dengan menggunakan nm-connection-editor
atau network-manager-applet
, saya juga bisa mengakses NetworkManager di terminal dengan menggunakan nmcli
.
Untuk melihat perangkat jaringan apa saja yang dikelola oleh NetworkManager, saya dapat memberikan perintah:
Baris yang berwarna abu-abu dengan status unmanaged
menunjukkan perangkat tersebut tidak dikelola oleh NetworkManager.
Salah satu contoh dimana NetworkManager menyederhanakan konfigurasi jaringan adalah saya dapat menentukan DNS global yang akan dipakai. NetworkManager akan memantau perubahan di jaringan dan mengisi nilai /etc/resolv.conf
sesuai dengan yang saya berikan walaupun nilainya telah berubah (misalnya akibat pengaturan dari DHCP). Untuk menentukan DNS global, saya akan membuat file /etc/NetworkManager/conf.d/dns-servers.conf
dengan isi seperti berikut ini:
Kemudian, saya memberikan perintah:
Sekarang, bila saya membuka file /etc/resolv.conf
, saya akan menemukan isi seperti:
Terlihat bahwa isi file ini kini di-”kelola” oleh NetworkManager. Ini juga berarti saya tidak perlu (dan tidak seharusnya) mengubah file /etc/resolv.conf
secara langsung lagi.
Karena saya ingin melakukan konfigurasi pada sistem operasi Ubuntu untuk server yang tidak menggunakan NetworkManager, saya tidak dapat mengikuti panduan dari artikel yang menyebutkan tool seperti nmcli
atau nmtui
.
Konfigurasi Jaringan Dengan systemd-networkd
Pada sistem operasi yang menggunakan systemd, komponen jaringan biasanya ditangani oleh networkd. Sebagai contoh, pada sistem operasi Ubuntu untuk server (seperti yang disediakan oleh cloud platform), saya akan menemukan file konfigurasi untuk setiap perangkat jaringan di /etc/systemd/networks
. Kenapa harus berbeda dari desktop? Kenapa desktop harus menggunakan NetworkManager? Hal ini karena pada sistem operasi desktop, pengguna akan sering melakukan perubahan jaringan seperti melakukan koneksi Wifi ke access point baru, melakukan tethering, dan sebagainya. Walaupun systemd-networkd lebih baru, ia tidak memiliki dukungan GUI seperti NetworkManager. Memaksa pengguna untuk mengetikkan file konfigurasi hanya untuk melakukan koneksi ke Wifi baru bukanlah sesuatu yang user friendly. Namun lain halnya di sisi server: tidak ada GUI disini sehingga menulis file konfigurasi dan mengetikkan perintah di terminal adalah hal sehari-hari.
systemd-networkd tidak memiliki CLI yang lengkap seperti nmcli
yang dipakai NetworkManager. Ia juga tidak memiliki GUI untuk melakukan pengaturan konfigurasi secara visual. Satu-satunya yang bisa saya lakukan adalah memberikan perintah networkctl
untuk melihat perangkat apa saja yang dikelola oleh systemd-networkd:
Baris berwarna hijau dengan status configured
menunjukkan bahwa perangkat tersebut dikelola oleh systemd-networkd.
Khusus untuk DNS, systemd memiliki komponen yang disebut sebagai resolved. Pada Ubuntu untuk desktop, salah satu bagian yang cukup membingungkan adalah walaupun jaringan dikelola oleh NetworkManager, DNS tetap ditangani oleh systemd-resolved. Sesungguhnya ini adalah “fitur” dari NetworkManager. Bila /etc/resolv.conf
adalah symbolic link ke /run/systemd/resolve/stub-resolv.conf
atau terdapat nilai dns=systemd-resolved
di file konfigurasinya, maka NetworkManager tidak akan menimpa file /etc/resolv.conf
. Sebagai gantinya, ia akan mengatur DNS di systemd-resolved
untuk perangkat tersebut.
Untuk melihat informasi DNS yang dipakai oleh systemd-resolved
, saya dapat menggunakan perintah:
Karena server Ubuntu yang saya pakai menggunakan networkd, sebenarnya saya bisa mengikuti tutorial di artikel yang menggunakan systemd-networkd. Walaupun demikian, pada kondisi tertentu, konfigurasi yang sudah saya buat suatu saat bisa “hilang” atau “berubah” sendiri. Hal ini karena Ubuntu memiliki sebuah abstraksi lebih tinggi lagi berupa sebuah utilitas buatan Canonical yang disebut sebagai Netplan.
Konfigurasi Jaringan Dengan Netplan
Berbeda dengan NetworkManager atau systemd-networkd, Netplan bukanlah layanan jaringan. Netplan hanya sebuah tool untuk menghasilkan konfigurasi untuk NetworkManager atau systemd-networkd berdasarkan konfigurasi tunggal yang ditulis format YAML. Dengan demikian, pengguna hanya perlu mempelajari sintaks konfigurasi YAML dari Netplan tanpa harus menyentuh konfigurasi NetworkManager ataupun systemd-networkd secara langsung. Untuk berpindah dari NetworkManager ke systemd-networkd (dan sebaliknya), pengguna cukup memberikan nilai NetworkManager
atau networkd
ke renderer
.
File konfigurasi Netplan dapat dijumpai di folder /etc/netplan
. Pada sistem operasi Ubuntu untuk desktop, saya hanya menjumpai sebuah file dengan dengan isi seperti berikut ini:
Sesuai dengan namanya, konfigurasi di atas akan menggunakan konfigurasi dari NetworkManager apa adanya.
Pada sistem operasi Ubuntu untuk server, saya akan menemukan file YAML dengan isi seperti berikut ini:
Terlihat bahwa renderer
yang dipakai untuk versi server adalah networkd
.
Kembali ke pertanyaan awal saya, cara yang paling disarankan untuk sistem operasi Ubuntu server untuk melakukan pengaturan seperti alamat IP dan DNS adalah dengan mengubah file konfigurasi di /etc/netplan
. Oleh sebab itu, saya akan mengubah file YAML di folder tersebut menjadi seperti berikut ini:
Saya kemudian memberikan perintah berikut ini untuk mengaplikasikan file konfigurasi tersebut:
Tidak lama kemudian, saat memberikan perintah ip addr
, saya akan menemukan bahwa eth0
sudah menggunakan alamat IP 192.168.1.5
. Begitu juga saat saya memberikan perintah resolvectl
, saya akan menemukan bahwa request dari eth0
akan menggunakan DNS 8.8.8.8
dan 4.4.4.4
. Bila perubahan belum juga terjadi, saya dapat memberikan perintah ip link set eth0 down
dan ip link set eth0 up
untuk menjalankan ulang perangkat jaringan.