Cara Mengubah Server Linux Menjadi Router untuk Menangani Lalu Lintas Secara Statis dan Dinamis - Bagian 10


Seperti yang telah kita antisipasi dalam tutorial sebelumnya dari seri LFCE (Linux Foundation Certified Engineer) ini, dalam artikel ini kita akan membahas perutean lalu lintas IP secara statis dan dinamis dengan aplikasi tertentu.

Memperkenalkan Program Sertifikasi Linux Foundation

Hal pertama yang pertama, mari kita luruskan beberapa definisinya:

  1. Dengan kata sederhana, paket adalah unit dasar yang digunakan untuk mengirimkan informasi dalam jaringan. Jaringan yang menggunakan TCP/IP sebagai protokol jaringan mengikuti aturan yang sama untuk transmisi data: informasi sebenarnya dibagi menjadi paket-paket yang terbuat dari data dan alamat tujuan pengirimannya.
  2. Perutean adalah proses “memandu ” data dari sumber ke tujuan dalam jaringan.
  3. Perutean statis memerlukan serangkaian aturan yang dikonfigurasi secara manual dan ditentukan dalam tabel perutean. Aturan-aturan ini bersifat tetap dan digunakan untuk menentukan cara yang harus dilalui sebuah paket saat berpindah dari satu mesin ke mesin lainnya.
  4. Perutean dinamis, atau perutean cerdas (jika Anda mau), berarti sistem dapat mengubah secara otomatis, sesuai kebutuhan, rute yang diikuti paket.

Konfigurasi IP dan Perangkat Jaringan Tingkat Lanjut

Paket iproute menyediakan seperangkat alat untuk mengelola jaringan dan kontrol lalu lintas yang akan kita gunakan sepanjang artikel ini karena keduanya mewakili pengganti alat lama seperti ifconfig dan route.

Utilitas utama dalam rangkaian iproute disebut dengan ip. Sintaks dasarnya adalah sebagai berikut:

ip object command

Dimana objek hanya dapat berupa salah satu dari berikut ini (hanya objek yang paling sering ditampilkan – Anda dapat merujuk ke man ip untuk daftar lengkap):

  1. tautan: perangkat jaringan.
  2. addr: alamat protokol (IP atau IPv6) pada perangkat.
  3. rute: entri tabel perutean.
  4. aturan: aturan dalam database kebijakan perutean.

Sedangkan perintah mewakili tindakan tertentu yang dapat dilakukan pada objek. Anda dapat menjalankan perintah berikut untuk menampilkan daftar lengkap perintah yang dapat diterapkan pada objek tertentu:

ip object help

Misalnya,

ip link help

Gambar di atas menunjukkan, misalnya, Anda dapat mengubah status antarmuka jaringan dengan perintah berikut:

ip link set interface {up | down}

Untuk contoh perintah 'ip' lainnya, baca 10 Perintah 'ip' yang Berguna untuk Mengonfigurasi Alamat IP

Contoh 1: Menonaktifkan dan mengaktifkan antarmuka jaringan

Dalam contoh ini, kami akan menonaktifkan dan mengaktifkan eth1:

ip link show
ip link set eth1 down
ip link show

Jika Anda ingin mengaktifkan kembali eth1,

ip link set eth1 up

Daripada menampilkan semua antarmuka jaringan, kita dapat menentukan salah satunya:

ip link show eth1

Yang akan mengembalikan semua informasi untuk eth1.

Contoh 2: Menampilkan tabel routing utama

Anda dapat melihat tabel perutean utama Anda saat ini dengan salah satu dari 3 perintah berikut:

ip route show
route -n
netstat -rn

Kolom pertama pada output dari tiga perintah menunjukkan jaringan target. Output dari acara ip rute (mengikuti kata kunci dev) juga menampilkan perangkat jaringan yang berfungsi sebagai gerbang fisik ke jaringan tersebut.

Meskipun saat ini perintah ip lebih disukai daripada rute, Anda masih dapat merujuk ke man ip-route dan man rute untuk penjelasan rinci tentang sisanya dari kolom.

Contoh 3: Menggunakan server Linux untuk merutekan paket antara dua jaringan pribadi

Kami ingin merutekan paket icmp (ping) dari dev2 ke dev4 dan sebaliknya (perhatikan bahwa kedua mesin klien berada di jaringan yang berbeda). Nama masing-masing NIC, beserta alamat IPv4 terkait, diberikan di dalam tanda kurung siku.

Lingkungan pengujian kami adalah sebagai berikut:

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Mari kita lihat tabel routing di dev1 (kotak CentOS):

ip route show

lalu memodifikasinya agar dapat menggunakan NIC enp0s3 dan koneksi ke 192.168.0.15 untuk mengakses host di jaringan 10.0.0.0/24:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Yang intinya berbunyi, “Tambahkan rute ke jaringan 10.0.0.0/24 melalui antarmuka jaringan enp0s3 menggunakan 192.168.0.15 sebagai gateway”.

Begitu juga di dev4 (kotak openSUSE) untuk melakukan ping ke host di jaringan 192.168.0.0/24:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Terakhir, kita perlu mengaktifkan penerusan di router Debian kita:

echo 1 > /proc/sys/net/ipv4/ip_forward

Sekarang mari kita melakukan ping:

Dan,

Untuk membuat pengaturan ini tetap ada saat boot, edit /etc/sysctl.conf pada router dan pastikan variabel net.ipv4.ip_forward disetel ke true sebagai berikut:

net.ipv4.ip_forward = 1

Selain itu, konfigurasikan NIC pada kedua klien (cari file konfigurasi dalam /etc/sysconfig/network pada openSUSE dan /etc/sysconfig/network-scripts pada CentOS – dalam kedua kasus ini disebut ifcfg-enp0s3).

Berikut file konfigurasi dari kotak openSUSE:

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Contoh 4: Menggunakan server Linux untuk merutekan paket antara jaringan pribadi dan Internet

Skenario lain di mana mesin Linux dapat digunakan sebagai router adalah ketika Anda perlu berbagi koneksi Internet dengan LAN pribadi.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Selain mengatur penerusan paket dan tabel routing statis di klien seperti pada contoh sebelumnya, kita perlu menambahkan beberapa aturan iptables di router:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Perintah pertama menambahkan aturan ke rantai POSTROUTING di tabel nat (Terjemahan Alamat Jaringan), yang menunjukkan bahwa eth0 NIC harus digunakan untuk paket keluar.

MASQUERADE menunjukkan bahwa NIC ini memiliki IP dinamis dan sebelum mengirim paket ke “dunia liar ” Internet, alamat sumber pribadi dari paket tersebut harus diubah ke IP publik router.

Dalam LAN dengan banyak host, router melacak koneksi yang ada di /proc/net/ip_conntrack sehingga mengetahui ke mana harus mengembalikan respons dari Internet.

Hanya sebagian dari keluaran:

cat /proc/net/ip_conntrack

ditunjukkan pada tangkapan layar berikut.

Dimana asal (IP pribadi kotak openSUSE) dan tujuan (Google DNS) paket disorot. Ini adalah hasil dari menjalankan:

curl linux-console.net

pada kotak openSUSE.

Saya yakin Anda sudah bisa menebaknya, router menggunakan 8.8.8.8 Google sebagai server nama, yang menjelaskan mengapa tujuan paket keluar mengarah ke alamat tersebut.

Catatan: Paket masuk dari Internet hanya diterima jika paket tersebut merupakan bagian dari koneksi yang sudah ada (perintah #2), sedangkan paket keluar diperbolehkan “keluar bebas ” (perintah #3).

Jangan lupa untuk membuat aturan iptables Anda tetap ada dengan mengikuti langkah-langkah yang diuraikan di Bagian 8 – Konfigurasikan Firewall Iptables dari seri ini.

Perutean Dinamis dengan Quagga

Saat ini, alat yang paling banyak digunakan untuk perutean dinamis di Linux adalah quagga. Hal ini memungkinkan administrator sistem untuk mengimplementasikan, dengan server Linux yang relatif berbiaya rendah, fungsi yang sama yang disediakan oleh router Cisco yang kuat (dan mahal).

Alat itu sendiri tidak menangani perutean, melainkan memodifikasi tabel perutean kernel saat alat tersebut mempelajari rute baru terbaik untuk menangani paket.

Karena ini adalah cabang dari zebra, sebuah program yang pengembangannya dihentikan beberapa waktu lalu, karena alasan historis, program ini mempertahankan perintah dan struktur yang sama dengan zebra. Itulah sebabnya Anda akan melihat banyak referensi tentang zebra mulai saat ini.

Harap dicatat bahwa tidak mungkin untuk mencakup perutean dinamis dan semua protokol terkait dalam satu artikel, namun saya yakin bahwa konten yang disajikan di sini akan menjadi titik awal bagi Anda untuk mengembangkannya.

Menginstal Quagga di Linux

Untuk menginstal quagga pada distribusi pilihan Anda:

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Kita akan menggunakan lingkungan yang sama seperti Contoh #3, dengan satu-satunya perbedaan adalah eth0 terhubung ke router gateway utama dengan IP 192.168.0.1.

Selanjutnya, edit /etc/quagga/daemons dengan,

zebra=1
ripd=1

Sekarang buat file konfigurasi berikut.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

dan tambahkan baris ini (ganti nama host dan kata sandi pilihan Anda):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Catatan: ripd.conf tersebut adalah file konfigurasi untuk Protokol Informasi Perutean, yang menyediakan informasi kepada router tentang jaringan mana yang dapat diakses. dicapai dan seberapa jauh (dalam hal jumlah lompatan) mereka.

Perhatikan bahwa ini hanyalah salah satu protokol yang dapat digunakan bersama dengan quagga, dan saya memilihnya untuk tutorial ini karena kemudahan penggunaannya dan karena sebagian besar perangkat jaringan mendukungnya, meskipun memiliki kelemahan dalam meneruskan kredensial dalam teks biasa. Oleh karena itu, Anda perlu memberikan izin yang sesuai ke file konfigurasi:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Contoh 5: Menyiapkan quagga untuk merutekan lalu lintas IP secara dinamis

Dalam contoh ini kita akan menggunakan pengaturan berikut dengan dua router (pastikan untuk membuat file konfigurasi untuk router #2 seperti yang dijelaskan sebelumnya):

Penting: Jangan lupa mengulangi pengaturan berikut untuk kedua router.

Hubungkan ke zebra (mendengarkan pada port 2601), yang merupakan perantara logis antara router dan kernel:

telnet localhost 2601

Masukkan kata sandi yang ditetapkan dalam file /etc/quagga/zebra.conf, lalu aktifkan konfigurasi:

enable
configure terminal

Masukkan alamat IP dan network mask setiap NIC:

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Sekarang kita perlu terhubung ke terminal daemon RIP (port 2602):

telnet localhost 2602

Masukkan nama pengguna dan kata sandi seperti yang dikonfigurasi dalam file /etc/quagga/ripd.conf, lalu ketikkan perintah berikut yang dicetak tebal (komentar ditambahkan demi klarifikasi):

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

Catatan: Dalam kedua kasus, konfigurasi ditambahkan ke baris yang kita tambahkan sebelumnya (/etc/quagga/zebra.conf dan < b>/etc/quagga/ripd.conf).

Terakhir, sambungkan lagi ke layanan zebra di kedua router dan perhatikan bagaimana masing-masing router telah “mempelajari ” rute ke jaringan yang ada di belakang yang lain, dan langkah selanjutnya yang mana untuk mencapainya. jaringan, dengan menjalankan perintah tampilkan rute ip:

show ip route

Jika Anda ingin mencoba protokol atau pengaturan yang berbeda, Anda mungkin ingin merujuk ke situs proyek Quagga untuk dokumentasi lebih lanjut.

Kesimpulan

Pada artikel ini kami telah menjelaskan cara mengatur perutean statis dan dinamis, menggunakan router kotak Linux. Jangan ragu untuk menambahkan router sebanyak yang Anda inginkan, dan bereksperimen sebanyak yang Anda inginkan. Jangan ragu untuk menghubungi kami kembali menggunakan formulir kontak di bawah ini jika Anda memiliki komentar atau pertanyaan.