# Lab: srv2 — srv1 — pc1 (NAT, routing, DHCP, NFS, Apache)

## Topologia i adresacja (przykład — podmień na swoje)

```
Internet --[NAT]-- srv1 ----10.0.1.0/24---- srv2
                     |
                10.0.2.0/24
                     |
                    pc1 (DHCP)
```

| Host | Sieć srv2–srv1 | Sieć srv1–pc1 | Internet |
|------|----------------|----------------|----------|
| srv1 | 10.0.1.1/24 | 10.0.2.1/24 | enp0s8 (NAT) |
| srv2 | 10.0.1.2/24 | — | — |
| pc1  | — | DHCP (10.0.2.x) | — |

> Nazwy interfejsów różnią się (eth0/eth1 vs enp0sX). Sprawdź `ip ad`.

---

## 1. Interfejsy (statyczne) — `/etc/network/interfaces`

**srv1** (dwie sieci lokalne + DHCP od strony internetu):
```
auto enp0s8
iface enp0s8 inet dhcp        # strona NAT/internet

auto eth0
iface eth0 inet static        # sieć srv2
  address 10.0.1.1/24

auto eth1
iface eth1 inet static        # sieć pc1
  address 10.0.2.1/24
```

**srv2**:
```
auto eth0
iface eth0 inet static
  address 10.0.1.2/24
  gateway 10.0.1.1            # brama = srv1
```

> Po edycji: `ifdown <iface>` → `ifup <iface>` (lub `ifup -a`).
> Sprawdzenie: `ip ad`, `ip route`.

---

## 2. IP forwarding + NAT na srv1

```bash
# włącz forwarding (trwałe)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf   # lub odkomentuj istniejącą linię
sysctl -p
cat /proc/sys/net/ipv4/ip_forward                  # ma być 1

# NAT (maskarada na interfejsie do internetu)
iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE
iptables -A FORWARD -i enp0s8 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o enp0s8 -j ACCEPT

# zapis trwały
apt install iptables-persistent
iptables-save > /etc/iptables/rules.v4
# odtworzenie: iptables-restore < /etc/iptables/rules.v4
```
Sprawdzenie: `iptables -t nat -L -v`, na pc1 `ping 8.8.8.8`.

---

## 3. Routing (ping pc1 ↔ srv2)

- **srv1** — zna obie sieci bezpośrednio (forwarding już włączony).
- **pc1** — brama domyślna = srv1 (`10.0.2.1`), dostaje ją z DHCP → widzi sieć srv2.
- **srv2** — potrzebuje trasy do sieci pc1 (albo `gateway 10.0.1.1` z pkt. 1 załatwia wszystko):

```bash
# na srv2, jeśli brak domyślnej bramy:
ip route add 10.0.2.0/24 via 10.0.1.1
```
Trwale w `/etc/network/interfaces` pod właściwym `iface`:
```
up ip route add 10.0.2.0/24 via 10.0.1.1
```
Test: `ping` i `traceroute` między pc1 a srv2.

---

## 4. DHCP na srv1 (dla pc1)

```bash
apt install isc-dhcp-server
nano /etc/dhcp/dhcpd.conf
```
```
subnet 10.0.2.0 netmask 255.255.255.0 {
  range 10.0.2.100 10.0.2.200;
  option routers 10.0.2.1;            # brama = srv1
  option domain-name-servers 10.0.2.1, 8.8.8.8;
}
```
```bash
nano /etc/default/isc-dhcp-server      # INTERFACESv4="eth1"
systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server
```
Na pc1: `iface eth0 inet dhcp` → `ifup eth0`, sprawdź `ip ad`.

---

## 5. NFS — srv1 (serwer) → pc1 (klient)

**SERWER (srv1):**
```bash
apt-get install nfs-kernel-server
nano /etc/idmapd.conf          # Domain = asl2026.pl
mkdir -p /nfs/export
touch /nfs/export/file.txt
nano /etc/exports
```
```
/nfs/export 10.0.2.0/24(rw,sync,no_root_squash,no_subtree_check)
```
```bash
exportfs -a
systemctl restart nfs-server.service
```

**KLIENT (pc1):**
```bash
apt-get install nfs-common
nano /etc/idmapd.conf          # Domain = asl2026.pl  (ta sama!)
mkdir -p /nfs/import
mount -t nfs 10.0.2.1:/nfs/export /nfs/import
df -h                          # sprawdź montowanie
```
Trwale w `/etc/fstab` (na dole):
```
10.0.2.1:/nfs/export /nfs/import nfs defaults,_netdev 0 0
```
> Przed rebootem przetestuj: `umount /nfs/import` → `mount -a` → `df -h`.

---

## 6. Apache na srv1

```bash
apt install apache2
```

**Port 8088 (zwykłe HTTP na innym porcie):**
```bash
nano /etc/apache2/ports.conf                       # Listen 8088
nano /etc/apache2/sites-available/000-default.conf # <VirtualHost *:8088>
systemctl restart apache2
```
Test: `curl http://10.0.2.1:8088`

**Port 443 (HTTPS):**
```bash
a2enmod ssl
a2ensite default-ssl        # vhost na 443 z certyfikatem snakeoil
systemctl restart apache2
```
Test: `curl -k https://10.0.2.1` (`-k` = ignoruj samopodpisany cert).

> Stronę podmień w `/var/www/html/index.html`.

---

## 7. Samba (CIFS) — srv1 (serwer) → pc1 (klient)

**SERWER (srv1):**
```bash
apt-get install samba
mkdir /samba
chmod 777 /samba
nano /etc/samba/smb.conf
```
Zmiany w `smb.conf`:
```
unix charset = UTF-8       # dodaj ~linia 25
workgroup = LAB333B        # zmień ~linia 29
```
Na końcu pliku:
```
[MyWinDir]
   path = /samba
   writable = yes
   guest ok = yes
   guest only = yes
   create mode = 0777
   directory mode = 0777
```
```bash
testparm /etc/samba/smb.conf       # weryfikacja konfiguracji
systemctl restart smbd
systemctl status smbd
```

**KLIENT (pc1):**
```bash
apt-get install cifs-utils         # jeśli brak mount.cifs
mkdir /samba
mount -t cifs //10.0.2.1/samba /samba
```
> W zadaniu IP serwera to `192.168.122.101` — podmień na adres swojego srv1.
> Test: utwórz plik w `/samba` i sprawdź, czy widać go na obu maszynach.

---

## 8. FTP (ProFTPD) — srv1 (serwer) → pc1 (klient)

**SERWER (srv1):**
```bash
apt-get install proftpd-basic openssl
nano /etc/proftpd/proftpd.conf
```
Zmodyfikuj linie:
```
UseIPv6 off                          # linia 11
IdentLookups off                     # linia 13
ServerIdent on "FTP Server ready."   # dodaj ~linia 14
DefaultRoot ~                        # odkomentuj ~linia 36
```
> `DefaultRoot ~` → użytkownik zostaje w katalogu domowym (inaczej widzi cały system plików).
```bash
systemctl restart proftpd.service
```

**KLIENT (pc1):**
```bash
apt-get install ftp
ftp 10.0.2.1                 # adres srv1 (w zadaniu 192.168.122.101)
```
Operacje w sesji FTP:
```
lcd /home/desktop    # lokalny katalog na pobierane/wysyłane pliki
get <nazwa_pliku>    # pobierz plik z serwera
put <nazwa_pliku>    # wyślij plik na serwer
ls / !ls             # zawartość katalogu zdalnego / lokalnego
```

---

## 9. Lista testów na koniec

- `ping 8.8.8.8` z pc1 (NAT działa)
- `ping` pc1 ↔ srv2 (routing)
- `traceroute <srv2>` z pc1 (idzie przez srv1)
- pc1 dostał adres z DHCP (`ip ad`)
- plik widoczny w `/nfs/import` na pc1
- plik w `/samba` widoczny na srv1 i pc1
- FTP: `get`/`put` przenosi pliki między srv1 a pc1
- strona Apache odpowiada na właściwym porcie
- po `reboot` wszystko trwałe (interfaces, iptables, fstab, sysctl)
