TCP/IP в Linux (2 лекции и задание)
Неожиданно прочтённые мной лекции по настройке L2 и L3 маршрутизации в Linux(две пары)
* Видео
Login: user, Password: user, пароль суперпользователя: root
Задание
Импортировать образ виртуальной машины для VirtualBox,
- Создать нужное количество клонов
- если на хост-системе недостаточно памяти, можно ограничить объём памяти одной виртуалки 512 Мб
для экономии места и времени делать связную копию
в клоне обязательно перегенерировать все mac-адреса
- не забудьте один клон оставить чистым
- Настроить топологию сети как предписано в варианте задания
Для каждого узла все настройки «с нуля» должны содержаться в одном шелл-сценарии (etcnet, etckeeper и прочая специфика отменяется)
- «Холодный старт» вируталки должен выглядеть так:
- запустить виртуалку
- войти в суперпользователя
- запустить сценарий
Отчёт по заданию
Отчёт — это
- набор из 5 сценариев, по одному на узел.
- Каждый сценарий — это текстовый файл на shell
Имя сценария в отчёте совпадает с именем узла в топологии, например S0.sh для узла S0, H2.sh для уздла H и т. п.
Формирование настроек DNS тоже надо включать в сценарий (например, в виде echo "что-то-там" > /etc/resolv.conf)
- Картинка исходной топологии с добавлением IP-адресов интерфейсов (у которых они есть)
Сценарии и картинку присылать на почту (возможно, несколько), будет объявлено в группе.
Варианты
Текстовая версия:
- 1: B2→P0 H4→S1 H7→B2 P0→S1
- 2: H2→S0 H3→S0 S0→V1 V1→R5
- 3: B2→P0 H5→B2 P0→B1 P0→R3
- 4: H2→P0 H5→C4 P0→V1 V1→C4
- 5: H4→S1 H7→V2 P0→S1 V2→P0
- 6: H5→V2 P0→B1 P0→R3 V2→P0
- 7: H5→V2 H6→V3 V2→S0 V3→S0
- 8: B2→P0 H5→B2 P0→B1 P0→B3
- 9: H3→S0 H6→V2 S0→B1 V2→S0
- 10: B2→S0 H3→S0 H6→B2 S0→B1
- 11: B2→P0 H6→V5 P0→B1 V5→B2
- 12: H5→V2 P0→V1 V1→R4 V2→P0
- 13: C2→P0 H5→C2 H6→C2 P0→B1
- 14: H3→S0 H6→R2 R2→S0 S0→B1
Если интересно — Генератор заданий (понадобится netrowkx и matplotlib)
Описание
- H*
- Обычный клиент, имеет один статически настроенный интерфейс
- R*
- Маршрутизатор, имеет два статически настроенных интерфейса, принадлежащих различным локальным сетям
- C*
Маршрутизатор, имеет три статически настроенных интерфейса, принадлежащих различным локальным сетям
- P*
Маршрутизатор, имеет три статически настроенных интерфейса, принадлежащих различным локальным сетям. Два из этих интерфейсов — «внешние», правила маршрутизации настроены так, что все соединения на 443 и 80 порт уходят через один интерфейс, а все остальные — на другой
- S*
Маршрутизатор, имеет четыре статически настроенных интерфейса, принадлежащих различным локальным сетям. Два из этих интерфейсов — «внешние», два — «внутренние». Правила маршрутизации настроены так, что все пакеты из первой внутренней сети уходят в первую внешнюю, а все пакеты из второй внутренней — вор вторую внешнюю.
- B*
- Сетевой мост, объединяющий две физические сети в один сегмент.
- V*
- Сетевой мост, объединяющий VLAN-пакеты с определённым ID из двух физических сетей в один сегмент. ID выбирается произвольный.
- I*
- Подключение к внешней сети
Требования
- На интерфейсах, подключённых к внешней сети, должен быть настроен NAT. Если в задании к внешней сети подключён мост, то NAT настраивается на узле, подключённом к этому мосту.
Для простоты отладки каждое подключение к I* должно оформляться как отдельная сеть типа NAT в терминах VirtualBox (иначе возможны проблемы с маршрутизацией)
- Со всех узлов, не являющихся мостами, должен работать, как минимум
ping ya.ru
echo -e "GET / HTTP/1.1\n" | netcat goo.gl 80 (много букв)
Полезные советы
Все системные действия делайте от root, в которого входите командой su - (не просто su, и не надо никаких sudo). Все информационные действия делайте в соседнем окне из-под обычного пользователя.
- В задании вся настройка интерфейсов — статическая.
- Если на узле есть интерфейс типа NAT, вам нужно знать:
- Какая сеть лежит с той стороны
Каковы настройки DNS (в принципе, сойдёт и 8.8.8.8 или 1.1.1.1)
- Адрес маршрутизатора по умолчанию
Для этого можно запустить dhcpcd имя_интерфейса и посмотреть
ip a
ip r
cat /etc/resolv/conf
(не забудьте только прибить dhcpcd)
- Если на узле есть интерфейс типа NAT, вам нужно знать:
От волшебного переименования интерфейсов пришлось отказаться: в некоторых интересующих нас случаях оно происходит позже, чем применение соответствующих настроек, и всё ломается
Нынешняя схема именования — т. н. predictable network device names. Читать это не обязательно, просто в имя интерфейса зашивается номер шины и номер слота в шине, например, enp0s3: вместо eth0:
- При клонировании не забываем
- делать связную копию (а не полную, чтобы не забить диск)
- включать крыжик «перегенерировать все MAC-адреса»
При добавлении нового сетевого интерфейса в настройках VirtualBox не забываем включить разрешение promiscuous mode
- На что смотреть при настройке:
- включена ли net.ipv4.ip_forward в ядре (для маршрутизаторов), есть на этом вики
- настроен ли iptables (для NAT), есть на этом вики
настроены ли DNS (/etc/resolv.conf) и маршрутизация
- был ли поднят интерфейс прежде, чем что-то с ним делать
- работает ли сценарий после перезагрузки
Документация
По утилите ip в конце страницы, там 95% нам не нужно)