Artikel baru: DHCP Server di Cisco IOS (konsep inti)
 
Perbaiki format: konversi Markdown ke wikitext (bold, code, tabel)
 
(2 intermediate revisions by the same user not shown)
Line 2: Line 2:
Setelah membaca artikel ini, kamu bisa:
Setelah membaca artikel ini, kamu bisa:
* menjelaskan kenapa alamat IP lebih baik dibagikan otomatis daripada diketik satu per satu;
* menjelaskan kenapa alamat IP lebih baik dibagikan otomatis daripada diketik satu per satu;
* membuat **DHCP pool** di router Cisco dan mengisi jawaban yang dibutuhkan klien;
* membuat '''DHCP pool''' di router Cisco dan mengisi jawaban yang dibutuhkan klien;
* menyisihkan alamat yang tidak boleh dibagikan **sebelum** pool dipakai;
* menyisihkan alamat yang tidak boleh dibagikan '''sebelum''' pool dipakai;
* membaca bukti bahwa alamat benar-benar sudah dipinjamkan, bukan cuma "kelihatannya jalan";
* membaca bukti bahwa alamat benar-benar sudah dipinjamkan, bukan cuma "kelihatannya jalan";
* membuat satu router melayani subnet lain lewat **relay agent** (`ip helper-address`).
* membuat satu router melayani subnet lain lewat '''relay agent''' (<code>ip helper-address</code>).


Fokus kita bukan menghafal perintah, tapi paham satu pertanyaan kunci: **pool mana yang menjawab permintaan siapa**.
Fokus kita bukan menghafal perintah, tapi paham satu pertanyaan kunci: '''pool mana yang menjawab permintaan siapa'''.


== 📍 Konteks nyata ==
== 📍 Konteks nyata ==
Line 21: Line 21:


== 🧠 Konsep singkat ==
== 🧠 Konsep singkat ==
DHCP bukan sekadar "bagi IP". Ada tiga hal yang harus kamu pisahkan dulu: **daftar alamat**, **alamat yang dilarang dibagikan**, dan **catatan pinjaman**.
DHCP bukan sekadar "bagi IP". Ada tiga hal yang harus kamu pisahkan dulu: '''daftar alamat''', '''alamat yang dilarang dibagikan''', dan '''catatan pinjaman'''.


Kalau ketiganya tercampur, gejalanya khas: klien dapat alamat aneh, dapat alamat tapi tidak bisa keluar, atau dua perangkat memakai alamat yang sama.
Kalau ketiganya tercampur, gejalanya khas: klien dapat alamat aneh, dapat alamat tapi tidak bisa keluar, atau dua perangkat memakai alamat yang sama.


=== 🔹 Empat pesan yang membentuk satu alamat ===
=== 🔹 Empat pesan yang membentuk satu alamat ===
Prosesnya sering disebut **DORA**. Empat pesan, empat peran.
Prosesnya sering disebut '''DORA'''. Empat pesan, empat peran.


| Pesan | Arah | Isi singkat |
{| class="wikitable"
|---|---|---|
! Pesan !! Arah !! Isi singkat
| DHCPDISCOVER | klien ke semua | "Ada server yang bisa meminjamkan alamat?" |
|-
| DHCPOFFER | server ke klien | "Saya punya alamat ini, mau?" |
| DHCPDISCOVER || klien ke semua || "Ada server yang bisa meminjamkan alamat?"
| DHCPREQUEST | klien ke semua | "Saya pilih tawaran dari server itu" |
|-
| DHCPACK | server ke klien | "Sah, alamat itu milikmu sampai tanggal sekian" |
| DHCPOFFER || server ke klien || "Saya punya alamat ini, mau?"
|-
| DHCPREQUEST || klien ke semua || "Saya pilih tawaran dari server itu"
|-
| DHCPACK || server ke klien || "Sah, alamat itu milikmu sampai tanggal sekian"
|}


Klien mengirim DISCOVER dari `0.0.0.0` ke `255.255.255.255` karena belum punya alamat sama sekali. Server mendengar di **UDP port 67**, klien menunggu di **UDP port 68**.
Klien mengirim DISCOVER dari <code>0.0.0.0</code> ke <code>255.255.255.255</code> karena belum punya alamat sama sekali. Server mendengar di '''UDP port 67''', klien menunggu di '''UDP port 68'''.


Selain empat pesan itu ada DHCPDECLINE (klien menemukan alamat sudah dipakai), DHCPNAK (server menolak permintaan), dan DHCPRELEASE (klien mengembalikan alamat).
Selain empat pesan itu ada DHCPDECLINE (klien menemukan alamat sudah dipakai), DHCPNAK (server menolak permintaan), dan DHCPRELEASE (klien mengembalikan alamat).


* 📊 '''Angka penting:''' port server DHCP adalah **67/UDP**, port klien **68/UDP**. Lease bawaan Cisco IOS adalah **1 hari** kalau kamu tidak menulis `lease`. Perpanjangan diminta di **50%** masa sewa (T1) dan dicoba ulang ke server mana pun di **87,5%** (T2).
* 📊 '''Angka penting:''' port server DHCP adalah '''67/UDP''', port klien '''68/UDP'''. Lease bawaan Cisco IOS adalah '''1 hari''' kalau kamu tidak menulis <code>lease</code>. Perpanjangan diminta di '''50%''' masa sewa (T1) dan dicoba ulang ke server mana pun di '''87,5%''' (T2).


=== 🔹 Tiga hal yang sering tertukar: pool, excluded, binding ===
=== 🔹 Tiga hal yang sering tertukar: pool, excluded, binding ===
Ini bagian paling penting. Banyak siswa bingung karena ketiganya terlihat "soal IP yang sama".
Ini bagian paling penting. Banyak siswa bingung karena ketiganya terlihat "soal IP yang sama".


| Istilah | Perannya | Ditulis di mana |
{| class="wikitable"
|---|---|---|
! Istilah !! Perannya !! Ditulis di mana
| Pool | daftar alamat + jawaban yang dibagikan | `ip dhcp pool <nama>` |
|-
| Excluded | lubang yang tidak boleh dibagikan | global config, di luar pool |
| Pool || daftar alamat + jawaban yang dibagikan || <code>ip dhcp pool <nama></code>
| Binding | catatan siapa meminjam apa sampai kapan | dibuat otomatis oleh server |
|-
| Excluded || lubang yang tidak boleh dibagikan || global config, di luar pool
|-
| Binding || catatan siapa meminjam apa sampai kapan || dibuat otomatis oleh server
|}


Nama pool **tidak menentukan subnet**. Yang menentukan adalah baris `network` di dalamnya. Pool bernama `LAN-SISWA` tetap bisa melayani `192.168.20.0/24` kalau `network`-nya begitu.
Nama pool '''tidak menentukan subnet'''. Yang menentukan adalah baris <code>network</code> di dalamnya. Pool bernama <code>LAN-SISWA</code> tetap bisa melayani <code>192.168.20.0/24</code> kalau <code>network</code>-nya begitu.


Sebaliknya, `ip dhcp excluded-address` adalah perintah **global**, bukan perintah di dalam pool. Ini yang sering salah tempat.
Sebaliknya, <code>ip dhcp excluded-address</code> adalah perintah '''global''', bukan perintah di dalam pool. Ini yang sering salah tempat.


* ⚠️ '''Hati-hati:''' `ip dhcp excluded-address` bukan "alamat cadangan". Alamat yang di-exclude benar-benar tidak akan pernah ditawarkan. Kalau kamu meng-exclude seluruh /24, pool akan tampak ada tapi tidak pernah membagikan apa pun.
* ⚠️ '''Hati-hati:''' <code>ip dhcp excluded-address</code> bukan "alamat cadangan". Alamat yang di-exclude benar-benar tidak akan pernah ditawarkan. Kalau kamu meng-exclude seluruh /24, pool akan tampak ada tapi tidak pernah membagikan apa pun.


=== 🔹 Siapa yang menjawab: server lokal atau relay ===
=== 🔹 Siapa yang menjawab: server lokal atau relay ===
Kalau server DHCP berada di subnet yang sama dengan klien, broadcast DISCOVER didengar langsung. Field `giaddr` bernilai nol, lalu server mencocokkan permintaan dengan **subnet di interface yang menerima broadcast**.
Kalau server DHCP berada di subnet yang sama dengan klien, broadcast DISCOVER didengar langsung. Field <code>giaddr</code> bernilai nol, lalu server mencocokkan permintaan dengan '''subnet di interface yang menerima broadcast'''.


Kalau server berada di subnet lain, router yang menerima broadcast menambahkan **giaddr**: alamat IP interface yang menerima permintaan tadi. Server memakai `giaddr` itu untuk memilih pool.
Kalau server berada di subnet lain, router yang menerima broadcast menambahkan '''giaddr''': alamat IP interface yang menerima permintaan tadi. Server memakai <code>giaddr</code> itu untuk memilih pool.


Jadi urutan berpikirnya:
Jadi urutan berpikirnya:
# klien broadcast di subnetnya;
# klien broadcast di subnetnya;
# router terdekat mengisi `giaddr` dengan alamat interface penerima;
# router terdekat mengisi <code>giaddr</code> dengan alamat interface penerima;
# server memilih pool yang `network`-nya cocok dengan `giaddr`;
# server memilih pool yang <code>network</code>-nya cocok dengan <code>giaddr</code>;
# jawaban dikirim balik ke `giaddr`, bukan ke klien langsung.
# jawaban dikirim balik ke <code>giaddr</code>, bukan ke klien langsung.


* 💡 '''Tips:''' kalau satu interface punya alamat primer dan sekunder, IOS memeriksa subnet **primer** dulu sampai alamatnya habis, baru pindah ke sekunder. Jangan heran kalau pool sekunder "diam" padahal masih kosong.
* 💡 '''Tips:''' kalau satu interface punya alamat primer dan sekunder, IOS memeriksa subnet '''primer''' dulu sampai alamatnya habis, baru pindah ke sekunder. Jangan heran kalau pool sekunder "diam" padahal masih kosong.


=== 🔹 Kenapa router perlu "titip suara" ===
=== 🔹 Kenapa router perlu "titip suara" ===
Router tidak meneruskan broadcast secara default. Artinya DISCOVER dari klien tidak akan pernah sampai ke server di gedung sebelah.
Router tidak meneruskan broadcast secara default. Artinya DISCOVER dari klien tidak akan pernah sampai ke server di gedung sebelah.


Solusinya `ip helper-address <ip-server>` di interface yang **menghadap klien**. Perintah ini membuat router mendengar broadcast DHCP di interface itu, lalu meneruskannya sebagai unicast ke server.
Solusinya <code>ip helper-address <ip-server></code> di interface yang '''menghadap klien'''. Perintah ini membuat router mendengar broadcast DHCP di interface itu, lalu meneruskannya sebagai unicast ke server.


* ⚠️ '''Hati-hati:''' `ip helper-address` harus dipasang di interface **masuk** (sisi klien), bukan interface keluar menuju server. Salah sisi = tidak ada yang diteruskan, dan biasanya tidak ada pesan error apa pun.
* ⚠️ '''Hati-hati:''' <code>ip helper-address</code> harus dipasang di interface '''masuk''' (sisi klien), bukan interface keluar menuju server. Salah sisi = tidak ada yang diteruskan, dan biasanya tidak ada pesan error apa pun.


Helper juga bukan hanya untuk DHCP. Secara bawaan ia ikut meneruskan beberapa UDP broadcast lain, seperti TFTP (69), DNS (53), time (37), NetBIOS (137–138), dan TACACS (49).
Helper juga bukan hanya untuk DHCP. Secara bawaan ia ikut meneruskan beberapa UDP broadcast lain, seperti TFTP (69), DNS (53), time (37), NetBIOS (137–138), dan TACACS (49).


* 🔥 '''Kasus nyata:''' sebuah lab SMK memasang `ip helper-address` di interface fisik `G0/0`, padahal yang menerima broadcast adalah subinterface `G0/0.20`. Akibatnya 32 PC di VLAN 20 tidak dapat alamat sama sekali selama dua hari. Guru sempat menuduh kabel dan switch rusak, padahal `show ip dhcp server statistics` di server menunjukkan **nol** paket Discover masuk. Setelah helper dipindah ke `G0/0.20`, semua PC dapat alamat dalam hitungan detik.
* 🔥 '''Kasus nyata:''' sebuah lab SMK memasang <code>ip helper-address</code> di interface fisik <code>G0/0</code>, padahal yang menerima broadcast adalah subinterface <code>G0/0.20</code>. Akibatnya 32 PC di VLAN 20 tidak dapat alamat sama sekali selama dua hari. Guru sempat menuduh kabel dan switch rusak, padahal <code>show ip dhcp server statistics</code> di server menunjukkan '''nol''' paket Discover masuk. Setelah helper dipindah ke <code>G0/0.20</code>, semua PC dapat alamat dalam hitungan detik.


== 🧩 Istilah penting ==
== 🧩 Istilah penting ==
| Istilah | Arti sederhana |
{| class="wikitable"
|---|---|
! Istilah !! Arti sederhana
| DHCP | protokol yang membagikan alamat IP dan pengaturan jaringan secara otomatis |
|-
| DHCP pool | kumpulan alamat + jawaban yang disiapkan server |
| DHCP || protokol yang membagikan alamat IP dan pengaturan jaringan secara otomatis
| `network` | baris yang menentukan subnet layanan sebuah pool |
|-
| excluded-address | alamat yang dilarang dibagikan |
| DHCP pool || kumpulan alamat + jawaban yang disiapkan server
| binding | catatan peminjaman: alamat, identitas klien, masa berlaku |
|-
| lease | masa sewa sebuah alamat |
| <code>network</code> || baris yang menentukan subnet layanan sebuah pool
| client-id | identitas klien, umumnya MAC address + tipe media |
|-
| giaddr | alamat interface router yang meneruskan permintaan |
| excluded-address || alamat yang dilarang dibagikan
| relay agent | router yang meneruskan DHCP antar-subnet |
|-
| `ip helper-address` | perintah untuk menyalakan relay di sebuah interface |
| binding || catatan peminjaman: alamat, identitas klien, masa berlaku
| default-router | gateway yang dikirim ke klien |
|-
| conflict | kondisi dua perangkat memakai alamat yang sama |
| lease || masa sewa sebuah alamat
| database agent | tempat menyimpan catatan binding agar tahan reboot |
|-
| client-id || identitas klien, umumnya MAC address + tipe media
|-
| giaddr || alamat interface router yang meneruskan permintaan
|-
| relay agent || router yang meneruskan DHCP antar-subnet
|-
| <code>ip helper-address</code> || perintah untuk menyalakan relay di sebuah interface
|-
| default-router || gateway yang dikirim ke klien
|-
| conflict || kondisi dua perangkat memakai alamat yang sama
|-
| database agent || tempat menyimpan catatan binding agar tahan reboot
|}


== 🔧 Praktik: DHCP Server di Cisco IOS ==
== 🔧 Praktik: DHCP Server di Cisco IOS ==
Kita pakai Packet Tracer. Siapkan **satu router 2911**, **satu switch 2960**, dan **dua PC**.
Kita pakai Packet Tracer. Siapkan '''satu router 2911''', '''satu switch 2960''', dan '''dua PC'''.


| Perangkat | Interface | Alamat |
{| class="wikitable"
|---|---|---|
! Perangkat !! Interface !! Alamat
| R1 | G0/0 | 192.168.10.1/24 |
|-
| Switch | Fa0/1 | ke R1 G0/0 |
| R1 || G0/0 || 192.168.10.1/24
| Switch | Fa0/2, Fa0/3 | ke PC1, PC2 |
|-
| PC1, PC2 | NIC | DHCP |
| Switch || Fa0/1 || ke R1 G0/0
|-
| Switch || Fa0/2, Fa0/3 || ke PC1, PC2
|-
| PC1, PC2 || NIC || DHCP
|}


Rencana penyisihan: `.1` untuk gateway, `.10` server, `.11` printer, `.12` access point, `.13`–`.20` CCTV dan perangkat uji. Jadi yang boleh dibagikan mulai `.21`.
Rencana penyisihan: <code>.1</code> untuk gateway, <code>.10</code> server, <code>.11</code> printer, <code>.12</code> access point, <code>.13</code>–<code>.20</code> CCTV dan perangkat uji. Jadi yang boleh dibagikan mulai <code>.21</code>.


=== 🔹 Langkah 1: alamat dan interface ===
=== 🔹 Langkah 1: alamat dan interface ===
Line 121: Line 149:
</syntaxhighlight>
</syntaxhighlight>


* 🧪 '''Uji cepat:''' `show ip interface brief` harus menampilkan `GigabitEthernet0/0` dengan status `up` dan protocol `up`. Kalau masih `administratively down`, `no shutdown` belum masuk.
* 🧪 '''Uji cepat:''' <code>show ip interface brief</code> harus menampilkan <code>GigabitEthernet0/0</code> dengan status <code>up</code> dan protocol <code>up</code>. Kalau masih <code>administratively down</code>, <code>no shutdown</code> belum masuk.


=== 🔹 Langkah 2: sisihkan alamat yang tidak boleh dibagikan ===
=== 🔹 Langkah 2: sisihkan alamat yang tidak boleh dibagikan ===
Line 129: Line 157:
</syntaxhighlight>
</syntaxhighlight>


Satu baris ini menyisihkan 20 alamat sekaligus. Tulis **sebelum** pool dibuat supaya alamat itu tidak pernah sempat ditawarkan.
Satu baris ini menyisihkan 20 alamat sekaligus. Tulis '''sebelum''' pool dibuat supaya alamat itu tidak pernah sempat ditawarkan.


* ⚠️ '''Hati-hati:''' kalau pool sudah telanjur membagikan alamat statis, memperbaiki excluded saja tidak menarik kembali alamat yang sudah dipegang klien. Kamu perlu `clear ip dhcp binding <alamat>` satu per satu, atau tunggu lease habis.
* ⚠️ '''Hati-hati:''' kalau pool sudah telanjur membagikan alamat statis, memperbaiki excluded saja tidak menarik kembali alamat yang sudah dipegang klien. Kamu perlu <code>clear ip dhcp binding <alamat></code> satu per satu, atau tunggu lease habis.


=== 🔹 Langkah 3: buat pool dan isi jawabannya ===
=== 🔹 Langkah 3: buat pool dan isi jawabannya ===
Line 145: Line 173:


Arti tiap baris:
Arti tiap baris:
* `network` menentukan subnet yang dilayani pool ini. Ini baris paling menentukan.
* <code>network</code> menentukan subnet yang dilayani pool ini. Ini baris paling menentukan.
* `default-router` adalah gateway yang akan dipasang di PC klien.
* <code>default-router</code> adalah gateway yang akan dipasang di PC klien.
* `dns-server` bisa diisi sampai **8 alamat**; klien mencoba berurutan.
* <code>dns-server</code> bisa diisi sampai '''8 alamat'''; klien mencoba berurutan.
* `domain-name` mengisi suffix domain, berguna untuk akses nama pendek.
* <code>domain-name</code> mengisi suffix domain, berguna untuk akses nama pendek.
* `lease 0 8 0` berarti 0 hari, 8 jam, 0 menit. Tanpa baris ini, bawaannya 1 hari.
* <code>lease 0 8 0</code> berarti 0 hari, 8 jam, 0 menit. Tanpa baris ini, bawaannya 1 hari.


* 📊 '''Angka penting:''' `default-router` dan `dns-server` masing-masing menerima sampai **8 alamat**. `lease` menerima format hari–jam–menit, atau kata kunci `infinite` untuk masa sewa tanpa batas.
* 📊 '''Angka penting:''' <code>default-router</code> dan <code>dns-server</code> masing-masing menerima sampai '''8 alamat'''. <code>lease</code> menerima format hari–jam–menit, atau kata kunci <code>infinite</code> untuk masa sewa tanpa batas.


Periksa hasilnya:
Periksa hasilnya:
Line 159: Line 187:
</syntaxhighlight>
</syntaxhighlight>


`show ip dhcp pool` menampilkan nama pool, total alamat, leased, dan available. `show ip dhcp binding` masih kosong karena belum ada klien yang meminjam.
<code>show ip dhcp pool</code> menampilkan nama pool, total alamat, leased, dan available. <code>show ip dhcp binding</code> masih kosong karena belum ada klien yang meminjam.


=== 🔹 Langkah 4: uji klien dan baca bukti ===
=== 🔹 Langkah 4: uji klien dan baca bukti ===
Buka PC1, masuk ke tab **Desktop → IP Configuration**, pilih **DHCP**. Tunggu beberapa detik.
Buka PC1, masuk ke tab '''Desktop → IP Configuration''', pilih '''DHCP'''. Tunggu beberapa detik.


Kalau berhasil, PC akan menampilkan alamat di rentang `.21` ke atas, gateway `192.168.10.1`, dan DNS yang kamu isi.
Kalau berhasil, PC akan menampilkan alamat di rentang <code>.21</code> ke atas, gateway <code>192.168.10.1</code>, dan DNS yang kamu isi.


Sekarang kembali ke router dan baca buktinya:
Sekarang kembali ke router dan baca buktinya:
Line 175: Line 203:


Yang perlu kamu cari:
Yang perlu kamu cari:
* **binding**: alamat, client-id (MAC), dan waktu kedaluwarsa. Satu baris = satu peminjaman sah.
* '''binding''': alamat, client-id (MAC), dan waktu kedaluwarsa. Satu baris = satu peminjaman sah.
* **conflict**: daftar alamat yang ditolak karena sudah dipakai perangkat lain. Idealnya kosong.
* '''conflict''': daftar alamat yang ditolak karena sudah dipakai perangkat lain. Idealnya kosong.
* **statistics**: jumlah Discover, Offer, Request, Ack. Kalau Discover naik tapi Offer nol, masalahnya di sisi server atau pool.
* '''statistics''': jumlah Discover, Offer, Request, Ack. Kalau Discover naik tapi Offer nol, masalahnya di sisi server atau pool.
* **pool**: jumlah leased dan available. Kalau available nol, pool habis.
* '''pool''': jumlah leased dan available. Kalau available nol, pool habis.


* 💡 '''Tips:''' `show ip dhcp server statistics` adalah alat pemisah masalah paling cepat. Discover masuk tapi Offer tidak keluar berarti server menolak melayani; Discover tidak masuk sama sekali berarti masalahnya di jalur atau relay, bukan di pool.
* 💡 '''Tips:''' <code>show ip dhcp server statistics</code> adalah alat pemisah masalah paling cepat. Discover masuk tapi Offer tidak keluar berarti server menolak melayani; Discover tidak masuk sama sekali berarti masalahnya di jalur atau relay, bukan di pool.


* 🔥 '''Kasus nyata:''' lab komputer sebuah SMK memakai satu /24 untuk 60 PC, tetapi 100 alamat pertama sudah dipakai server CBT, printer, CCTV, dan access point tanpa dimasukkan ke excluded. Selama dua hari ujian, 18 PC mendapat `169.254.x.x` dan tidak bisa membuka aplikasi. `show ip dhcp conflict` menampilkan belasan alamat bertanda konflik, dan server membuang alamat-alamat itu dari pool. Setelah rentang statis di-exclude dan binding dikosongkan, semua PC dapat alamat normal, dan ujian tidak perlu diundur lagi.
* 🔥 '''Kasus nyata:''' lab komputer sebuah SMK memakai satu /24 untuk 60 PC, tetapi 100 alamat pertama sudah dipakai server CBT, printer, CCTV, dan access point tanpa dimasukkan ke excluded. Selama dua hari ujian, 18 PC mendapat <code>169.254.x.x</code> dan tidak bisa membuka aplikasi. <code>show ip dhcp conflict</code> menampilkan belasan alamat bertanda konflik, dan server membuang alamat-alamat itu dari pool. Setelah rentang statis di-exclude dan binding dikosongkan, semua PC dapat alamat normal, dan ujian tidak perlu diundur lagi.


=== 🔹 Langkah 5: satu server melayani subnet lain (relay) ===
=== 🔹 Langkah 5: satu server melayani subnet lain (relay) ===
Line 189: Line 217:
Tambahkan router kedua. R1 menjadi gateway cabang, R2 menjadi server pusat.
Tambahkan router kedua. R1 menjadi gateway cabang, R2 menjadi server pusat.


| Perangkat | Interface | Alamat | Peran |
{| class="wikitable"
|---|---|---|---|
! Perangkat !! Interface !! Alamat !! Peran
| R1 | G0/0 | 192.168.20.1/24 | gateway LAN cabang |
|-
| R1 | G0/1 | 10.0.0.1/30 | link ke pusat |
| R1 || G0/0 || 192.168.20.1/24 || gateway LAN cabang
| R2 | G0/0 | 10.0.0.2/30 | server DHCP pusat |
|-
| R1 || G0/1 || 10.0.0.1/30 || link ke pusat
|-
| R2 || G0/0 || 10.0.0.2/30 || server DHCP pusat
|}


Di **R2**, siapkan pool untuk subnet cabang:
Di '''R2''', siapkan pool untuk subnet cabang:
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
configure terminal
configure terminal
Line 208: Line 240:
</syntaxhighlight>
</syntaxhighlight>


Baris `ip route` itu wajib. Ingat, server membalas ke `giaddr` = `192.168.20.1`. Kalau R2 tidak punya rute ke subnet itu, jawabannya tidak akan pernah sampai.
Baris <code>ip route</code> itu wajib. Ingat, server membalas ke <code>giaddr</code> = <code>192.168.20.1</code>. Kalau R2 tidak punya rute ke subnet itu, jawabannya tidak akan pernah sampai.


Di **R1**, nyalakan relay di interface yang menghadap klien:
Di '''R1''', nyalakan relay di interface yang menghadap klien:
<syntaxhighlight lang="text">
<syntaxhighlight lang="text">
configure terminal
configure terminal
Line 217: Line 249:
</syntaxhighlight>
</syntaxhighlight>


Sekarang PC di cabang akan mendapat alamat `192.168.20.x` dengan gateway `192.168.20.1`, walaupun pool-nya berada di R2.
Sekarang PC di cabang akan mendapat alamat <code>192.168.20.x</code> dengan gateway <code>192.168.20.1</code>, walaupun pool-nya berada di R2.


* 🧪 '''Uji cepat:''' jalankan `show ip dhcp binding` di **R2**. Kalau alamat `192.168.20.x` muncul di sana, relay bekerja. Kalau yang muncul justru alamat dari pool lain, berarti `giaddr` yang diterima server tidak sesuai perkiraanmu.
* 🧪 '''Uji cepat:''' jalankan <code>show ip dhcp binding</code> di '''R2'''. Kalau alamat <code>192.168.20.x</code> muncul di sana, relay bekerja. Kalau yang muncul justru alamat dari pool lain, berarti <code>giaddr</code> yang diterima server tidak sesuai perkiraanmu.


* ⚠️ '''Hati-hati:''' jangan pasang `ip helper-address` di interface yang menuju server. Perintah ini bekerja pada paket yang **masuk** dari sisi klien. Salah sisi adalah penyebab relay gagal yang paling sering dan paling sunyi.
* ⚠️ '''Hati-hati:''' jangan pasang <code>ip helper-address</code> di interface yang menuju server. Perintah ini bekerja pada paket yang '''masuk''' dari sisi klien. Salah sisi adalah penyebab relay gagal yang paling sering dan paling sunyi.


=== 🔹 Langkah 6: simpan dan bersihkan ===
=== 🔹 Langkah 6: simpan dan bersihkan ===
Line 238: Line 270:


=== 🔹 Versi GUI Packet Tracer ===
=== 🔹 Versi GUI Packet Tracer ===
Di Packet Tracer, **router tidak punya menu GUI untuk DHCP**. Semua konfigurasi pool harus lewat tab **CLI**.
Di Packet Tracer, '''router tidak punya menu GUI untuk DHCP'''. Semua konfigurasi pool harus lewat tab '''CLI'''.


Yang punya GUI adalah perangkat **Server-PT** (menu **Services → DHCP**). Itu server terpisah, bukan fitur IOS di router. Jangan tertukar: kalau gurumu meminta "DHCP di router", jawabannya CLI.
Yang punya GUI adalah perangkat '''Server-PT''' (menu '''Services → DHCP'''). Itu server terpisah, bukan fitur IOS di router. Jangan tertukar: kalau gurumu meminta "DHCP di router", jawabannya CLI.


Beberapa hal yang berjalan normal di PT: `ip dhcp pool`, `ip dhcp excluded-address`, `ip helper-address`, `show ip dhcp binding`, dan `show ip dhcp pool`. Yang tidak realistis di PT adalah `ip dhcp database` ke server eksternal, karena tidak ada agent FTP/TFTP nyata di baliknya.
Beberapa hal yang berjalan normal di PT: <code>ip dhcp pool</code>, <code>ip dhcp excluded-address</code>, <code>ip helper-address</code>, <code>show ip dhcp binding</code>, dan <code>show ip dhcp pool</code>. Yang tidak realistis di PT adalah <code>ip dhcp database</code> ke server eksternal, karena tidak ada agent FTP/TFTP nyata di baliknya.


== 🏭 Dipakai di dunia kerja ==
== 🏭 Dipakai di dunia kerja ==
* **Sekolah:** lab 60 PC dipakai bergantian tiap jam pelajaran. Pool per VLAN, excluded untuk server CBT dan printer, lease pendek 4–8 jam supaya perangkat tamu tidak menahan alamat seharian.
* '''Sekolah:''' lab 60 PC dipakai bergantian tiap jam pelajaran. Pool per VLAN, excluded untuk server CBT dan printer, lease pendek 4–8 jam supaya perangkat tamu tidak menahan alamat seharian.
* **Kantor:** karyawan berpindah ruang dan lantai. Satu server DHCP pusat dengan relay di tiap lantai jauh lebih rapi daripada menaruh server kecil di setiap ruang.
* '''Kantor:''' karyawan berpindah ruang dan lantai. Satu server DHCP pusat dengan relay di tiap lantai jauh lebih rapi daripada menaruh server kecil di setiap ruang.
* **Rumah sakit:** perangkat medis dan printer label harus statis, jadi rentangnya disisihkan. WiFi tamu diberi pool terpisah dengan lease pendek agar tidak mencampur perangkat kritis.
* '''Rumah sakit:''' perangkat medis dan printer label harus statis, jadi rentangnya disisihkan. WiFi tamu diberi pool terpisah dengan lease pendek agar tidak mencampur perangkat kritis.
* **ISP dan warnet:** alamat pelanggan tetap diikat ke MAC lewat manual binding, sementara pelanggan harian memakai pool dinamis dengan lease pendek.
* '''ISP dan warnet:''' alamat pelanggan tetap diikat ke MAC lewat manual binding, sementara pelanggan harian memakai pool dinamis dengan lease pendek.
* **Industri:** PLC dan HMI memakai alamat statis yang ketat, sedangkan laptop teknisi memakai DHCP. Pemisahan ini mencegah mesin produksi ikut terkonfigurasi ulang.
* '''Industri:''' PLC dan HMI memakai alamat statis yang ketat, sedangkan laptop teknisi memakai DHCP. Pemisahan ini mencegah mesin produksi ikut terkonfigurasi ulang.
* **Ritel multi-cabang:** server DHCP berada di pusat, setiap toko cukup jadi relay. Menambah toko baru berarti menambah pool, bukan mengirim teknisi untuk mengonfigurasi server lokal.
* '''Ritel multi-cabang:''' server DHCP berada di pusat, setiap toko cukup jadi relay. Menambah toko baru berarti menambah pool, bukan mengirim teknisi untuk mengonfigurasi server lokal.


== ✅ Verifikasi ==
== ✅ Verifikasi ==
| Perintah | Yang harus kamu lihat |
{| class="wikitable"
|---|---|
! Perintah !! Yang harus kamu lihat
| `show ip interface brief` | interface `up/up`, alamat sesuai rencana |
|-
| `show ip dhcp pool` | nama pool, subnet, leased, available |
| <code>show ip interface brief</code> || interface <code>up/up</code>, alamat sesuai rencana
| `show ip dhcp binding` | satu baris per klien, ada waktu kedaluwarsa |
|-
| `show ip dhcp conflict` | kosong, atau alamat yang perlu dibereskan |
| <code>show ip dhcp pool</code> || nama pool, subnet, leased, available
| `show ip dhcp server statistics` | Discover, Offer, Request, Ack bertambah |
|-
| `show running-config \| section dhcp` | pool dan excluded tertulis rapi |
| <code>show ip dhcp binding</code> || satu baris per klien, ada waktu kedaluwarsa
| `ping <ip-klien>` dari router | klien benar-benar hidup di jaringan |
|-
| <code>show ip dhcp conflict</code> || kosong, atau alamat yang perlu dibereskan
|-
| <code>show ip dhcp server statistics</code> || Discover, Offer, Request, Ack bertambah
|-
| <code>show running-config &#124; section dhcp</code> || pool dan excluded tertulis rapi
|-
| <code>ping <ip-klien></code> dari router || klien benar-benar hidup di jaringan
|}


* 🧪 '''Uji cepat:''' dari PC klien jalankan `ipconfig /all` (Windows) atau `ip a` (Linux). Tiga hal wajib muncul: alamat di rentang pool, gateway yang kamu isi di `default-router`, dan DNS yang kamu isi di `dns-server`. Kalau alamat benar tapi gateway kosong, curigai baris `default-router` yang belum masuk.
* 🧪 '''Uji cepat:''' dari PC klien jalankan <code>ipconfig /all</code> (Windows) atau <code>ip a</code> (Linux). Tiga hal wajib muncul: alamat di rentang pool, gateway yang kamu isi di <code>default-router</code>, dan DNS yang kamu isi di <code>dns-server</code>. Kalau alamat benar tapi gateway kosong, curigai baris <code>default-router</code> yang belum masuk.


== ⚠️ Kesalahan umum & troubleshooting ==
== ⚠️ Kesalahan umum & troubleshooting ==
| Gejala | Cek dulu | Penyebab umum |
{| class="wikitable"
|---|---|---|
! Gejala !! Cek dulu !! Penyebab umum
| Klien dapat `169.254.x.x` | `show ip dhcp server statistics` | tidak ada pool, excluded terlalu lebar, atau relay tidak jalan |
|-
| Dapat IP, gateway tidak bisa diping | `show ip dhcp pool` | mask di `network` tidak sama dengan mask interface |
| Klien dapat <code>169.254.x.x</code> || <code>show ip dhcp server statistics</code> || tidak ada pool, excluded terlalu lebar, atau relay tidak jalan
| Dapat IP subnet lain | `show ip dhcp binding`, cek `giaddr` | helper salah interface, atau ada pool yang lebih cocok |
|-
| `%DHCPD-4-PING_CONFLICT_DETECTED` | `show ip dhcp conflict` | alamat statis berada di dalam rentang pool |
| Dapat IP, gateway tidak bisa diping || <code>show ip dhcp pool</code> || mask di <code>network</code> tidak sama dengan mask interface
| Pool tersedia nol | `show ip dhcp pool` | lease terlalu panjang, excluded terlalu besar, atau klien menumpuk |
|-
| Relay diam total | `show ip interface` | `ip helper-address` terpasang di interface keluar |
| Dapat IP subnet lain || <code>show ip dhcp binding</code>, cek <code>giaddr</code> || helper salah interface, atau ada pool yang lebih cocok
| Binding hilang setelah reload | `show ip dhcp database` | tidak ada database agent, catatan hanya di memori |
|-
| Klien ditolak terus (NAK) | `show ip dhcp binding` | klien memegang alamat dari subnet lama |
| <code>%DHCPD-4-PING_CONFLICT_DETECTED</code> || <code>show ip dhcp conflict</code> || alamat statis berada di dalam rentang pool
| Pool dibuat tapi tak terpakai | `show running-config` | salah ketik di baris `network` |
|-
| Pool tersedia nol || <code>show ip dhcp pool</code> || lease terlalu panjang, excluded terlalu besar, atau klien menumpuk
|-
| Relay diam total || <code>show ip interface</code> || <code>ip helper-address</code> terpasang di interface keluar
|-
| Binding hilang setelah reload || <code>show ip dhcp database</code> || tidak ada database agent, catatan hanya di memori
|-
| Klien ditolak terus (NAK) || <code>show ip dhcp binding</code> || klien memegang alamat dari subnet lama
|-
| Pool dibuat tapi tak terpakai || <code>show running-config</code> || salah ketik di baris <code>network</code>
|}


* ⚠️ '''Hati-hati:''' kalau kamu memakai konflik logging tanpa database agent, setelah reload server bisa melaporkan **konflik palsu** dan membuang alamat dari pool. Cisco menyarankan memakai database agent; kalau tidak ada, matikan pencatatan konflik dengan `no ip dhcp conflict logging`.
* ⚠️ '''Hati-hati:''' kalau kamu memakai konflik logging tanpa database agent, setelah reload server bisa melaporkan '''konflik palsu''' dan membuang alamat dari pool. Cisco menyarankan memakai database agent; kalau tidak ada, matikan pencatatan konflik dengan <code>no ip dhcp conflict logging</code>.


* 💡 '''Tips:''' saat mendiagnosis, jangan mulai dari PC. Mulai dari `show ip dhcp server statistics` di server. Dari situ kamu langsung tahu apakah permintaan sampai, atau masalahnya justru sebelum server.
* 💡 '''Tips:''' saat mendiagnosis, jangan mulai dari PC. Mulai dari <code>show ip dhcp server statistics</code> di server. Dari situ kamu langsung tahu apakah permintaan sampai, atau masalahnya justru sebelum server.


== 🔐 Catatan keamanan & etika ==
== 🔐 Catatan keamanan & etika ==
DHCP adalah layanan yang dipercaya begitu saja oleh klien. Siapa pun yang menjawab lebih cepat, dialah yang menang.
DHCP adalah layanan yang dipercaya begitu saja oleh klien. Siapa pun yang menjawab lebih cepat, dialah yang menang.


Karena itu **rogue DHCP server** jadi masalah nyata di kampus dan sekolah: siswa membawa router WiFi murah, mencolokkannya ke LAN, dan router itu otomatis membagikan alamat serta gateway miliknya sendiri. Klien yang memakai gateway asing bisa diarahkan, disadap, atau diputus.
Karena itu '''rogue DHCP server''' jadi masalah nyata di kampus dan sekolah: siswa membawa router WiFi murah, mencolokkannya ke LAN, dan router itu otomatis membagikan alamat serta gateway miliknya sendiri. Klien yang memakai gateway asing bisa diarahkan, disadap, atau diputus.


Mitigasi di sisi switch:
Mitigasi di sisi switch:
Line 295: Line 345:
</syntaxhighlight>
</syntaxhighlight>


Prinsipnya: hanya port uplink menuju server resmi yang dianggap **trusted**. Port yang menghadap siswa tidak boleh menjawab DHCP.
Prinsipnya: hanya port uplink menuju server resmi yang dianggap '''trusted'''. Port yang menghadap siswa tidak boleh menjawab DHCP.


Dua hal lain yang perlu dijaga:
Dua hal lain yang perlu dijaga:
* **Jangan pasang DHCP server di interface WAN.** Permintaan dari luar bisa dijawab, dan kamu membocorkan struktur jaringanmu.
* '''Jangan pasang DHCP server di interface WAN.''' Permintaan dari luar bisa dijawab, dan kamu membocorkan struktur jaringanmu.
* **Batasi forward-protocol helper.** Helper meneruskan lebih dari DHCP; kalau tidak dibutuhkan, pangkas dengan `no ip forward-protocol udp <port>`.
* '''Batasi forward-protocol helper.''' Helper meneruskan lebih dari DHCP; kalau tidak dibutuhkan, pangkas dengan <code>no ip forward-protocol udp <port></code>.


* ⚠️ '''Hati-hati:''' menyalakan DHCP server di jaringan yang bukan milikmu bukan "iseng kecil". Efeknya bisa memutus puluhan pengguna sekaligus, dan di lingkungan kerja itu termasuk pelanggaran serius.
* ⚠️ '''Hati-hati:''' menyalakan DHCP server di jaringan yang bukan milikmu bukan "iseng kecil". Efeknya bisa memutus puluhan pengguna sekaligus, dan di lingkungan kerja itu termasuk pelanggaran serius.


== 📌 Kesimpulan ==
== 📌 Kesimpulan ==
DHCP di Cisco IOS berdiri di atas tiga hal: **pool** yang menyimpan alamat dan jawaban, **excluded** yang menjaga alamat penting, dan **binding** yang mencatat peminjaman.
DHCP di Cisco IOS berdiri di atas tiga hal: '''pool''' yang menyimpan alamat dan jawaban, '''excluded''' yang menjaga alamat penting, dan '''binding''' yang mencatat peminjaman.


Kalau klien berada di subnet lain, tambahkan **relay** lewat `ip helper-address` di interface yang menghadap klien, dan pastikan server punya rute balik ke `giaddr`.
Kalau klien berada di subnet lain, tambahkan '''relay''' lewat <code>ip helper-address</code> di interface yang menghadap klien, dan pastikan server punya rute balik ke <code>giaddr</code>.


Satu kebiasaan yang layak dibawa ke dunia kerja: jangan pernah menyimpulkan "DHCP rusak" sebelum membaca statistik di server. Di sana sudah tertulis apakah permintaan sampai, atau kamu sedang mencari masalah di tempat yang salah.
Satu kebiasaan yang layak dibawa ke dunia kerja: jangan pernah menyimpulkan "DHCP rusak" sebelum membaca statistik di server. Di sana sudah tertulis apakah permintaan sampai, atau kamu sedang mencari masalah di tempat yang salah.


Langkah berikutnya: buat pool untuk **dua VLAN sekaligus** di lab-mu, lalu buktikan dengan `show ip dhcp binding` bahwa setiap klien mendapat alamat dari pool yang benar.
Langkah berikutnya: buat pool untuk '''dua VLAN sekaligus''' di lab-mu, lalu buktikan dengan <code>show ip dhcp binding</code> bahwa setiap klien mendapat alamat dari pool yang benar.


== 🔗 Materi terkait ==
== 🔗 Materi terkait ==
* [[Cisco : Konfigurasi VLAN di Switch Cisco]] — syarat sebelum DHCP dipisah per VLAN.
* [[Cisco : Konfigurasi VLAN di Switch Cisco]] — syarat sebelum DHCP dipisah per VLAN.
* [[Cisco : Trunk dan Inter-VLAN Routing (Router-on-a-Stick)]] — tempat subinterface dan helper sering bertabrakan.
* [[Cisco : Trunk dan Inter-VLAN Routing (Router-on-a-Stick)]] — tempat subinterface dan helper sering bertabrakan.
* [[Cisco : Routing Statis di Cisco]] — rute balik ke `giaddr` sering jadi penyebab relay gagal.
* [[Cisco : Routing Statis di Cisco]] — rute balik ke <code>giaddr</code> sering jadi penyebab relay gagal.
* [[Cisco : OSPF Dasar]] — kalau jaringanmu sudah memakai routing dinamis.
* [[Cisco : OSPF Dasar]] — kalau jaringanmu sudah memakai routing dinamis.
* [[Cisco : Dasar CLI Cisco IOS (Mode dan Konfigurasi Awal)]] — ulang mode dan penyimpanan konfigurasi.
* [[Cisco : Dasar CLI Cisco IOS (Mode dan Konfigurasi Awal)]] — ulang mode dan penyimpanan konfigurasi.
Line 325: Line 375:
* IETF, *RFC 2131 — Dynamic Host Configuration Protocol*: https://www.ietf.org/rfc/rfc2131.txt
* IETF, *RFC 2131 — Dynamic Host Configuration Protocol*: https://www.ietf.org/rfc/rfc2131.txt
* IETF, *RFC 2132 — DHCP Options and BOOTP Vendor Extensions*: https://www.ietf.org/rfc/rfc2132.txt
* IETF, *RFC 2132 — DHCP Options and BOOTP Vendor Extensions*: https://www.ietf.org/rfc/rfc2132.txt
[[Category:TKJ]]
[[Category:Jaringan]]
[[Category:Cisco]]
[[Category:Packet Tracer]]

Latest revision as of 08:45, 28 October 2026

🎯 Tujuan

Setelah membaca artikel ini, kamu bisa:

  • menjelaskan kenapa alamat IP lebih baik dibagikan otomatis daripada diketik satu per satu;
  • membuat DHCP pool di router Cisco dan mengisi jawaban yang dibutuhkan klien;
  • menyisihkan alamat yang tidak boleh dibagikan sebelum pool dipakai;
  • membaca bukti bahwa alamat benar-benar sudah dipinjamkan, bukan cuma "kelihatannya jalan";
  • membuat satu router melayani subnet lain lewat relay agent (ip helper-address).

Fokus kita bukan menghafal perintah, tapi paham satu pertanyaan kunci: pool mana yang menjawab permintaan siapa.

📍 Konteks nyata

Bayangkan loker di gym sekolah. Kamu datang, lalu petugas menyerahkan kunci loker kosong, sekaligus memberi tahu di mana kamar mandi, jam tutup, dan aturan gym.

Kamu tidak perlu memilih loker sendiri. Petugas yang tahu loker mana masih kosong, mana yang sudah dipinjam, dan kapan harus ditarik kembali.

DHCP bekerja seperti petugas itu. Klien cuma bilang "saya butuh alamat", lalu server menjawab lengkap: alamat IP, subnet mask, gateway, dan DNS.

Masalahnya, petugas bisa salah kalau daftar lokernya tidak rapi. Alamat yang seharusnya dipakai server justru ikut dibagikan, atau petugas di gedung lain tidak tahu harus bertanya ke siapa.

Di sinilah router Cisco masuk. Router bisa jadi petugas loker sekaligus papan pengumuman yang memberi tahu klien harus ke mana.

🧠 Konsep singkat

DHCP bukan sekadar "bagi IP". Ada tiga hal yang harus kamu pisahkan dulu: daftar alamat, alamat yang dilarang dibagikan, dan catatan pinjaman.

Kalau ketiganya tercampur, gejalanya khas: klien dapat alamat aneh, dapat alamat tapi tidak bisa keluar, atau dua perangkat memakai alamat yang sama.

🔹 Empat pesan yang membentuk satu alamat

Prosesnya sering disebut DORA. Empat pesan, empat peran.

Pesan Arah Isi singkat
DHCPDISCOVER klien ke semua "Ada server yang bisa meminjamkan alamat?"
DHCPOFFER server ke klien "Saya punya alamat ini, mau?"
DHCPREQUEST klien ke semua "Saya pilih tawaran dari server itu"
DHCPACK server ke klien "Sah, alamat itu milikmu sampai tanggal sekian"

Klien mengirim DISCOVER dari 0.0.0.0 ke 255.255.255.255 karena belum punya alamat sama sekali. Server mendengar di UDP port 67, klien menunggu di UDP port 68.

Selain empat pesan itu ada DHCPDECLINE (klien menemukan alamat sudah dipakai), DHCPNAK (server menolak permintaan), dan DHCPRELEASE (klien mengembalikan alamat).

  • 📊 Angka penting: port server DHCP adalah 67/UDP, port klien 68/UDP. Lease bawaan Cisco IOS adalah 1 hari kalau kamu tidak menulis lease. Perpanjangan diminta di 50% masa sewa (T1) dan dicoba ulang ke server mana pun di 87,5% (T2).

🔹 Tiga hal yang sering tertukar: pool, excluded, binding

Ini bagian paling penting. Banyak siswa bingung karena ketiganya terlihat "soal IP yang sama".

Istilah Perannya Ditulis di mana
Pool daftar alamat + jawaban yang dibagikan ip dhcp pool <nama>
Excluded lubang yang tidak boleh dibagikan global config, di luar pool
Binding catatan siapa meminjam apa sampai kapan dibuat otomatis oleh server

Nama pool tidak menentukan subnet. Yang menentukan adalah baris network di dalamnya. Pool bernama LAN-SISWA tetap bisa melayani 192.168.20.0/24 kalau network-nya begitu.

Sebaliknya, ip dhcp excluded-address adalah perintah global, bukan perintah di dalam pool. Ini yang sering salah tempat.

  • ⚠️ Hati-hati: ip dhcp excluded-address bukan "alamat cadangan". Alamat yang di-exclude benar-benar tidak akan pernah ditawarkan. Kalau kamu meng-exclude seluruh /24, pool akan tampak ada tapi tidak pernah membagikan apa pun.

🔹 Siapa yang menjawab: server lokal atau relay

Kalau server DHCP berada di subnet yang sama dengan klien, broadcast DISCOVER didengar langsung. Field giaddr bernilai nol, lalu server mencocokkan permintaan dengan subnet di interface yang menerima broadcast.

Kalau server berada di subnet lain, router yang menerima broadcast menambahkan giaddr: alamat IP interface yang menerima permintaan tadi. Server memakai giaddr itu untuk memilih pool.

Jadi urutan berpikirnya:

  1. klien broadcast di subnetnya;
  2. router terdekat mengisi giaddr dengan alamat interface penerima;
  3. server memilih pool yang network-nya cocok dengan giaddr;
  4. jawaban dikirim balik ke giaddr, bukan ke klien langsung.
  • 💡 Tips: kalau satu interface punya alamat primer dan sekunder, IOS memeriksa subnet primer dulu sampai alamatnya habis, baru pindah ke sekunder. Jangan heran kalau pool sekunder "diam" padahal masih kosong.

🔹 Kenapa router perlu "titip suara"

Router tidak meneruskan broadcast secara default. Artinya DISCOVER dari klien tidak akan pernah sampai ke server di gedung sebelah.

Solusinya ip helper-address <ip-server> di interface yang menghadap klien. Perintah ini membuat router mendengar broadcast DHCP di interface itu, lalu meneruskannya sebagai unicast ke server.

  • ⚠️ Hati-hati: ip helper-address harus dipasang di interface masuk (sisi klien), bukan interface keluar menuju server. Salah sisi = tidak ada yang diteruskan, dan biasanya tidak ada pesan error apa pun.

Helper juga bukan hanya untuk DHCP. Secara bawaan ia ikut meneruskan beberapa UDP broadcast lain, seperti TFTP (69), DNS (53), time (37), NetBIOS (137–138), dan TACACS (49).

  • 🔥 Kasus nyata: sebuah lab SMK memasang ip helper-address di interface fisik G0/0, padahal yang menerima broadcast adalah subinterface G0/0.20. Akibatnya 32 PC di VLAN 20 tidak dapat alamat sama sekali selama dua hari. Guru sempat menuduh kabel dan switch rusak, padahal show ip dhcp server statistics di server menunjukkan nol paket Discover masuk. Setelah helper dipindah ke G0/0.20, semua PC dapat alamat dalam hitungan detik.

🧩 Istilah penting

Istilah Arti sederhana
DHCP protokol yang membagikan alamat IP dan pengaturan jaringan secara otomatis
DHCP pool kumpulan alamat + jawaban yang disiapkan server
network baris yang menentukan subnet layanan sebuah pool
excluded-address alamat yang dilarang dibagikan
binding catatan peminjaman: alamat, identitas klien, masa berlaku
lease masa sewa sebuah alamat
client-id identitas klien, umumnya MAC address + tipe media
giaddr alamat interface router yang meneruskan permintaan
relay agent router yang meneruskan DHCP antar-subnet
ip helper-address perintah untuk menyalakan relay di sebuah interface
default-router gateway yang dikirim ke klien
conflict kondisi dua perangkat memakai alamat yang sama
database agent tempat menyimpan catatan binding agar tahan reboot

🔧 Praktik: DHCP Server di Cisco IOS

Kita pakai Packet Tracer. Siapkan satu router 2911, satu switch 2960, dan dua PC.

Perangkat Interface Alamat
R1 G0/0 192.168.10.1/24
Switch Fa0/1 ke R1 G0/0
Switch Fa0/2, Fa0/3 ke PC1, PC2
PC1, PC2 NIC DHCP

Rencana penyisihan: .1 untuk gateway, .10 server, .11 printer, .12 access point, .13–.20 CCTV dan perangkat uji. Jadi yang boleh dibagikan mulai .21.

🔹 Langkah 1: alamat dan interface

enable
configure terminal
hostname R1-DHCP
interface g0/0
 ip address 192.168.10.1 255.255.255.0
 no shutdown
end
show ip interface brief
  • 🧪 Uji cepat: show ip interface brief harus menampilkan GigabitEthernet0/0 dengan status up dan protocol up. Kalau masih administratively down, no shutdown belum masuk.

🔹 Langkah 2: sisihkan alamat yang tidak boleh dibagikan

configure terminal
ip dhcp excluded-address 192.168.10.1 192.168.10.20

Satu baris ini menyisihkan 20 alamat sekaligus. Tulis sebelum pool dibuat supaya alamat itu tidak pernah sempat ditawarkan.

  • ⚠️ Hati-hati: kalau pool sudah telanjur membagikan alamat statis, memperbaiki excluded saja tidak menarik kembali alamat yang sudah dipegang klien. Kamu perlu clear ip dhcp binding <alamat> satu per satu, atau tunggu lease habis.

🔹 Langkah 3: buat pool dan isi jawabannya

ip dhcp pool LAN-SISWA
 network 192.168.10.0 255.255.255.0
 default-router 192.168.10.1
 dns-server 1.1.1.1 8.8.8.8
 domain-name lab.smk.local
 lease 0 8 0
end

Arti tiap baris:

  • network menentukan subnet yang dilayani pool ini. Ini baris paling menentukan.
  • default-router adalah gateway yang akan dipasang di PC klien.
  • dns-server bisa diisi sampai 8 alamat; klien mencoba berurutan.
  • domain-name mengisi suffix domain, berguna untuk akses nama pendek.
  • lease 0 8 0 berarti 0 hari, 8 jam, 0 menit. Tanpa baris ini, bawaannya 1 hari.
  • 📊 Angka penting: default-router dan dns-server masing-masing menerima sampai 8 alamat. lease menerima format hari–jam–menit, atau kata kunci infinite untuk masa sewa tanpa batas.

Periksa hasilnya:

show ip dhcp pool
show ip dhcp binding

show ip dhcp pool menampilkan nama pool, total alamat, leased, dan available. show ip dhcp binding masih kosong karena belum ada klien yang meminjam.

🔹 Langkah 4: uji klien dan baca bukti

Buka PC1, masuk ke tab Desktop → IP Configuration, pilih DHCP. Tunggu beberapa detik.

Kalau berhasil, PC akan menampilkan alamat di rentang .21 ke atas, gateway 192.168.10.1, dan DNS yang kamu isi.

Sekarang kembali ke router dan baca buktinya:

show ip dhcp binding
show ip dhcp conflict
show ip dhcp server statistics
show ip dhcp pool

Yang perlu kamu cari:

  • binding: alamat, client-id (MAC), dan waktu kedaluwarsa. Satu baris = satu peminjaman sah.
  • conflict: daftar alamat yang ditolak karena sudah dipakai perangkat lain. Idealnya kosong.
  • statistics: jumlah Discover, Offer, Request, Ack. Kalau Discover naik tapi Offer nol, masalahnya di sisi server atau pool.
  • pool: jumlah leased dan available. Kalau available nol, pool habis.
  • 💡 Tips: show ip dhcp server statistics adalah alat pemisah masalah paling cepat. Discover masuk tapi Offer tidak keluar berarti server menolak melayani; Discover tidak masuk sama sekali berarti masalahnya di jalur atau relay, bukan di pool.
  • 🔥 Kasus nyata: lab komputer sebuah SMK memakai satu /24 untuk 60 PC, tetapi 100 alamat pertama sudah dipakai server CBT, printer, CCTV, dan access point tanpa dimasukkan ke excluded. Selama dua hari ujian, 18 PC mendapat 169.254.x.x dan tidak bisa membuka aplikasi. show ip dhcp conflict menampilkan belasan alamat bertanda konflik, dan server membuang alamat-alamat itu dari pool. Setelah rentang statis di-exclude dan binding dikosongkan, semua PC dapat alamat normal, dan ujian tidak perlu diundur lagi.

🔹 Langkah 5: satu server melayani subnet lain (relay)

Sekarang bagian yang paling sering ditanya: bagaimana kalau server DHCP tidak berada di subnet klien?

Tambahkan router kedua. R1 menjadi gateway cabang, R2 menjadi server pusat.

Perangkat Interface Alamat Peran
R1 G0/0 192.168.20.1/24 gateway LAN cabang
R1 G0/1 10.0.0.1/30 link ke pusat
R2 G0/0 10.0.0.2/30 server DHCP pusat

Di R2, siapkan pool untuk subnet cabang:

configure terminal
ip dhcp excluded-address 192.168.20.1 192.168.20.10
ip dhcp pool CABANG-20
 network 192.168.20.0 255.255.255.0
 default-router 192.168.20.1
 dns-server 1.1.1.1
 lease 0 4 0
exit
ip route 192.168.20.0 255.255.255.0 10.0.0.1

Baris ip route itu wajib. Ingat, server membalas ke giaddr = 192.168.20.1. Kalau R2 tidak punya rute ke subnet itu, jawabannya tidak akan pernah sampai.

Di R1, nyalakan relay di interface yang menghadap klien:

configure terminal
interface g0/0
 ip helper-address 10.0.0.2

Sekarang PC di cabang akan mendapat alamat 192.168.20.x dengan gateway 192.168.20.1, walaupun pool-nya berada di R2.

  • 🧪 Uji cepat: jalankan show ip dhcp binding di R2. Kalau alamat 192.168.20.x muncul di sana, relay bekerja. Kalau yang muncul justru alamat dari pool lain, berarti giaddr yang diterima server tidak sesuai perkiraanmu.
  • ⚠️ Hati-hati: jangan pasang ip helper-address di interface yang menuju server. Perintah ini bekerja pada paket yang masuk dari sisi klien. Salah sisi adalah penyebab relay gagal yang paling sering dan paling sunyi.

🔹 Langkah 6: simpan dan bersihkan

copy running-config startup-config

Kalau ini hanya lab, bersihkan supaya topik berikutnya tidak tercampur:

clear ip dhcp binding *
configure terminal
no ip dhcp pool LAN-SISWA
no ip dhcp pool CABANG-20
no ip dhcp excluded-address 192.168.10.1 192.168.10.20

🔹 Versi GUI Packet Tracer

Di Packet Tracer, router tidak punya menu GUI untuk DHCP. Semua konfigurasi pool harus lewat tab CLI.

Yang punya GUI adalah perangkat Server-PT (menu Services → DHCP). Itu server terpisah, bukan fitur IOS di router. Jangan tertukar: kalau gurumu meminta "DHCP di router", jawabannya CLI.

Beberapa hal yang berjalan normal di PT: ip dhcp pool, ip dhcp excluded-address, ip helper-address, show ip dhcp binding, dan show ip dhcp pool. Yang tidak realistis di PT adalah ip dhcp database ke server eksternal, karena tidak ada agent FTP/TFTP nyata di baliknya.

🏭 Dipakai di dunia kerja

  • Sekolah: lab 60 PC dipakai bergantian tiap jam pelajaran. Pool per VLAN, excluded untuk server CBT dan printer, lease pendek 4–8 jam supaya perangkat tamu tidak menahan alamat seharian.
  • Kantor: karyawan berpindah ruang dan lantai. Satu server DHCP pusat dengan relay di tiap lantai jauh lebih rapi daripada menaruh server kecil di setiap ruang.
  • Rumah sakit: perangkat medis dan printer label harus statis, jadi rentangnya disisihkan. WiFi tamu diberi pool terpisah dengan lease pendek agar tidak mencampur perangkat kritis.
  • ISP dan warnet: alamat pelanggan tetap diikat ke MAC lewat manual binding, sementara pelanggan harian memakai pool dinamis dengan lease pendek.
  • Industri: PLC dan HMI memakai alamat statis yang ketat, sedangkan laptop teknisi memakai DHCP. Pemisahan ini mencegah mesin produksi ikut terkonfigurasi ulang.
  • Ritel multi-cabang: server DHCP berada di pusat, setiap toko cukup jadi relay. Menambah toko baru berarti menambah pool, bukan mengirim teknisi untuk mengonfigurasi server lokal.

✅ Verifikasi

Perintah Yang harus kamu lihat
show ip interface brief interface up/up, alamat sesuai rencana
show ip dhcp pool nama pool, subnet, leased, available
show ip dhcp binding satu baris per klien, ada waktu kedaluwarsa
show ip dhcp conflict kosong, atau alamat yang perlu dibereskan
show ip dhcp server statistics Discover, Offer, Request, Ack bertambah
show running-config | section dhcp pool dan excluded tertulis rapi
ping <ip-klien> dari router klien benar-benar hidup di jaringan
  • 🧪 Uji cepat: dari PC klien jalankan ipconfig /all (Windows) atau ip a (Linux). Tiga hal wajib muncul: alamat di rentang pool, gateway yang kamu isi di default-router, dan DNS yang kamu isi di dns-server. Kalau alamat benar tapi gateway kosong, curigai baris default-router yang belum masuk.

⚠️ Kesalahan umum & troubleshooting

Gejala Cek dulu Penyebab umum
Klien dapat 169.254.x.x show ip dhcp server statistics tidak ada pool, excluded terlalu lebar, atau relay tidak jalan
Dapat IP, gateway tidak bisa diping show ip dhcp pool mask di network tidak sama dengan mask interface
Dapat IP subnet lain show ip dhcp binding, cek giaddr helper salah interface, atau ada pool yang lebih cocok
%DHCPD-4-PING_CONFLICT_DETECTED show ip dhcp conflict alamat statis berada di dalam rentang pool
Pool tersedia nol show ip dhcp pool lease terlalu panjang, excluded terlalu besar, atau klien menumpuk
Relay diam total show ip interface ip helper-address terpasang di interface keluar
Binding hilang setelah reload show ip dhcp database tidak ada database agent, catatan hanya di memori
Klien ditolak terus (NAK) show ip dhcp binding klien memegang alamat dari subnet lama
Pool dibuat tapi tak terpakai show running-config salah ketik di baris network
  • ⚠️ Hati-hati: kalau kamu memakai konflik logging tanpa database agent, setelah reload server bisa melaporkan konflik palsu dan membuang alamat dari pool. Cisco menyarankan memakai database agent; kalau tidak ada, matikan pencatatan konflik dengan no ip dhcp conflict logging.
  • 💡 Tips: saat mendiagnosis, jangan mulai dari PC. Mulai dari show ip dhcp server statistics di server. Dari situ kamu langsung tahu apakah permintaan sampai, atau masalahnya justru sebelum server.

🔐 Catatan keamanan & etika

DHCP adalah layanan yang dipercaya begitu saja oleh klien. Siapa pun yang menjawab lebih cepat, dialah yang menang.

Karena itu rogue DHCP server jadi masalah nyata di kampus dan sekolah: siswa membawa router WiFi murah, mencolokkannya ke LAN, dan router itu otomatis membagikan alamat serta gateway miliknya sendiri. Klien yang memakai gateway asing bisa diarahkan, disadap, atau diputus.

Mitigasi di sisi switch:

ip dhcp snooping
ip dhcp snooping vlan 10,20
interface g0/1
 ip dhcp snooping trust

Prinsipnya: hanya port uplink menuju server resmi yang dianggap trusted. Port yang menghadap siswa tidak boleh menjawab DHCP.

Dua hal lain yang perlu dijaga:

  • Jangan pasang DHCP server di interface WAN. Permintaan dari luar bisa dijawab, dan kamu membocorkan struktur jaringanmu.
  • Batasi forward-protocol helper. Helper meneruskan lebih dari DHCP; kalau tidak dibutuhkan, pangkas dengan no ip forward-protocol udp <port>.
  • ⚠️ Hati-hati: menyalakan DHCP server di jaringan yang bukan milikmu bukan "iseng kecil". Efeknya bisa memutus puluhan pengguna sekaligus, dan di lingkungan kerja itu termasuk pelanggaran serius.

📌 Kesimpulan

DHCP di Cisco IOS berdiri di atas tiga hal: pool yang menyimpan alamat dan jawaban, excluded yang menjaga alamat penting, dan binding yang mencatat peminjaman.

Kalau klien berada di subnet lain, tambahkan relay lewat ip helper-address di interface yang menghadap klien, dan pastikan server punya rute balik ke giaddr.

Satu kebiasaan yang layak dibawa ke dunia kerja: jangan pernah menyimpulkan "DHCP rusak" sebelum membaca statistik di server. Di sana sudah tertulis apakah permintaan sampai, atau kamu sedang mencari masalah di tempat yang salah.

Langkah berikutnya: buat pool untuk dua VLAN sekaligus di lab-mu, lalu buktikan dengan show ip dhcp binding bahwa setiap klien mendapat alamat dari pool yang benar.

🔗 Materi terkait

📚 Referensi