# Writeup: Сеть деревни Minecraft

**Категория:** Сети  
**Класс:** 9  
**Флаги:** 3

---

## Задание 1: ## Сети: Сеть деревни Minecraft (1/3)
---
На карте мира Minecraft показана сеть деревни: компьютеры Стива, Алекс, Херобрина и Эндермена подключены к одному коммутатору, а дальше трафик уходит через роутеры `R1` и `R2` в Интернет. Отдельно за роутером `R3` расположена серверная сеть с `SRV1` и `SRV2`.

![alt text](Network_9.png)

**Что нужно найти:**
Минимальную по размеру подсеть, в которой все 4 ПК гарантированно окажутся в одной сети. Ответ укажите в формате `/20`.

**Рекомендуемые утилиты:** черновик, калькулятор степеней двойки
**Цель работы:** определить корректный префикс подсети по схеме
**Критерий оценки:** предоставление корректного ответа

**Разбор задания:**

На схеме у четырех ПК адреса `192.168.10.5`, `192.168.10.9`, `192.168.10.16`, `192.168.10.32`.

Нужно найти самый узкий блок, который захватывает все эти адреса. Критичны крайние точки: `192.168.10.5` и `192.168.10.32`.

- Сеть `192.168.10.0/27` покрывает диапазон `192.168.10.0`–`192.168.10.31`, поэтому адрес `192.168.10.32` уже не попадает.
- Следующий более широкий блок — `192.168.10.0/26`, он покрывает `192.168.10.0`–`192.168.10.63` и уже включает все 4 ПК.

**Ответ:** `/26`

---

## Задание 2: Сеть деревни Minecraft (2/3)
---
В деревне два выхода в Интернет — через `R1` и `R2`. Алекс на своем ПК (`192.168.10.32`) настроила сразу несколько маршрутов по умолчанию.

На устройствах получены листинги, представленные в книге `Listings.txt`. Выберите все верные утверждения из книги `Statements.txt`.

**Что нужно найти:**
Номера всех верных утверждений. Ответ запишите через подчеркивание в порядке возрастания, например: `1_3_5`.

**Рекомендуемые утилиты:** текстовый редактор, черновик
**Цель работы:** разобрать выбор маршрута по `ip route`, `metric` и базовым правилам Linux routing
**Критерий оценки:** предоставление корректного ответа

`listings.txt:`

Вывод на ПК Алекс:

```bash
PC Alex:
$ ip addr
eth0: 192.168.10.32/24

$ ip route
default via 192.168.10.2 dev eth0 metric 50
default via 192.168.10.1 dev eth0 metric 100
192.168.10.0/24 dev eth0 proto kernel scope link src 192.168.10.32

$ ip rule
0:       from all lookup local
32766:   from all lookup main
32767:   from all lookup default 
```

Маршруты на роутерах:

```bash
R1:
default via 203.0.113.1
192.168.20.0/24 via 203.0.113.9

R2:
default via 203.0.113.5
192.168.20.0/24 via 203.0.113.9

R3:
default via 203.0.113.9
192.168.10.0/24 via 203.0.113.9
```


`statements.txt:`

1. Для трафика Алекс → `8.8.8.8` первым шлюзом будет `192.168.10.2` (`R2`).
2. Два маршрута по умолчанию в Linux означают конфликт, поэтому доступ в Интернет не заработает, пока один из них не удалить.
3. Для трафика Алекс → `8.8.8.8` таблицы маршрутизации на `R1/R2` не влияют на выбор первого шлюза: ПК выбирает его по своим маршрутам и правилам.
4. Маршрут `192.168.10.0/24 dev eth0` означает, что весь трафик, включая `8.8.8.8`, Алекс отправит в локальную сеть без шлюза.
5. Чтобы трафик Алекс → `8.8.8.8` пошел через `R1`, достаточно добавить маршрут `8.8.8.8/32 via 192.168.10.1`.
6. Для трафика Алекс → `SRV1 (192.168.20.10)` будет выбран `R2`, потому что более специфичного маршрута к `192.168.20.0/24` нет, а у default через `R2` меньший `metric`.

**Разбор задания:**

Смотрим листинг `ip route` на `PC Alex`:

- `default via 192.168.10.2 metric 50`
- `default via 192.168.10.1 metric 100`
- `192.168.10.0/24 dev eth0`

Разбор утверждений:

1. Верно. Для `8.8.8.8` более специфичного маршрута нет, значит используется `default` с меньшим `metric`, то есть через `192.168.10.2`.
2. Неверно. В Linux несколько маршрутов по умолчанию допустимы; приоритет определяется `metric`.
3. Верно. Первый шлюз выбирает сам ПК по своей таблице маршрутов и правилам. Таблицы на `R1/R2` начинают влиять уже после отправки пакета на выбранный шлюз.
4. Неверно. Маршрут `192.168.10.0/24 dev eth0` относится только к локальной подсети `192.168.10.0/24`, а не к `8.8.8.8`.
5. Верно. Маршрут `8.8.8.8/32 via 192.168.10.1` будет более специфичным, чем любой `default`, поэтому трафик к `8.8.8.8` пойдет через `R1`.
6. Верно. Для `192.168.20.10` на ПК Алекс нет отдельного маршрута, значит снова используется `default`, а у маршрута через `R2` меньший `metric`.

**Ответ:** `1_3_5_6`

---

## Задание 3: Сеть деревни Minecraft (3/3)
---
На редстоун-переключателе поднят роутер между сетью деревни `192.168.10.0/24` и серверной сетью `192.168.20.0/24`. В серверной сети находится `SRV1` (`192.168.20.10`) с сервисом на `25565/tcp`, а также другие узлы и сервисы, которые открывать нельзя.

Зайди на роутер по SSH и настрой `iptables` так, чтобы жители деревни могли подключаться только к `SRV1:25565/tcp`, а остальной новый трафик в серверную сеть оставался запрещен.

**Рекомендуемые утилиты:** ssh, bash, iptables
**Цель работы:** настроить корректное правило фильтрации `iptables`
**Критерий оценки:** получение правильного флага

**Разбор задания:**

На роутере уже есть:

- политика `FORWARD DROP`
- правило `ESTABLISHED,RELATED ACCEPT`

Нужно разрешить только новый `tcp`-трафик из `192.168.10.0/24` к `192.168.20.10:25565`.

Подходит команда:

```bash
iptables -A FORWARD -p tcp -s 192.168.10.0/24 -d 192.168.20.10 --dport 25565 -m conntrack --ctstate NEW -j ACCEPT
```

Почему этого достаточно:

- открыт только `tcp/25565`
- только к `SRV1`
- только из сети деревни
- ответный трафик пройдет по уже настроенному `ESTABLISHED,RELATED`
- остальные новые подключения останутся под `FORWARD DROP`

После добавления правила запускаем:

```bash
python3 /opt/router/check_rule.py
```

**Флаг:** `vsosh{ipt4bles_fla6_tc5}`
