This repository has been archived by the owner on Sep 9, 2021. It is now read-only.
Романов Алексей 3530901/70201 lab2s (DHCP server) #68
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Лабораторная №2 пункт с: DHCP Сервер
Сборка
Сборка осуществляется с помощью Maven и JDK 1.8.
Для удобства в репозиторий помещён Maven Wrapper.
Эта утилита скачает необходимую версию Maven.
Таким образом в системе должен присутствовать только JDK 1.8.
Команда сборки:
Запуск
Запустить сервер можно тут же на месте, запустив после сборки команду:
Описание опций:
Кроме аргументов необходимо иметь файл с описанием конфигурации на языке TOML.
Ниже приведён пример конфигурации, с помощью которого проводилось ручное тестирование.
Реализация
Был реализован RFC 2131
(с допущением, что DHCP сервер обслуживает только одну подсеть) и
часть опции из RFC 2132.
Тестирование
Для полноценного тестирования было бы здорово настроить интерфейс реальной ОС с помощью этого DHCP сервера.
Было решено использовать сеть из виртуальных машин. Вот что было для этого сделано.
Создание сетевого интерфейса
Чтобы не пугать участников локальной сети DHCP своим сервером, был создан виртуальный сетевой интерфейс vbr0.
Вывод команды
ip addr show dev vbr0
:Создание виртуальных машин
Для работы с виртуальными машинами был использован менеджер виртуальных машин от RedHat.
Было создано две виртуальных машины на основе дистрибутива Alpine Linux Virtual 3.12.1.
Обе виртуальные машины были подключены к созданному ранее мосту vbr0.
На каждой виртуальной машине был настроен интерфейс eth0 на получение настроек по DHCP (команда
setup-interfaces
).После этого, командой
ip link show dev eth0
был получен ethernet (MAC) адрес на каждой виртуальной машине.Адреса виртуальных машин:
Адреса не совпали с заданным ранее адресом для vbr0 и друг другом, как и следовало.
Второй адрес был записан в конфигурационный файл для статического определения IP адреса.
Ловля пакетов
Для отладки любого протокола существуют инструменты для дампа передаваемых данных.
Для данной работы была использована утилита tcpdump, которая была запущена со следующими параметрами.
По протоколу DHCP ответы следует принимать на порту 68.
Фильтр можно было и более точный прописать, но в данной ситуации
не ожидается получить что-то от другого сетевого взаимодействия.
Позже мы вернёмся к выводу данной команды.
Запуск сервера
Запустим сервер через Maven от имени root (чтобы получить доступ к well-known портам).
Запуск клиентов
Теперь необходимо осуществить поднятие сетевых интерфейсов на виртуальных машинах.
Для этого на каждой виртуальной машине следует ввести команду.
Вывод после работы данной команды:
Машина 1:
Машина 2:
Это пока нарушает логическую цепочку, но часть выводов от виртуальных машин была передана через команды:
Но закроем на это глаза и порадуемся выводу команды ping (опять передав его через nc).
Машина 2:
Попробуем выйти в Интернет. Сначала убедимся, что опция
router
применилась и в таблице маршрутизации у нас есть нужный маршрут.
Машина 1:
Маршрут верный. Значение default это адрес хостовой ОС.
Машина 1:
Адрес почему-то не ресолвится. Дело в том, что на хостовой системе не включена опция форвардинга.
Для этого необходимо включить
net.ipv4.ip_forward
в настройках ядра системы.Но не будем этого делать, так как DHCP сервер работает, а большего и не надо.
Анализ пойманных пакетов
Вернёмся к утилите tcpdump и посмотрим, что она выдала.
Всего она поймала 39 DHCP пакетов.
Дампы DHCP Discover запроса и ответа DHCP Offer.
В этом выводе всё соответствует ожиданиям, только слегка напрягает
bad udp cksum
в ответе.По запросу видно, что это первая виртуальная машина. Кроме этого server-id помечен как Mars.
Это показывает особенность tcpdump. Он получил имя хоста с адресом 10.23.0.2.
Далее рассмотрим пару DHCP Request и DHCP Ack
Опять странный
bad udp cksum
в ответе, а в остальном всё правильно.Пример обновления адреса второй виртуальной машины:
В этом выводе можно увидеть опцию
hostname
, которую мы специально указывали для этой машины вконфигурации DHCP сервера.
Попробуем теперь остановить DHCP клиент на одной из машин.
Вторая виртуальная машина:
В ответ на эту команду был остановлен DHCP клиент и сервер получил ответ следующего содержания.
А в логе сервера появилась запись: