==== Wstęp ====
Ze względu na to, że w trakcie zajęć z firewalla część ćwiczeń (i spory odsetek popełnianych błędów) odcina komputer od internetu, wykonanie tych zajęć na zdalnych maszynach byłoby utrudnione.
Jako że do zajęć z filtracji i translacji pakietów w Linuksie należy dysponować przynajmniej trzema komputerami w jednej sieci, proszę o odpowiednie przygotowanie się. Można oczywiście użyć trzech maszyn wirtualnych uruchomionych na jednym komputerze i połączonych odpowiednio w sieć.
Osoby które dysponują wystarczającą ilością pamięci RAM zachęcam do stworzenia własnych maszyn wirtualnych z ulubioną dystrybucją Linuksa.
Poniżej krótko opisuję jak można wykorzystując [[https://www.qemu.org/|qemu]] i gns3 (opcjonalnie) uruchomić trzy maszyny spięte w żądaną sieć.
Dla osób które mają niewielką ilość pamięci RAM polecam skorzystanie z gotowego bardzo okrojonego obrazu używanego w poniższych przykładach (linki: [[http://www.cs.put.poznan.pl/jkonczak/pub/alpine_3_11_qemu/alp_fs.qcow2|dysk]] i [[http://www.cs.put.poznan.pl/jkonczak/pub/alpine_3_11_qemu/kernel|kernel]]((Alpine z zainstalowanym domyślnym kernelem i modułami do niego zajmuje ok. 200MB więcej, stąd własna okrojona kompilacja jądra))).
==== GNS3 ====
Użycie program GNS3 do budowy potrzebnych sieci prezentuje:
{{:sk1:gns3_alpines.pdf|}}
==== Ręcznie ====
Do "ręcznego" złożenia potrzebnej sieci w Linuksie najłatwiej stworzyć w systemie operacyjnym odpowiednią ilość mostków, a następnie podpiąć maszyny wirtualne do właściwych urządzeń.
=== Mostki ===
//Uwaga:// wszystkie komendy należy wykonywać z uprawieniami roota.
Stworzenie i konfiguracja mostków używając Network Manager:
nmcli connection add type bridge ifname br0
nmcli connection modify bridge-br0 ipv4.method shared
nmcli connection add type bridge ifname br1
Stworzenie i konfiguracja mostków ręcznie:
ip link add br1 type bridge
ip link set dev br1 up
ip link add br0 type bridge
ip link set dev br0 up
ip address add dev br0 10.42.0.1/24
sysctl net.ipv4.conf.all.forwarding=1
iptables -t nat -A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
dnsmasq -i br0 --dhcp-range=10.42.0.2,10.42.0.254,3h
=== Maszyny ===
Uruchomienie maszyn dla filtrowania:
# start (każdej) maszyny wirtualnej:
qemu-system-x86_64 -kernel kernel -hda alp_fs.qcow2 -device e1000,netdev=N,mac=52:54:00:00:00:XX -netdev bridge,br=br0,id=N -accel kvm -serial stdio -snapshot
# -kernel kernel <- użyj tego pliku jako jądra systemu operacyjnego
# -hda alp_fs.qcow2 <- użyj tego pliku jako dysku twardego
# -device e1000,netdev=N,mac=52:54:00:00:00:XX <- dodaj do maszyny wirtualnej kartę sieciową obsługiwaną przez sterownik e1000 i połącz z urządzeniem 'N'
# -netdev bridge,br=br0,id=N <- skonfiguruj urządzenie 'N' jako podłączenie do mostka o nazwie br0
# -accel kvm <- użyj KVM jako wsparcia dla wirtualizacji
# -serial stdio <- podłącz port szeregowy do standardowego wejścia/wyjścia
# -snapshot <- otwiera wszystkie pliki w trybie tylko do odczytu, zmiany są tracone po zamknięciu maszyny
Uruchomienie maszyn dla translacji adresów:
# maszyna "w internecie"
qemu-system-x86_64 -kernel kernel -hda alp_fs.qcow2 -device e1000,netdev=N,mac=52:54:00:00:00:01 -netdev bridge,br=br0,id=N -accel kvm -serial stdio -snapshot
# maszyna "router"
qemu-system-x86_64 -kernel kernel -hda alp_fs.qcow2 -device e1000,netdev=N1,mac=52:54:00:00:00:02 -netdev bridge,br=br0,id=N1 -device e1000,netdev=N2,mac=52:54:00:00:00:03 -netdev bridge,br=br1,id=N2 -accel kvm -serial stdio -snapshot
# maszyna "za NATem"
qemu-system-x86_64 -kernel kernel -hda alp_fs.qcow2 -device e1000,netdev=N,mac=52:54:00:00:00:04 -netdev bridge,br=br1,id=N -accel kvm -serial stdio -snapshot