Laboratorijska vežba – Modul 21 – Segmentisana virtuelna laboratorija sa centralnim ruterom
Cilj vežbe
Kreirati novu VM koja rutira između dva odvojena Internal Network segmenta, ponovo povezati postojeće VM-ove iz Modula 17 (Windows klijent) i Modula 18 (Ubuntu Server) na te segmente, testirati povezanost kroz centralnu ruter VM, primeniti osnovnu segmentaciju preko iptables, i uvežbati snapshot i OVA export kao dva komplementarna sloja zaštite.
Potrebno predznanje
- Kompletna teorija ovog modula (Teme 1–14).
- Postojeća Windows klijent VM iz Modula 17 i Ubuntu Server VM (LINUX1) iz Modula 18.
- Osnove
iptables/UFW (Modul 18), statičke IP konfiguracije preko Netplan-a (Modul 18) i Windows mrežnih podešavanja (Modul 17).
Potrebni programi
- VirtualBox sa postojećim VM-ovima iz Modula 17-18.
Topologija
graph TD
Host["Host računar"] -->|"Host-only adapter"| ROUTER1["ROUTER1 (nova Ubuntu Server VM)<br/>LAN-A: 192.168.10.1<br/>LAN-B: 192.168.20.1<br/>Host-only: 192.168.56.30<br/>NAT: internet"]
ROUTER1 -->|"Internal Network LAN-A"| WINCLIENT["WINCLIENT (Modul 17 VM)<br/>192.168.10.50"]
ROUTER1 -->|"Internal Network LAN-B"| LINUX1["LINUX1 (Modul 18 VM)<br/>192.168.20.20"]
ROUTER1 -->|"NAT"| Internet[Internet]
Plan adresiranja
| Uređaj | Adapter | IP adresa | Maska | Gateway |
|---|---|---|---|---|
| ROUTER1 | Internal Network „LAN-A" | 192.168.10.1 | 255.255.255.0 | — |
| ROUTER1 | Internal Network „LAN-B" | 192.168.20.1 | 255.255.255.0 | — |
| ROUTER1 | Host-only | 192.168.56.30 | 255.255.255.0 | — |
| ROUTER1 | NAT | DHCP (interno, hipervizor) | — | — |
| WINCLIENT | Internal Network „LAN-A" | 192.168.10.50 | 255.255.255.0 | 192.168.10.1 |
| LINUX1 | Internal Network „LAN-B" | 192.168.20.20 | 255.255.255.0 | 192.168.20.1 |
Koraci vežbe
Korak 1 – Kreiranje ROUTER1 VM
Kreirajte novu Ubuntu Server VM (najmanje 1 GB RAM, 20 GB disk) po istom postupku kao u Modulu 18, ali sa četiri mrežna adaptera u VirtualBox podešavanjima:
Adapter 1: Internal Network, ime "LAN-A"
Adapter 2: Internal Network, ime "LAN-B"
Adapter 3: Host-only Adapter
Adapter 4: NAT
Korak 2 – Mrežna konfiguracija ROUTER1 preko Netplan-a
network:
version: 2
ethernets:
enp0s3:
addresses: [192.168.10.1/24]
enp0s8:
addresses: [192.168.20.1/24]
enp0s9:
addresses: [192.168.56.30/24]
enp0s10:
dhcp4: true
(prilagodite tačna imena interfejsa stvarnom redosledu prikazanom preko ip link show, Modul 18 Tema 1-2)
$ sudo netplan try
Korak 3 – Uključivanje IP forwarding-a
$ sudo sysctl -w net.ipv4.ip_forward=1
Za trajnu izmenu (preživljava restart):
$ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
Objašnjenje: Ovo je korak koji ROUTER1 stvarno pretvara u ruter (Tema 9) — bez njega, VM bi imala ispravno konfigurisane adrese na oba interfejsa, ali ne bi prosleđivala saobraćaj između njih.
Korak 4 – Ponovno povezivanje WINCLIENT na LAN-A
Na WINCLIENT VM (Modul 17): VirtualBox Settings → Network → promenite adapter na Internal Network, ime „LAN-A". Unutar Windows-a, podesite statičku adresu (Modul 17, Tema 1):
IP adresa: 192.168.10.50
Maska: 255.255.255.0
Gateway: 192.168.10.1
Korak 5 – Ponovno povezivanje LINUX1 na LAN-B
Na LINUX1 VM (Modul 18): VirtualBox Settings → Network → promenite adapter na Internal Network, ime „LAN-B". Izmenite Netplan konfiguraciju:
network:
version: 2
ethernets:
enp0s3:
dhcp4: false
addresses: [192.168.20.20/24]
routes:
- to: default
via: 192.168.20.1
nameservers:
addresses: [8.8.8.8]
$ sudo netplan try
Korak 6 – Test povezanosti unutar segmenta
Sa WINCLIENT:
ping 192.168.10.1
Sa LINUX1:
ping 192.168.20.1
Oba treba da uspeju — potvrđuje osnovnu povezanost sa ROUTER1 unutar svakog segmenta.
Korak 7 – Test povezanosti između segmenata (kroz ROUTER1)
Sa WINCLIENT:
ping 192.168.20.20
Objašnjenje: Ovaj ping putuje od WINCLIENT (LAN-A) kroz ROUTER1 do LINUX1 (LAN-B) — uspeva samo ako je IP forwarding (Korak 3) uključen i oba klijenta imaju ispravan default gateway (Koraci 4-5). Ovo direktno demonstrira princip iz Modula 11 (rutiranje) primenjen potpuno unutar virtuelnog okruženja.
Korak 8 – SSH pristup sa host računara preko Host-only adaptera
Sa host računara:
ssh <korisnik>@192.168.56.30
Korak 9 – Osnovna segmentacija preko iptables
Na ROUTER1, dodajte pravilo koje blokira sav saobraćaj sa LAN-A ka LAN-B osim ICMP (ping):
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -p icmp -j ACCEPT
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -j DROP
Testirajte: ping sa WINCLIENT ka LINUX1 i dalje radi (ICMP dozvoljen), ali pokušaj SSH konekcije sa WINCLIENT ka LINUX1 (ako je moguće testirati sa Windows-a preko OpenSSH klijenta) treba da bude blokiran.
Objašnjenje: Ovo je praktična primena Teme 14 — segmenti su povezani (rutiranje radi), ali saobraćaj između njih je selektivno filtriran po principu najmanjih privilegija (Modul 16), ne potpuno otvoren niti potpuno zatvoren.
Korak 10 – Snapshot ROUTER1
Nakon potvrde da sve radi ispravno, napravite snapshot ROUTER1 VM-a (Tema 10) sa nazivom „Funkcionalna-segmentacija".
Korak 11 – OVA export ROUTER1
Izvezite ROUTER1 u OVA format (Tema 11, File → Export Appliance) na lokaciju van glavnog VirtualBox foldera (npr. eksterni disk ili posebna fascikla za backup-e).
Korak 12 – Dijagnostička vežba: zaboravljen IP forwarding
- Na ROUTER1, privremeno isključite IP forwarding:
sudo sysctl -w net.ipv4.ip_forward=0. - Ponovite test iz Koraka 7 (
ping 192.168.20.20sa WINCLIENT) — ne uspeva. - Ponovite test iz Koraka 6 (ping unutar segmenta ka samom ROUTER1) — i dalje uspeva.
- Objasnite svojim rečima, na osnovu Teme 9, zašto komunikacija unutar segmenta (Korak 6) ostaje funkcionalna, dok komunikacija između segmenata (Korak 7) prestaje da radi čim se IP forwarding isključi, iako se mrežna konfiguracija adaptera uopšte nije promenila.
- Vratite IP forwarding:
sudo sysctl -w net.ipv4.ip_forward=1.
Komande za proveru
ip addr show
ip route show
sysctl net.ipv4.ip_forward
sudo iptables -L FORWARD -v
ping <adresa>
ssh <korisnik>@<host-only-adresa>
Najčešće greške
| Greška | Uzrok | Rešenje |
|---|---|---|
| WINCLIENT ne može da pinguje ROUTER1 (Korak 6) | Adapter WINCLIENT nije promenjen na Internal Network „LAN-A", ili je ime mreže drugačije napisano (razlikuje velika/mala slova) | Proveriti Korak 4, ime mora biti identično na oba kraja |
| Ping između segmenata ne uspeva iako je forwarding uključen | Nedostaje default gateway na jednom od klijenata | Proveriti Korake 4-5 |
| SSH sa host-a ka ROUTER1 ne uspeva | Host-only adapter nije ispravno konfigurisan, ili SSH server nije instaliran na ROUTER1 | Proveriti Korak 1-2, instalirati openssh-server (Modul 18) |
| iptables pravilo blokira i ICMP | Redosled pravila pogrešan (DROP pre ACCEPT za ICMP) | iptables pravila se obrađuju odozgo nadole — ACCEPT za ICMP mora biti pre opšteg DROP pravila |
Postupak rešavanja problema (troubleshooting)
ip addr showna ROUTER1 — proveriti da sva tri interna adaptera imaju ispravne adrese.ip route showna klijentima — proveriti da postoji ispravan default gateway.sysctl net.ipv4.ip_forwardna ROUTER1 — proveriti da je forwarding uključen (vrednost 1).pingunutar segmenta pre pokušaja ping-a između segmenata — izolovati da li je problem lokalni ili u rutiranju.sudo iptables -L FORWARD -v— proveriti da li neko pravilo neočekivano blokira saobraćaj.
Završna provera
Vežba je uspešno završena kada:
- WINCLIENT i LINUX1 mogu da pingaju ROUTER1 unutar sopstvenog segmenta.
- WINCLIENT i LINUX1 mogu međusobno da se pingaju kroz ROUTER1.
- iptables pravilo iz Koraka 9 dozvoljava ICMP, ali blokira drugi saobraćaj između segmenata.
- Napravljen je i snapshot i OVA export ROUTER1 VM-a.
- Objašnjen je uzrok prestanka međusegmentne komunikacije nakon isključivanja IP forwarding-a (Korak 12).
Dodatni izazov
Dodajte treći Internal Network segment „LAN-C" sa novim, minimalnim klijentom, i treći interfejs na ROUTER1. Prilagodite iptables pravila tako da LAN-A i LAN-B mogu međusobno da komuniciraju (kao do sada), ali LAN-C bude potpuno izolovan od druga dva segmenta (simulacija DMZ principa iz Modula 16) — ipak zadržavajući pristup internetu preko istog NAT adaptera na ROUTER1.
Rešenje
Kompletno rešenje ove vežbe nalazi se u /resenja/modul-21/04-laboratorijska-vezba-resenje.md.
📖 Prikaži rešenje
Rešenje laboratorijske vežbe – Modul 21
Kompletna Netplan konfiguracija – ROUTER1
network:
version: 2
ethernets:
enp0s3:
dhcp4: false
addresses: [192.168.10.1/24]
enp0s8:
dhcp4: false
addresses: [192.168.20.1/24]
enp0s9:
dhcp4: false
addresses: [192.168.56.30/24]
enp0s10:
dhcp4: true
$ sudo netplan try
$ sudo sysctl -w net.ipv4.ip_forward=1
$ echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
Provera interfejsa
$ ip addr show
enp0s3: inet 192.168.10.1/24
enp0s8: inet 192.168.20.1/24
enp0s9: inet 192.168.56.30/24
enp0s10: inet <DHCP adresa od hipervizora>
Korak 6-7 – Test povezanosti
(WINCLIENT)
C:\>ping 192.168.10.1
Reply from 192.168.10.1: bytes=32 time<1ms TTL=64
C:\>ping 192.168.20.20
Reply from 192.168.20.20: bytes=32 time=1ms TTL=63
(LINUX1)
$ ping -c 4 192.168.20.1
$ ping -c 4 192.168.10.50
Oba uspešna, potvrđujući i lokalnu povezanost i rutiranje kroz ROUTER1 (TTL opada za 1 u međusegmentnom ping-u, potvrđujući prolazak kroz jedan dodatni skok — Modul 11 koncept).
Korak 8 – SSH sa host računara
$ ssh student@192.168.56.30
Welcome to Ubuntu 24.04 LTS
student@ROUTER1:~$
Korak 9 – iptables segmentacija
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -p icmp -j ACCEPT
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -j DROP
$ sudo iptables -L FORWARD -v
Chain FORWARD (policy ACCEPT)
target prot opt in out source destination
ACCEPT icmp -- enp0s3 enp0s8 anywhere anywhere
DROP all -- enp0s3 enp0s8 anywhere anywhere
Test: ping sa WINCLIENT ka LINUX1 i dalje uspeva (ICMP dozvoljen); pokušaj SSH konekcije sa WINCLIENT ka LINUX1 ne uspeva (blokiran DROP pravilom, jer SSH nije ICMP).
Korak 10-11 – Snapshot i export
VirtualBox Manager → ROUTER1 → Snapshots → Take Snapshot → "Funkcionalna-segmentacija"
VirtualBox Manager → File → Export Appliance → ROUTER1 → OVA → /Volumes/Backup/ROUTER1.ova
Korak 12 – Dijagnostička vežba
$ sudo sysctl -w net.ipv4.ip_forward=0
(WINCLIENT)
C:\>ping 192.168.10.1
Reply from 192.168.10.1: bytes=32 time<1ms TTL=64 ← i dalje radi
C:\>ping 192.168.20.20
Request timed out. ← ne uspeva
Objašnjenje: Ping unutar segmenta (WINCLIENT → ROUTER1) je saobraćaj upućen samom ruteru — ROUTER1 na njega odgovara lokalno, bez ikakve potrebe da prosleđuje bilo šta dalje, pa ovaj saobraćaj uopšte ne zavisi od IP forwarding podešavanja. Ping između segmenata (WINCLIENT → LINUX1) je tranzitni saobraćaj — paket stiže na jedan interfejs ROUTER1-a, ali je namenjen drugom uređaju iza drugog interfejsa; jezgro operativnog sistema mora eksplicitno odlučiti da li sme da taj paket prosledi dalje (forwarding), umesto da ga samo obradi lokalno. Kada je ip_forward=0, jezgro odbacuje takve tranzitne pakete čak i kada su oba interfejsa fizički/virtuelno savršeno ispravno konfigurisana — ovo je tačno razlika između „ruter" i „običan host sa dve mrežne kartice" (Modul 11 princip, Tema 9).
$ sudo sysctl -w net.ipv4.ip_forward=1
Nakon ovoga, ping između segmenata ponovo radi.
Napomena za rešenje dodatnog izazova
Treći segment „LAN-C" zahteva treći Internal Network adapter na ROUTER1 (npr. enp0s11, adresa 192.168.30.1/24) i novog minimalnog klijenta na njemu. Iptables pravila:
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT # LAN-A <-> LAN-B dozvoljeno
$ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
$ sudo iptables -A FORWARD -i enp0s11 -o enp0s3 -j DROP # LAN-C izolovan od LAN-A
$ sudo iptables -A FORWARD -i enp0s11 -o enp0s8 -j DROP # LAN-C izolovan od LAN-B
$ sudo iptables -A FORWARD -i enp0s11 -o enp0s10 -j ACCEPT # LAN-C sme ka NAT/internet
Redosled pravila je bitan — specifičnija pravila (DROP za LAN-C ka LAN-A/LAN-B) moraju biti definisana, a opšte dozvoljavajuće ponašanje (default policy ACCEPT na FORWARD lancu, ili eksplicitan ACCEPT ka NAT adapteru) mora ostati za saobraćaj koji treba da prođe.