Курс «Сети в Linux»: опыт пяти лет преподавания
У человека, даже получившего технологическое образование, тема «компьютерные сети» зачастую разваливается прямо в голове на три слабо пересекающиеся области: теория компьютерных сетей, которую ему рассказывали на лекциях, практика настройки отдельных параметров (как минимум персонального компьютера — или, если образование было достаточно продвинутым, какого-нибудь сетевого устройства на нескольких типичных задачах), и, наконец, махровая мифология, заполняющая довольно обширные промежутки между теорией и практикой.
Работая системным администратором на факультете ВМК, где мне приходилось интегрировать и аппаратные устройства, и компьютеры под управлением FreeBSD, Solaris и Linux, я убедился, что ни первая, ни вторая, ни тем более — третья области мне особо не помогают. Тогда-то и зародилась идея об учебном курсе, ведущем от теории к практике, но реализована она была несколько позже.
Попытка №0 была предпринята почти 20 лет назад — это был довольно «классический» курс по сетям, в котором я делился (бегая у меловой доски) своими тогдашними админскими знаниями1. За основу был взят стек протоколов TCP/IP, изложение шло по нему снизу вверх, от аппаратного уровня до прикладного, на котором мы задерживались, изучая отдельно DNS, электронную почту и борьбу со спамом в ней. Отчётом был устный экзамен, которы принимал не только я, но и мои коллеги-сетевики. Думаю, что для того времени это был хороший, годный спецкурс.
Следующая попытка — 2013 года2 — уже включала в себя решение домашних заданий для двух виртуальных машин под VirtualBox и полуавтоматическую их проверку, и вместо почты мы занимались межсетевыми экранами и secure shell. Ресурсов на этот курс было потрачено много, перезапустить его я не решился.
В 2020 году произошёл курьёз. Мой коллега жалуется мне: в его спецкурсе «Aрхитектура роутеров» (или как-то так) слишком много обзорного, и нет практики. Не соглашусь ли я прочесть пару лекций про маршрутизацию в Linux? Сговорились на 4 часа, два по L2, два — по L3. Под конец семестра выяснилось, что только по этим темам возможны практические задания, так что пришлось их тоже подготовить3 — на этот раз с запуском пяти виртуальных машин с вариацией их функций и топологии сети.
В 2022 году я решил «пришить к этой пуговице пару брюк». Получившийся курс воспроизводит структуру, заданную в 2013 году — вводная лекция, по две лекции на каждый уровень TCP/IP, разговор о средствах перманентной настройки, туннелирования и о межсетевых экранах. Обязательные домашние задания включают в себя развёртывание некоторой сетевой топологии из клонов эталонного образа виртуальной машины для VirtualBox, настройку заданных параметров и пересылку т. н. «отчётов» — записи диалога командной строки в консоли каждой из виртуалок. Отчёты следует посылать по электронной почте на выделанный адрес. В 2024 году проверка этих отчётов стала автоматической4.
Лекции читаются аудиторно и сопровождаются стримингом в YouTube. Проверкой домашних заданий занимается приложение HWorker5, написанное студентами ВМК в рамках летней стажировки в «Базальт СПО». Образ виртуальной машины сделан на базе минимальной сборки ALT Starterkit JEOS6, в который вручную установлены требуемые пакеты. Изменений в настройках ОС практически нет, за исключением явного использования загрузчика и консоли на последовательном порту, подключение к которой облегчает копирование текстовых данных. Дополнительно написано несколько shell-утилит7, позволяющих со стороны хост-системы унифицированно управлять клонированием виртуалок и привязкой их к виртуальным сетам, и shell-утилит, позволяющих в гостевой системе «на скорую руку» настраивать сеть, имя компьютера, тип терминала и т. п.
Из ближайших планов — перевод образа на автоматизированную сборку (по аналогии с ALT Starterkit), из среднесрочных — адаптация образа для использования в студенческих работах (развёртывание площадки с заданной топологией и запуск там чего-нибудь дипломного) и в связи с этим доработка системы передачи настроек сети.