Моделирование сетевой инфраструктуры с помощью VirtualBox
MoNeTec-2024, 28 октября в 10:30 - 14:30 (ВМК МГУ, ауд 574)
Intro
FrBrGeorge (вдруг кто не в курсе)
ВМК МГУ (вы находитесь здесь)
UNИX (и здесь тоже)
О проведении мастер-класса
Цель:
VirtualBox как инструмент
- Методика преподавания (теория → практика)!
Принципы:
- Принцип следования (все упражнения надо делать)
Точки сбора (догонять):
- Прямое участие (не остановил — отстал, возможно, навсегда)
- Принцип достаточного знания (TCP/IP и немного командной строки, иначе завязнем)
Задача:
- дойти как можно дальше как можно более общим составом за фиксированное время.
VirtualBox
VirtualBox
- Импорт образа (в 2024 — предустановлен)
- Свойства образа:
- Четыре сетевых интерфейса
Включённый проброс COM->TCP
Выключить или изменить при клонировании
Клонирование образа
Назовём нашу первую виртуалку srv.
- Средствами GUI:
Связанный клон (не полный)
Перегенерация MAC-адресов
- Запуск образа
Консоль и пароль root
Типы подключения сетевых интерфейсов в VB
ip l, понятие сетевого интерфейса
Тип NAT
Оперативная настройка сети с помощью dhcp-клиента dhcpcd eth0
ip addr и ip route
- Проверка работоспособности
ip a
/etc/resolv.conf
# netcat ya.ru 80 GET / HTTP/1.0 Host: ya.ru
Тип «внутренняя сеть»
Останавливаем srv
Делаем второй клон — client
Выключить или изменить проброс COM→TCP при клонировании
Подсоединяем eth1 на обоих к сети intnet, втыкаем кабель
- Запускаем оба
Настраиваем ip на eth1
ip link set dev устройство up
ip addr add dev устройство адрес/маска
Что там в ip route?
Проверка: ping друг друга
самописный сценарий sethostname — чтобы не запутаться
Статическая маршрутизация
Базовая лекция Выключим всё
Добавим третий клон, router, подключённый к двум внутренним сетям (intnet и deepnet)
- Настроим два сетевых интерфейса на две разные сети
Переподключим client ко второй сети вместо первой:
client → deepnet → router → intnet → srv
Запустим все три, на router не забыть sethostname
Настройка маршрутов на router (без интернета не нужна!)
Настройка пересылки пакетов на router
router:~# sysctl net.ipv4.ip_forward=1
- Настройка маршрута на соседнюю локальную сеть на обоих клонах
ip route add default via <router> на client
ip route add <intnet&deepnet>/маска via <router> на srv
- Проверка:
ping друг друга
tcpdump на router-е
Замечание: ip neigh
«Выход в Интернет»
Доступ с client в интернет.
Маршрут по умолчанию и resolv.conf на client
Использование текстовых редакторов — vim, nano, mcedit
[root@base ~]# cat /etc/resolv.conf nameserver 8.8.8.8
Маршрут до client через router на srv
Настройка пересылки пакетов на router
Всё равно не работает
ping www.ru на client
смотрим tcpdump -i eth<1,2> на router
- пакеты должны проходить через него
смотрим tcpdump -i eth0 на srv — пакеты уходят, но не возвращаются
Трансляция адресов (NAT)
Особенность 10.*/192.168.* и т. п. — локальность.
Принципы работы NAT: подмена адресов с локальных на внешние
это туда — а обратно?
- ⇒ Динамическая таблица сеансов (TCP, icmp, вообще всё, что можно определить как сеанс)
Простейший NAT через iptables на srv
iptables -t nat -A POSTROUTING -o интерфейс -j MASQUERADE
- Проверка:
netcat ya.ru 80 с client
conntrack -L на srv
Почему тип подключение eth0 назывался у VirtualBox «NAT»? Потому что адрес, который получает интерфейс eth0 от VirtualBox-а, тоже NAT-ится в адрес хост-машины.
Посчитаем, сколько NAT-ов было по дороге ☺
Перманентная настройка сети
Базовая лекция (и немного предыдущая) Всё выключили, все настройки пропали!
- Включили все три
Поехали
Настройка интерфейсов с помощью systemd.network
- Адрес
- Маршрутизатор по умолчанию
- Маршруты на соседние локальные сети
Настройка пересылки пакетов на srv и router
- Например:
[root@base ~]# cat /etc/systemd/network/50-vbox.network [Match] Name=eth0 [Network] DHCP=ipv4 [root@base ~]# cat /etc/systemd/network/70-intnet.network [Match] Name=eth1 [Network] Address=10.1.0.1/24 IPForward=ipv4 # маршрут на deepnet через router [Route] Gateway=10.1.0.2 Destination=10.2.0.0/16
systemctl restart systemd-networkd
systemctl enable --now systemd-resolved
На srv должен быть интернет
Настройка router
Примерно такая же (TODO вписать сюда), только Gateway= в разделе Network для маршрута по умолчанию
Проверка: ping router → srv
Настройка client:
Мпршрут по умолчанию через router
Настройка DNS (руками /etc/resolv.conf)
Проверка: ping router → srv
Настройка NAT на srv
Дописываем правило в /etc/nftables/nftables.nft
table ip do_masq { chain do_postmasq { type nat hook postrouting priority srcnat; policy accept; ip saddr 10.2.0.0/24 masquerade } }
Надо запустить nftables: systemctl enable --now nftables.service
Запустить nftables: systemctl enable --now nftables.service
- перезапустить networkd
nft list ruleset должен показать сгенерированные правила (следствие IPMasquerade=ipv4 на внутреннем интерфейсе)
Проверка 1: netcat ya.ru 80 с client
- Перезагрузим всё!
Проверка 2: netcat ya.ru 80 с client
Если вдруг дошли досюда!
Использование shell-обвязки для быстрого клона / старта / подключения.
Другие темы с LecturesCMC/LinuxNetwork2024