- Table of Contents
- Linux Administrator course homework #1
- Linux Administrator course homework #2
- Linux Administrator course homework #3
- Linux Administrator course homework #4
- Linux Administrator course homework #5
- Linux Administrator course homework #6
- Linux Administrator course homework #7
- Linux Administrator course homework #8
- Linux Administrator course homework #9
- Linux Administrator course homework #10
- Linux Administrator course homework #11
- Linux Administrator course homework #12
- Linux Administrator course homework #13
- Linux Administrator course homework #14
- Linux Administrator course homework #16
- Linux Administrator course homework #17
Домашнее задание Делаем собственную сборку ядра Взять любую версию ядра с kernel.org Подложить файл конфигурации ядра Собрать ядро (попутно доставляя необходимые пакеты) Прислать результирующий файл конфигурации Прислать списк доустановленных пакетов, взять его можно из /var/log/yum.log
In this homework I executed
make && make modules
to build kernel and published my .config file.
I downloaded the latest stable kernel 4.16.41 from kernel.org to my building-folder
It was hard, in first I copied config-file from /boot to my building-folder.
Then I tried make config
.
but I received so many questions and I did't know what I need answer.
When I tried execute command make
I received some errors.
I fixed it's with install of gcc, bc, "Development tools". Then, I choiced random answers, when received questions about what modules I want to see in my kernel. And.... command make
wasn't succeses no one time.
Then, I tried
make menuconfig
I installed ncurses and ncurses-dev. I explored menu and had choice many modules, but kernel not wanted to build again and again. When I was very angry and I wanted broke my laptop, I tryed command
make olddefconfig
It sets new symbols to their default value.
Then, I executed make
it was succeses, and make modules
it was succeses too.
Then I tried to install it with commands
sudo make install && sudo make modules_install
grub2-mkconfig -o /boot/grub/grub.cfg
Then I execute reboot
command and I booted with new kernel!
[root@otuslinux linux-otus]# uname -r
4.16.41
My file .config
you can find in this repo in the folder homework1 README.md file.
Домашнее задание работа с mdadm. добавить в Vagrantfile еще дисков сломать/починить raid собрать R0/R5/R10 на выбор прописать собранный рейд в конф, чтобы рейд собирался при загрузке создать GPT раздел и 5 партиций
Для выполнения скачал репозиторий, который выложил Алексей, поднял из Vagrantfile виртуалку. Поигрался с fdisk, parted, sfdisk,mdadm.
Добавил в Vagrantfile еще дисков. Посоздавал разные виды RAID-массивов, поломал и починил рейды.
"Сломал" один из дисков, удалив его с помощью fdisk
Вывод mdadm --detail /dev/md0
[root@otuslinux vagrant]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Apr 29 06:56:08 2018
Raid Level : raid5
Array Size : 1269760 (1240.00 MiB 1300.23 MB)
Used Dev Size : 253952 (248.00 MiB 260.05 MB)
Raid Devices : 6
Total Devices : 5
Persistence : Superblock is persistent
Update Time : Sun Apr 29 13:42:23 2018
State : clean, degraded
Active Devices : 5
Working Devices : 5
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : otuslinux:0 (local to host otuslinux)
UUID : 165fad63:be45682d:f4605106:cfcafc0e
Events : 24
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
- 0 0 1 removed
2 8 49 2 active sync /dev/sdd1
3 8 65 3 active sync /dev/sde1
4 8 81 4 active sync /dev/sdf1
6 8 97 5 active sync /dev/sdg1
Создал и подключил его снова с помощью `mdadm /dev/md0 --add /dev/sdc1`
Вывод mdadm --detail /dev/md0
[root@otuslinux vagrant]# mdadm --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Sun Apr 29 06:56:08 2018
Raid Level : raid5
Array Size : 1269760 (1240.00 MiB 1300.23 MB)
Used Dev Size : 253952 (248.00 MiB 260.05 MB)
Raid Devices : 6
Total Devices : 6
Persistence : Superblock is persistent
Update Time : Sun Apr 29 13:44:01 2018
State : clean
Active Devices : 6
Working Devices : 6
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : otuslinux:0 (local to host otuslinux)
UUID : 165fad63:be45682d:f4605106:cfcafc0e
Events : 43
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
7 8 33 1 active sync /dev/sdc1
2 8 49 2 active sync /dev/sdd1
3 8 65 3 active sync /dev/sde1
4 8 81 4 active sync /dev/sdf1
6 8 97 5 active sync /dev/sdg1
Прописал собранный рейд в конфиг-файл /etc/mdadm/mdadm.conf, чтобы рейд собирался при загрузке
DEVICE partitions
ARRAY /dev/md0 level=raid5 num-devices=3 metadata=1.2 spares=1 name=otuslinux:0 UUID=91d04df9:c9eaa201:6a1f2e2e:9b1806e3
Затем удалил машину и прописал в Vagrantfile копирование в виртуалку скрипта создания разделов из подключенных дисков,
А также его запуск и создание рейд-массива из этих разделов, а также создание файла /etc/mdadm/mdadm.conf и создание файловой системы на устройстве /dev/md0 и его монтирование в /mnt.
Vagrantfile
# -*- mode: ruby -*-
# vim: set ft=ruby :
MACHINES = {
:otuslinux => {
:box_name => "centos/7",
:ip_addr => '192.168.11.101',
:disks => {
:sata1 => {
:dfile => './sata1.vdi',
:size => 250,
:port => 1
},
:sata2 => {
:dfile => './sata2.vdi',
:size => 250, # Megabytes
:port => 2
},
:sata3 => {
:dfile => './sata3.vdi',
:size => 250,
:port => 3
}
}
},
}
Vagrant.configure("2") do |config|
MACHINES.each do |boxname, boxconfig|
config.vm.define boxname do |box|
box.vm.box = boxconfig[:box_name]
box.vm.host_name = boxname.to_s
#box.vm.network "forwarded_port", guest: 3260, host: 3260+offset
box.vm.network "private_network", ip: boxconfig[:ip_addr]
box.vm.provider :virtualbox do |vb|
vb.customize ["modifyvm", :id, "--memory", "1024"]
vb.customize ["storagectl", :id, "--name", "SATA", "--add", "sata" ]
boxconfig[:disks].each do |dname, dconf|
unless File.exist?(dconf[:dfile])
vb.customize ['createhd', '--filename', dconf[:dfile], '--variant', 'Fixed', '--size', dconf[:size]]
end
vb.customize ['storageattach', :id, '--storagectl', 'SATA', '--port', dconf[:port], '--device', 0, '--type', 'hdd', '--medium', dconf[:dfile]]
end
end
config.vm.provision "file", source: "script.sh", destination: "/home/vagrant/script.sh"
box.vm.provision "shell", inline: <<-SHELL
mkdir -p ~root/.ssh
cp ~vagrant/.ssh/auth* ~root/.ssh
yum install -y mdadm smartmontools hdparm gdisk
cd /home/vagrant && bash ./script.sh
mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 /dev/sdd1
mkdir /etc/mdadm && touch /etc/mdadm/mdadm.conf
echo "DEVICE partitions" > /etc/mdadm/mdadm.conf
mdadm --detail --scan --verbose | awk '/ARRAY/ {print}' >> /etc/mdadm/mdadm.conf
mkfs.ext4 /dev/md0
mount /dev/md0 /mnt
SHELL
end
end
end
Чтобы проверить выполнение работы, достаточно скопировать себе на машину файлы из директории homework2 - Vagrantfile и script.sh, а затем запустить в этом каталоге команду `vagrant up`
Домашнее задание Работа с LVM на имеющемся образе /dev/mapper/VolGroup00-LogVol00 38G 738M 37G 2% / уменьшить том под / до 8G выделить том под /home выделить том под /var /var - сделать в mirror /home - сделать том для снэпшотов прописать монтирование в fstab попробовать с разными опциями и разными файловыми системами ( на выбор) - сгенерить файлы в /home/ - снять снэпшот - удалить часть файлов - восстановится со снэпшота - залоггировать работу можно с помощью утилиты screen * на нашей куче дисков попробовать поставить btrfs/zfs - с кешем, снэпшотами - разметить здесь каталог /opt
уменьшить том под / до 8G
Почитав документацию Red Hat, нашел там упоминание о том, что XFS можно только увеличить, но никак не уменьшить, опечалился и пошел гуглить. Оказалось все очень даже возможно. Не из коробки, но с применением достаточно прочных костылей.
По итогу, для того, чтобы уменьшить том под / до 8G, был добавлен еще один диск, куда был сделан дамп файловой системы с VolGroup00-LogVol00
Процесс выполнения:
mkdir /mnt/root_backup
mount /dev/sdf1 /mnt/root_dump
xfsdump /mnt/root_backup/root_dump.tmp /
Затем я загрузился с установочного диска в Rescue mode, так как виртуалка никак не хотела грузиться в rescue mode ни с помощью systemctl isolate rescue.target
, ни с помощью прописывания systemd.unit=rescue.target в параметрах grub.
После загрузки в rescue mode, я зашел в shell и выполнил (не считая поиска lsblk,vgs,lvs, чтобы вспомнить, где оно лежит)
lvremove /dev/VolGroup00/LogVol00 - чтобы удалить раздел
lvcreate -L 8G -n LogVol00 VolGroup00 - чтобы создать раздел необходимо размера
mkfs.xfs /dev/VolGroup00/LogVol00
mkdir /mnt/root_backup
mkdir /mnt/root_new
mount /dev/sdf1 /mnt/root_bakup
mount /dev/VolGroup00/LogVol00 /mnt/root_new
xfsrestore /mnt/root_dump.tmp /mnt/root_new
reboot
После перезагрузки увидел результат успешно выплненного первого задания
[root@otuslinux vagrant]# df -hT
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00 xfs 8.0G 1.7G 6.3G 22% /
Далее нужно было выделить том под /home и под /var
lvcreate -L 200M -m1 -n LogVol02 VolGroup02 - создал зеркало под /var
mkfs.xfs /dev/VolGroup02/LogVol02
Смонтировал LogVol00 и VolGroup02 во временные папки
mount /dev/VolGroup00/LogVol00 /mnt/root_temp
mount /dev/VolGroup02/LogVol02 /mnt/var_new
Скопировал все содержимое /var
cp -a /mnt/root_temp/var/* /mnt/var_new
Удалил все содержимое /var на текущей файловой системе
rm -rf /mnt/root_temp/var/*
Добавил в /etc/fstab строку
/dev/mapper/VolGroup02-LogVol02 /var xfs defaults,noatime 0 0
lvcreate -L 300M -n LogVol03 VolGroup00
mkfs.xfs /dev/VolGroup00/LogVol03
Смонтировал VolGroup03 во временную папку
mount /dev/VolGroup00/LogVol03 /mnt/home_new
Скопировал все содержимое /home
cp -a /mnt/root_temp/home/* /mnt/home_new
Удалил все содержимое /home на текущей файловой системе
rm -rf /mnt/root_temp/home/*
Добавил в /etc/fstab строку
/dev/mapper/VolGroup00-LogVol03 /home xfs defaults 0 0
Попробовал что такое снапшоты
for i in {1..10}; do touch /home/file_$i;done
lvcreate -L 300M -s -n LogVol03-snap0 /dev/VolGroup00/LogVol03
Удалил часть файлов
Восстановил из снапшота:
lvconvert --merge /dev/VolGroup00/LogVol03-snap0
C btrfs на работе сталкивался в NAS от Synology. Вдруг начались проблемы с производительностью. В рабочий час пик, иногда, утилизация раздела составляла 100% и хранилка зависала намертво и висела по 10-20 минут, после этого, утилизация раздела опять приходила в норму. Поймали ее на том, что в моменты пиковой нагрузки процесс btrfs-cleaner нагружал диски. Все осложнялось тем, что в этих NAS Linux, но дико урезанный и поставить какой-то iostat на нашу модель нет возможности, да и вообще всяческие *top. Проблему удалось решить выставлением noatime в /etc/fstab, что повысило производительность при максимальной нагрузке где-то на 20% по утилизации диска.
Работа с загрузчиком 1. Попасть в систему без пароля несколькими способами 2. Установить систему с LVM, после чего переименовать VG 3. Добавить модуль в initrd 4(*). Сконфигурировать систему без отдельного раздела с /boot, а только с LVM Репозиторий с пропатченым grub: https://yum.rumyantsev.com/centos/7/x86_64/ PV необходимо инициализировать с параметром --bootloaderareasize 1m
Попасть в систему без пароля несколькими способами
- Прописать в конфигурации GRUB параметр
rd.break
. Этот параметр останавливает загрузку на стадии initramfs и позволит сбросить пароль пользователя, например, root. После загрузки монтируем /sysroot командойmount -o remount,rw /sysroot
и меняем текущий корень командойchroot /sysroot
. Далее командойpasswd
меняем пароль учетной записи root. Затем, чтобы это все сохранилось, либо создаем в корне файл .autorelabel командойtouch /.autorelabel
или выполняем команды
load_policy -i # загружаем SELinux policy
chcon -t shadow_t /etc/shadow #Для выбора корректного типа контекста
-
Загрузиться с LiveCD в Troubleshooting - Rescue a CentOS system
-
Добавить в параметры загрузки вместо
ro
пишемrw init=/bin/sh
, затем проделать все то же, что и в пункте 1.
Установить систему с LVM, после чего переименовать VG
- Установил CentOS 7 с образа и создал разделы:
- Переименовал VG командой
vgrename centos centos_renamed
- Переименовал vg с именем centos на centos_renamed в файлах
/etc/fstab
/etc/default/grub
/boot/grub2/grub.cfg
- Собрал новый initramfs.img, чтобы он знал, что изменилось имя VG
mkinitrd -f -v /boot/initramfs-$(uname -r).img $(uname -r)
- Перезагрузил систему.
Добавить модуль в initrd
Гуглил чего бы такого добавить в initrd, но ничего этакого не нашел, поэтому, решил использовать модуль, который показывал Александр на занятии.
mkdir /usr/lib/dracut/modules.d/01test # создал каталог для скриптов установки модуля
И два файла со следующим содержимым:
module_setup.sh
Скрипт предназначен для установки модуля test.sh
#!/bin/bash
check() {
return 0
}
depends() {
return 0
}
install() {
inst_hook cleanup 00 "${moddir}/test.sh"
}
test.sh
Сам модуль
#!/bin/bash
exec 0<>/dev/console 1<>/dev/console 2<>/dev/console
cat <<'msgend'
Hello! You are in dracut module!
___________________
< I'm Tux >
-------------------
\
\
.--.
|o_o |
|:_/ |
// \ \
(| | )
/'\_ _/`\
\___)=(___/
msgend
sleep 10
echo " continuing...."
Пересоздал initrd командой
mkinitrd -f -v -a test /boot/initramfs-$(uname -r).img $(uname -r)
Вывод команды
lsinitrd -m /boot/initramfs-$(uname -r).img
Image: /boot/initramfs-3.10.0-693.el7.x86_64.img: 20M
========================================================================
Early CPIO image
========================================================================
drwxr-xr-x 3 root root 0 May 15 03:14 .
-rw-r--r-- 1 root root 2 May 15 03:14 early_cpio
drwxr-xr-x 3 root root 0 May 15 03:14 kernel
drwxr-xr-x 3 root root 0 May 15 03:14 kernel/x86
drwxr-xr-x 2 root root 0 May 15 03:14 kernel/x86/microcode
-rw-r--r-- 1 root root 17408 May 15 03:14 kernel/x86/microcode/GenuineIntel.bin
========================================================================
Version: dracut-033-502.el7
dracut modules:
bash
<b>test</b>
....
Что говорит о том, что наш кастомный модуль был загружен.
Сделаем reboot
При перезагрузке видим нашего Тукса
Скрипт проверяет текущий уровень LA за минуту и пишет значение LA в лог Если последние 5+ минут LA больше 2, собирается информация о нагрузке - Логи top, iotop, список ip-адресов, с которых было больше всего запросов к nginx, mysql processlist, лог отправляется админу на почту. скрипт нужно добавить в cron для выполнения раз в минуту.
Я понимаю, что скрипт до умопомрачения прост и там нет регэкспов, циклов, трапов и функций, но, он позволил решить производственную задачу мониторинга LA на серверах.
system_load_analyzer.sh
#!/usr/bin/env bash
# Скрипт проверяет текущий уровень LA за минуту и пишет значение LA в лог
# Если последние 5+ минут LA больше 2, собирается информация о нагрузке -
# Логи top, iotop, список ip-адресов, с которых было больше всего запросов к nginx,
# mysql processlist, лог отправляется админу на почту.
# скрипт нужно добавить в cron для выполнения раз в минуту.
uptime | tr -s " " | cut -d' ' -f9 | cut -d, -f1,2 >> /tmp/load_analize.log
SUM=`tail -n5 /tmp/load_analize.log | awk '{ SUM += $1 } END {print SUM}'`
if [[ $SUM -ge 10 ]]
then
echo -e "\n\nОтчет о повышенной нагрузке $HOSTNAME\n\nВывод uptime\n\n" > /tmp/system_load_analize.log
echo -e "\nВывод top c сортировкой по использованию MEM\n\n" >> /tmp/system_load_analize.log
top -b -o +%MEM -n 1 | sed 1,6d | head -10 >> /tmp/system_load_analize.log
echo -e "\nВывод top c сортировкой по использованию CPU\n\n" >> /tmp/system_load_analize.log
top -b -o +%CPU -n 1 | sed 1,6d | head -10 >> /tmp/system_load_analize.log
echo -e "\nВывод iotop\n\n" >> /tmp/system_load_analize.log
iotop -b -n 1 | head -20 >> /tmp/system_load_analize.log
echo -e "\nСписок самых активных IP, делающих запросы к нашему NGINX\n\n" >> /tmp/system_load_analize.log
cat /var/log/nginx/access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | tail -n20 >>
/tmp/system_load_analize.log
echo -e "\nСписок процессов mysql\n\n" >> /tmp/system_load_analize.log
mysql -uroot -p`cat /root/.mysql/root` -e "show processlist" >> /tmp/system_load_analize.log #/root/.mysql/root это файл с паролем рута, который генерится при создании виртуалки стандартной конфигурации
mail -s "Отчет о повышенной нагрузке на сервере $HOSTNAME" [email protected] < /tmp/system_load_analize.log
else
exit 0
fi
1. Написать сервис, который будет раз в 30 секунд мониторить лог на предмет наличия ключевого слова. Файл и слово должны задаваться в /etc/sysconfig
2. Из epel установить spawn-fcgi и переписать init-скрипт на unit-файл. Имя сервиса должно так же называться.
3. Дополнить юнит-файл apache httpd возможностьб запустить несколько инстансов сервера с разными конфигами
Написать сервис, который будет раз в 30 секунд мониторить лог на предмет наличия ключевого слова. Файл и слово должны задаваться в /etc/sysconfig
Сервис работает следующим образом: раз в 30 секунд грепает в конфиге,
определенном в EnvironmentFile /etc/sysconfig/grep_log, слово,
определенное там же ( соответствующие переменные $FILE и $WORD)
Сам сервис представлен файлами /libsystemd/system/grep_log.service и grep_log.timer.
Первый описывает функционал сервиса, второй его периодический запуск раз в 30 секунд.
Из epel установить spawn-fcgi и переписать init-скрипт на unit-файл. Имя сервиса должно так же называться.
Скрипт доступен в подпапке 2 для этой ДЗ.
Наглядно видно, как упростилась жизнь администратора, по сравнению с написанием init-скриптов.
[Unit]
Description=Spawn-fsgi service
After=network.target
[Service]
Type=forking
EnvironmentFile=/etc/sysconfig/spawn-fcgi
ExecStart=/usr/bin/spawn-fcgi $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
Дополнить юнит-файл apache httpd возможностьб запустить несколько инстансов сервера с разными конфигами
Добавил в файл /lib/systemd/system/[email protected] в путь к EnvironmentFile, спецификатор %i
EnvironmentFile=/etc/sysconfig/httpd-%i
Что позволило создать множество файлов конфигурации,
которые с помощью параметра OPTIONS указывают на различные файлы конфигов,
например, /etc/httpd/conf/httpd-{new1,new2,new3}
Запуск производится так:
systemctl start [email protected]
Скрипт запускает два задания на архивирование каталога var один с наивысшим приоритетом, другой с низшим приоритетом.
В лог пишется date пачала выполнения и окончания выполнения команд архивирования.
Как видно по итогам выполнения, команда, имеющаяя более высокий приоритет, выполняется быстрее, даже будучи запущенной второй.
nice_proc.sh
#!/usr/bin/env bash
rm -rf /tmp/archive_{low,high}.tar.gz > /dev/null 2>&1
echo "" > nice_log.log
lowpri() {
echo "[`date`] Start of script with low priority\n" > nice_log.log
nice -20 tar czvf /tmp/archive_low.tar.gz /boot/* > /dev/null 2>&1
echo "[`date`] End of script with low priority\n" >> nice_log.log
}
hipri() {
echo "[`date`] Start of script with high priority\n" >> nice_log.log
nice --19 tar czvf /tmp/archive_high.tar.gz /boot/* > /dev/null 2>&1
echo "[`date`] End of script with high priority\n" >> nice_log.log
}
lowpri &
hipri &
cat nice_log.log
Размещаем свой RPM в своем репозитории
1) создать свой RPM (можно взять свое приложение, либо собрать к примеру апач с определенными опциями)
2) создать свой репо и разместить там свой RPM
реализовать это все либо в вагранте, либо развернуть у себя через nginx и дать ссылку на репо
Для выполнения домашней работы выбрал собрать пакет nginx с модулем защиты от DDoS testcookie-nginx-module, чтобы получить rpm пакет с уже интегрированным модулем.
Создать свой RPM
Процесс выглядел так:
Создал дерево каталогов для сборки
rpmdev-setuptree
Скачал и установил src-пакет для сборки
rpm -Uvh nginx-1.12.0-1.el7.ngx.src.rpm
Склонировал с github необходимый модуль
git clone https://github.com/kyprizel/testcookie-nginx-module.git
Отредактировал SPECS/nginx.spec в части %build добавил опцию
--add-dynamic-module=/home/builder/testcookie-nginx-module/
Запустил сборку rpm, попросила доустановить зависимости, поставил, потом отредактировал spec-файл в части %files, добавив testcookie-nginx-module.so,
Запустил заново
rpmbuild -bb nginx.spec -D 'debug_package %{nil}'
(-D 'debug_package %{nil}' - был необходим из-за бага rpm, который висит с 2007 года и при определенных условиях не собирается rpm из-за debug-модуля )
Ииииииии он собрался.
Cоздать свой репо и разместить там свой RPM
Создал каталог /reposite, скопировал туда свой пакет, выполнил createrepo /reposite
Поставил nginx, добавил в конфиг root /reposite, запустил systemctl start nginx и сделал systemctl enable nginx.
Репо работает здесь: https://35.207.49.222/
Для установки пакетов из него, необходимо создать репо-файл в /etc/yum.repos.d с примерно таким содержимым:
[examplerepo]
name=My Repository
baseurl=https://35.207.49.222/
enabled=1
gpgcheck=0
priority=1
И поставить пакет yum-priorities для того, чтобы работал параметр, задающий приоритет репозитория.
Затем, попробовать установить пакет nginx.
Постановка задачи
Дано Vagrantfile с начальным построением сети inetRouter centralRouter centralServer
тестировалось на virtualbox
Планируемая архитектура построить следующую архитектуру
Сеть office1
- 192.168.2.0/26 - dev
- 192.168.2.64/26 - test servers
- 192.168.2.128/26 - managers
- 192.168.2.192/26 - office hardware
Сеть office2
- 192.168.1.0/25 - dev
- 192.168.1.128/26 - test servers
- 192.168.1.192/26 - office hardware
Сеть central
- 192.168.0.0/28 - directors
- 192.168.0.32/28 - office hardware
- 192.168.0.64/26 - wifi
Office1 ---\
-----> Central --IRouter --> internet
Office2----/
Итого должны получится следующие сервера
- inetRouter
- centralRouter
- office1Router
- office2Router
- centralServer
- office1Server
- office2Server
Теоретическая часть
- Найти свободные подсети
- Посчитать сколько узлов в каждой подсети, включая свободные
- Указать broadcast адрес для каждой подсети
- проверить нет ли ошибок при разбиении
Практическая часть
- Соединить офисы в сеть согласно схеме и настроить роутинг
- Все сервера и роутеры должны ходить в инет черз inetRouter
- Все сервера должны видеть друг друга
- у всех новых серверов отключить дефолт на нат (eth0), который вагрант поднимает для связи
- при нехватке сетевых интервейсов добавить по несколько адресов на интерфейс
Выполнение домашней работы
Выполненная работа в файле Vagrantfile
Чтобы проверить работу, необходимо скопировать файл Vagrantfile к себе на компьютер
и выполнить vagrant up
(Должен быть установлен Vagrant)
Теоретическая часть
- Найти свободные подсети
Если я правильно понял, то это незаполненные промежутки в сетях /24, например
Central
192.168.0.16/28
192.168.0.48/28
192.168.0.192/26
- Посчитать сколько узлов в каждой подсети, включая свободные
/28 подсеть - 15 адресов - 1 бродкаст - 1 шлюз = 13 адресов для хостов
/26 подсеть - 63 адреса - 1 бродкаст - 1 шлюз = 61 адрес для хостов
/25 подсеть - 127 адресов - 1 бродкаст - 1 шлюз = 125 адресов для хостов
- Указать broadcast адрес для каждой подсети
Central-network
directors 192.168.0.0/28 - бродкаст - 192.168.0.15
office-hw 192.168.0.32/28 - бродкаст - 192.168.0.47
wi-fi 192.168.0.64/26 - бродкаст - 192.168.0.191
Office1-network
dev 192.168.2.0/26 - бродкаст - 192.168.2.63
test servers 192.168.2.64/26 - бродкаст - 192.168.2.127
managers 192.168.2.128/26 - бродкаст - 192.168.2.191
hw 192.168.2.192/26 - бродкаст - 192.168.2.255
Office2-network
dev 192.168.1.0/25 - бродкаст - 192.168.1.127
test servers 192.168.1.128/26 - бродкаст - 192.168.2.191
hw 192.168.2.192/26 - бродкаст - 192.168.2.255
- проверить нет ли ошибок при разбиении
Не понял, что тут нужно сделать. Вроде ошибок нет
Практическая часть
Для проверки практической части нужно запустить Vagrantfile и собрать тестовый стенд командой vagrant up
Сетевых интерфесов хватило. Насколько понял, можно как в цисках делать сабинтерфейсы, например, я бы сделал
в роутере centralRouter один интерфейс на сети 192.168.0.X, его бы уже делил на сабинтерфейсы.
Но я ж двоечник, нужно еще две домашки догнать, попробовал в качестве теста на живых машинах - работает, в Vagrant-файл не стал скрипты втыкать для сабинтерфейсов.
Первый и второй пункт выполнены.
В Vagrantfile.
Для проверки работы проекта, нужно клонировать репозиторий и выполнить vagrant up
из каталога homework10_networks_basic
.
Домашнее задание
VPN
1. Между двумя виртуалками поднять vpn в режимах
- tun
- tap
Прочуствовать разницу.
- Поднять RAS на базе OpenVPN с клиентскими сертификатами, подключиться с локальной машины на виртуалку
Первая задача
Для проверки работы проекта необходимо
клонировать репозиторий,
В каталоге homework11_networks_tunnels/1 есть 3 файла
emergency.key
Vagrantfile_tap
Vagrantfile_tun
из каталога homework11_networks_tunnels/1 выполнить переименование соответствующего файла Vagrantfile
и выполнить vagrant up
В процессе провижинга будут развернуты 2 виртуальные машины - centralRouter и office1Router,
на роутерах будет установлен openvpn и iperf, также будет скопирован файл ключа emergency.key и
созданы конфигурационные файлы openvpn
В конце развертывания iperf выполнить тестирование скорости соединения.
В результате приходим к выводу, что скорость передачи на tun выше, чем на tap:
office1Router: Network speed on tap interface
office1Router: ------------------------------------------------------------
office1Router: Client connecting to 10.10.10.1, TCP port 5001
office1Router: TCP window size: 45.0 KByte (default)
office1Router: ------------------------------------------------------------
office1Router: [ 3] local 10.10.10.2 port 59666 connected with 10.10.10.1 port 5001
office1Router: [ ID] Interval Transfer Bandwidth
office1Router: [ 3] 0.0- 5.0 sec 72.9 MBytes 122 Mbits/sec
office1Router: [ 3] 5.0-10.0 sec 71.4 MBytes 120 Mbits/sec
office1Router: [ 3] 10.0-15.0 sec 59.2 MBytes 99.4 Mbits/sec
office1Router: [ 3] 15.0-20.0 sec 64.9 MBytes 109 Mbits/sec
office1Router: [ 3] 0.0-20.0 sec 268 MBytes 112 Mbits/sec
office1Router: Network speed on tun interface
office1Router: ------------------------------------------------------------
office1Router: Client connecting to 10.10.10.1, TCP port 5001
office1Router: TCP window size: 76.5 KByte (default)
office1Router: ------------------------------------------------------------
office1Router: [ 3] local 10.10.10.2 port 35772 connected with 10.10.10.1 port 5001
office1Router: [ ID] Interval Transfer Bandwidth
office1Router: [ 3] 0.0- 5.0 sec 84.1 MBytes 141 Mbits/sec
office1Router: [ 3] 5.0-10.0 sec 82.1 MBytes 138 Mbits/sec
office1Router: [ 3] 10.0-15.0 sec 84.4 MBytes 142 Mbits/sec
office1Router: [ 3] 15.0-20.0 sec 81.4 MBytes 137 Mbits/sec
office1Router: [ 3] 0.0-20.0 sec 332 MBytes 139 Mbits/sec
Вторая задача
Для проверки работы проекта необходимо
клонировать репозиторий,
В каталоге homework11_networks_tunnels/2 есть 2 файла
client.conf
Vagrantfile
из каталога homework11_networks_tunnels/2 выполнить vagrant up
В процессе провижинга будет развернута виртуальная машина openvpnserver,
будет установлен openvpn, создан СА, сгенерированы ключи сервера и клиента,
создан конфигурационный файл openvpn сервера, все это можно найти в каталоге
/etc/openvpn
сервера. Для дальнейшего подключения, необходимо скопировать с виртуальной машины
файлы ca.crt, client.crt и client.key и положить их рядом с конфигом client.conf из каталога данной задачи.
Также, в конфиге client.conf необходимо заменить ip-адрес сервера в опции remote
Адрес можно получить, выполнив ip a
на виртуальной машине или из вывода ip a в конце скрипта развертывания.
Потом нужно открыть конфиг файл client.conf с помощью любимого openvpn-приложения
и вы будете подключены к openvpnserver.
Проверить подключение можно пропинговав адрес 10.0.0.1 со своей машины.
Домашнее задание
OSPF
- Поднять три виртуалки
- Объединить их разными vlan
- Поднять OSPF между машинами на базе Quagga
- Изобразить ассиметричный роутинг
- Сделать один из линков "дорогим", но что бы при этом роутинг был симметричным
Задача 1 Поднять OSPF между машинами на базе Quagga
Проверить выполнение можно клонировав себе этот репозиторий
Затем необходимо из каталога /homework12_network_routing/1
запуcтить vagrant up
В результате поднимутся три роутера в структуре как на схеме ниже
Вывод ip a
R1
[vagrant@R1 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85789sec preferred_lft 85789sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:fc:8f:78 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:e2:c8:e5 brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:4d:b9:3c brd ff:ff:ff:ff:ff:ff
inet 10.1.0.1/24 brd 10.1.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe4d:b93c/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:fc:8f:78 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.1/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefc:8f78/64 scope link
valid_lft forever preferred_lft forever
7: vlan13@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:e2:c8:e5 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.1/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fee2:c8e5/64 scope link
valid_lft forever preferred_lft forever
R2
[vagrant@R2 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85826sec preferred_lft 85826sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:86:a4:2b brd ff:ff:ff:ff:ff:ff
inet6 fe80::18dc:36f4:f185:ad74/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:5d:c9:e2 brd ff:ff:ff:ff:ff:ff
inet6 fe80::b4ed:20a9:3edd:3ea1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:b2:e6:cd brd ff:ff:ff:ff:ff:ff
inet 10.2.0.1/24 brd 10.2.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feb2:e6cd/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:86:a4:2b brd ff:ff:ff:ff:ff:ff
inet 192.168.12.2/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe86:a42b/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:5d:c9:e2 brd ff:ff:ff:ff:ff:ff
inet 192.168.23.1/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe5d:c9e2/64 scope link
valid_lft forever preferred_lft forever
R3
[vagrant@R3 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85933sec preferred_lft 85933sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:b7:a8:0c brd ff:ff:ff:ff:ff:ff
inet6 fe80::598b:2f21:35c1:2edd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:72:de:ab brd ff:ff:ff:ff:ff:ff
inet6 fe80::f425:f396:426f:53d3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:23:3a:03 brd ff:ff:ff:ff:ff:ff
inet 10.3.0.1/24 brd 10.3.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe23:3a03/64 scope link
valid_lft forever preferred_lft forever
6: vlan13@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:b7:a8:0c brd ff:ff:ff:ff:ff:ff
inet 192.168.13.2/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feb7:a80c/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:72:de:ab brd ff:ff:ff:ff:ff:ff
inet 192.168.23.2/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe72:deab/64 scope link
valid_lft forever preferred_lft forever
конфиги /etc/quagga/*
/etc/quagga/daemons
zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
/etc/quagga/ospfd.conf
hostname R1
router ospf
ospf router-id 192.168.12.1
network 192.168.12.0/30 area 0
network 192.168.13.0/30 area 0
network 10.1.0.0/24 area 1
redistribute connected
log file /var/log/quagga/ospfd.log
/etc/quagga/zebra.conf
hostname R1
log file /var/log/quagga/zebra.log
interface eth3
ip address 10.1.0.1/24
interface vlan12
ip address 192.168.12.1/30
interface vlan13
ip address 192.168.13.1/30
вывод tracepath
[vagrant@R1 ~]$ tracepath 10.3.0.1 1?: [LOCALHOST] pmtu 1500 1: 10.3.0.1 0.571ms reached 1: 10.3.0.1 0.940ms reached Resume: pmtu 1500 hops 1 back 1
[vagrant@R3 ~]$ tracepath 10.1.0.1 1?: [LOCALHOST] pmtu 1500 1: 10.1.0.1 0.393ms reached 1: 10.1.0.1 0.663ms reached Resume: pmtu 1500 hops 1 back 1
Все network-скрипты и файлы конфигурации quagga
можно увидеть в каталоге network-scripts
Задача 2 Изобразить ассиметричный роутинг
Проверить выполнение можно клонировав себе этот репозиторий
Затем необходимо из каталога /homework12_network_routing/2
запуcтить vagrant up
Для выполнения задачи, я повесил cost 300 на интерфейс vlan13 роутера R1 как на схеме.
Вывод ip a
R1
[vagrant@R1 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 84867sec preferred_lft 84867sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:83:bc:45 brd ff:ff:ff:ff:ff:ff
inet6 fe80::bf10:53fc:cf71:bac1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ab:9e:63 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5a3e:fdf2:7ae3:7bf1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:87:a7:82 brd ff:ff:ff:ff:ff:ff
inet 10.1.0.1/24 brd 10.1.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe87:a782/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:83:bc:45 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.1/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe83:bc45/64 scope link
valid_lft forever preferred_lft forever
7: vlan13@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:ab:9e:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.1/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feab:9e63/64 scope link
valid_lft forever preferred_lft forever
R2
[vagrant@R2 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 84895sec preferred_lft 84895sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:c2:64:c4 brd ff:ff:ff:ff:ff:ff
inet6 fe80::6f34:64d3:f2e2:1f0/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:2f:a8:12 brd ff:ff:ff:ff:ff:ff
inet6 fe80::dbcf:5635:66d8:bf99/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:7d:d3:f8 brd ff:ff:ff:ff:ff:ff
inet 10.2.0.1/24 brd 10.2.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe7d:d3f8/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:c2:64:c4 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.2/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fec2:64c4/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:2f:a8:12 brd ff:ff:ff:ff:ff:ff
inet 192.168.23.1/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe2f:a812/64 scope link
valid_lft forever preferred_lft forever
R3
[root@R3 vagrant]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 84976sec preferred_lft 84976sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:37:b3:9e brd ff:ff:ff:ff:ff:ff
inet6 fe80::1dda:548e:4d68:ecbd/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:1b:ab:b8 brd ff:ff:ff:ff:ff:ff
inet6 fe80::9f1:6fd:7d74:9cc4/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:3e:05:5e brd ff:ff:ff:ff:ff:ff
inet 10.3.0.1/24 brd 10.3.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe3e:55e/64 scope link
valid_lft forever preferred_lft forever
6: vlan13@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:37:b3:9e brd ff:ff:ff:ff:ff:ff
inet 192.168.13.2/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe37:b39e/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:1b:ab:b8 brd ff:ff:ff:ff:ff:ff
inet 192.168.23.2/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe1b:abb8/64 scope link
valid_lft forever preferred_lft forever
конфиги /etc/quagga/*
/etc/quagga/daemons
zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
/etc/quagga/ospfd.conf
hostname R1
router ospf
ospf router-id 192.168.12.1
network 192.168.12.0/30 area 0
network 192.168.13.0/30 area 0
network 10.1.0.0/24 area 1
redistribute connected
interface vlan13
ip ospf cost 300
log file /var/log/quagga/ospfd.log
/etc/quagga/zebra.conf
hostname R1
log file /var/log/quagga/zebra.log
interface eth3
ip address 10.1.0.1/24
interface vlan12
ip address 192.168.12.1/30
interface vlan13
ip address 192.168.13.1/30
вывод tracepath
Соответственно, траффик от R3 до R1 идет на прямую
root@R3 vagrant]# tracepath 10.1.0.1
1?: [LOCALHOST] pmtu 1500
1: 10.1.0.1 0.601ms reached
1: 10.1.0.1 0.614ms reached
Resume: pmtu 1500 hops 1 back 1
А от R1 до R3 по пути наименьшей стоимости:
[vagrant@R1 ~]$ tracepath 10.3.0.1
1?: [LOCALHOST] pmtu 1500
1: 192.168.12.2 0.511ms
1: 192.168.12.2 0.514ms
2: 10.3.0.1 1.271ms reached
Resume: pmtu 1500 hops 2 back 2
Все network-скрипты и файлы конфигурации quagga
можно увидеть в каталоге network-scripts
Задача 3 Сделать один из линков "дорогим", но что бы при этом роутинг был симметричным
Проверить выполнение можно клонировав себе этот репозиторий
Затем необходимо из каталога /homework12_network_routing/3
запуcтить vagrant up
Для выполнения задачи, я повесил cost 300 на интерфейс vlan13 роутера R1 и роутера R3 как на схеме.
Вывод ip a
R1
[vagrant@R1 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85293sec preferred_lft 85293sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:bc:fb:ca brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:e9:80:ae brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:ab:6a:7c brd ff:ff:ff:ff:ff:ff
inet 10.1.0.1/24 brd 10.1.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:feab:6a7c/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:bc:fb:ca brd ff:ff:ff:ff:ff:ff
inet 192.168.12.1/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:febc:fbca/64 scope link
valid_lft forever preferred_lft forever
7: vlan13@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:e9:80:ae brd ff:ff:ff:ff:ff:ff
inet 192.168.13.1/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fee9:80ae/64 scope link
valid_lft forever preferred_lft forever
R2
[vagrant@R2 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85324sec preferred_lft 85324sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:19:0c:37 brd ff:ff:ff:ff:ff:ff
inet6 fe80::5454:89fd:47b5:6286/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:e6:6c:e9 brd ff:ff:ff:ff:ff:ff
inet6 fe80::efc5:b7de:5c5d:3a41/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:68:5d:50 brd ff:ff:ff:ff:ff:ff
inet 10.2.0.1/24 brd 10.2.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe68:5d50/64 scope link
valid_lft forever preferred_lft forever
6: vlan12@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:19:0c:37 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.2/30 brd 192.168.12.3 scope global noprefixroute vlan12
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe19:c37/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:e6:6c:e9 brd ff:ff:ff:ff:ff:ff
inet 192.168.23.1/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fee6:6ce9/64 scope link
valid_lft forever preferred_lft forever
R3
[vagrant@R3 ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:c9:c7:04 brd ff:ff:ff:ff:ff:ff
inet 10.0.2.15/24 brd 10.0.2.255 scope global noprefixroute dynamic eth0
valid_lft 85419sec preferred_lft 85419sec
inet6 fe80::5054:ff:fec9:c704/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:8d:f1:b1 brd ff:ff:ff:ff:ff:ff
inet6 fe80::bdc6:45f9:a51e:a777/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:cb:3e:56 brd ff:ff:ff:ff:ff:ff
inet6 fe80::b6d7:3e9c:a55d:ec47/64 scope link noprefixroute
valid_lft forever preferred_lft forever
5: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:fb:ab:85 brd ff:ff:ff:ff:ff:ff
inet 10.3.0.1/24 brd 10.3.0.255 scope global noprefixroute eth3
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fefb:ab85/64 scope link
valid_lft forever preferred_lft forever
6: vlan13@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:8d:f1:b1 brd ff:ff:ff:ff:ff:ff
inet 192.168.13.2/30 brd 192.168.13.3 scope global noprefixroute vlan13
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fe8d:f1b1/64 scope link
valid_lft forever preferred_lft forever
7: vlan23@eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 08:00:27:cb:3e:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.23.2/30 brd 192.168.23.3 scope global noprefixroute vlan23
valid_lft forever preferred_lft forever
inet6 fe80::a00:27ff:fecb:3e56/64 scope link
valid_lft forever preferred_lft forever
конфиги /etc/quagga/*
/etc/quagga/daemons
zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no
/etc/quagga/ospfd.conf на R1
hostname R1
router ospf
ospf router-id 192.168.12.1
network 192.168.12.0/30 area 0
network 192.168.13.0/30 area 0
network 10.1.0.0/24 area 1
redistribute connected
interface vlan13
ip ospf cost 300
log file /var/log/quagga/ospfd.log
/etc/quagga/ospfd.conf на R3
hostname R3
router ospf
ospf router-id 192.168.13.2
network 192.168.13.0/30 area 0
network 192.168.23.0/30 area 0
network 10.3.0.0/24 area 3
redistribute connected
interface vlan13
ip ospf cost 300
log file /var/log/quagga/ospfd.log
/etc/quagga/zebra.conf
hostname R1
log file /var/log/quagga/zebra.log
interface eth3
ip address 10.1.0.1/24
interface vlan12
ip address 192.168.12.1/30
interface vlan13
ip address 192.168.13.1/30
вывод tracepath
Соответственно, траффик от R3 до R1 идет через R2
[root@R3 vagrant]# tracepath 10.1.0.1
1?: [LOCALHOST] pmtu 1500
1: 192.168.23.1 0.600ms
1: 192.168.23.1 0.664ms
2: 10.1.0.1 1.350ms reached
Resume: pmtu 1500 hops 2 back 2
А от R1 до R3 тоже идет через R2
[vagrant@R1 ~]$ tracepath 10.3.0.1
1?: [LOCALHOST] pmtu 1500
1: 192.168.12.2 0.549ms
1: 192.168.12.2 0.693ms
2: 10.3.0.1 1.121ms reached
Resume: pmtu 1500 hops 2 back 2
Все network-скрипты и файлы конфигурации quagga
можно увидеть в каталоге network-scripts
- Домашнее задание
настраиваем split-dns
взять стенд https://github.com/erlong15/vagrant-bind
добавить еще один сервер client2
завести в зоне dns.lab имена
web1 - смотрит на клиент1
web2 смотрит на клиент2
named.dns.lab
$TTL 3600
$ORIGIN dns.lab.
@ IN SOA ns01.dns.lab. root.dns.lab. (
2711201407 ; serial
3600 ; refresh (1 hour)
600 ; retry (10 minutes)
86400 ; expire (1 day)
600 ; minimum (10 minutes)
)
IN NS ns01.dns.lab.
IN NS ns02.dns.lab.
; DNS Servers
ns01 IN A 192.168.50.10
ns02 IN A 192.168.50.11
; Clients
web1 IN A 192.168.50.15
web2 IN A 192.168.50.25
завести еще одну зону newdns.lab
завести в ней запись
www - смотрит на обоих клиентов
named.newdns.lab
$TTL 3600
$ORIGIN newdns.lab.
@ IN SOA ns01.newdns.lab. root.newdns.lab. (
2711201407 ; serial
3600 ; refresh (1 hour)
600 ; retry (10 minutes)
86400 ; expire (1 day)
600 ; minimum (10 minutes)
)
IN NS ns01.newdns.lab.
IN NS ns02.newdns.lab.
; DNS Servers
ns01 IN A 192.168.50.10
ns02 IN A 192.168.50.11
; Clients
www IN A 192.168.50.15
www IN A 192.168.50.25
настроить split-dns
клиент1 - видит обе зоны, но в зоне dns.lab только web1
клиент2 видит только dns.lab
master-named.conf
options {
// network
listen-on port 53 { 192.168.50.10; 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
// data
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
// server
recursion yes;
allow-query { any; };
allow-transfer { any; };
// dnssec
dnssec-enable yes;
dnssec-validation yes;
// others
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
// RNDC Control for client
key "rndc-key" {
algorithm hmac-md5;
secret "GrtiE9kz16GK+OKKU/qJvQ==";
};
controls {
inet 192.168.50.10 allow { 192.168.50.15; } keys { "rndc-key"; };
};
acl external { 192.168.50.25; localhost; };
acl internal { key rndc-key; 192.168.50.10; 192.168.50.11; 192.168.50.15; localhost; };
view external {
match-clients { external; };
allow-recursion { any; };
// lab's zone
zone "dns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
file "/etc/named/named.dns.lab";
};
// lab's zone reverse
zone "50.168.192.in-addr.arpa" {
type master;
allow-transfer { key "zonetransfer.key"; };
file "/etc/named/named.dns.lab.rev";
};
// lab's ddns zone
zone "ddns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
allow-update { key "zonetransfer.key"; };
file "/etc/named/named.ddns.lab";
};
};
view internal {
match-clients { internal; };
allow-recursion { any; };
// ZONE TRANSFER WITH TSIG
include "/etc/named.zonetransfer.key";
server 192.168.50.11 {
keys { "zonetransfer.key"; };
};
// zones like localhost
include "/etc/named.rfc1912.zones";
// root's DNSKEY
include "/etc/named.root.key";
// root zone
zone "." IN {
type hint;
file "named.ca";
};
// lab's zone
zone "dns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
file "/etc/named/named.newdns1.lab";
};
// lab's ddns zone
zone "ddns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
allow-update { key "zonetransfer.key"; };
file "/etc/named/named.newddns1.lab";
};
// newdnslab's zone
zone "newdns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
file "/etc/named/named.newdns.lab";
};
// newdnslab's zone reverse
zone "50.168.192.in-addr.arpa" {
type master;
allow-transfer { key "zonetransfer.key"; };
file "/etc/named/named.newdns.lab.rev";
};
// newdnslab's ddns zone
zone "newddns.lab" {
type master;
allow-transfer { key "zonetransfer.key"; };
allow-update { key "zonetransfer.key"; };
file "/etc/named/named.newddns.lab";
};
};
Домашнее задание Сценарии iptables
- реализовать knocking port
- centralRouter может попасть на ssh inetrRouter через knock скрипт пример в материалах
- добавить inetRouter2, который виден(маршрутизируется) с хоста
- запустить nginx на centralServer
- пробросить 80й порт на inetRouter2 8080
- дефолт в инет оставить через inetRouter
Выполнение домашней работы
Выполненная работа в файле Vagrantfile
Чтобы проверить работу, необходимо скопировать файл Vagrantfile к себе на компьютер
и выполнить vagrant up
(Должен быть установлен Vagrant)
реализовать knocking port
Взял скрипт и правила iptables Из примера материалов к уроку.
Вагрант кладет iptables_inetrouter.rules на inetRouter и делает iptables-restore
Чтобы попасть с помощью knocking port на inetrouter, необходимо зайти на centralRouter
и выполнить скрипт /vagrant/knock.sh 192.168.255.1 8881 7777 9991
. Затем, в течение 30 секунд можно
будет покдлючиться по ssh с centralRouter на inetRouter ssh [email protected]
пароль - vagrant
2-5
Сначала я сделал public через бридж, но выбор адаптера - не лучший выбор, поэтому, далее было придумано пробросить через локалхост
При выполнении vagrant up
выполняется установка nginx на centralServer,
с помощью правил, указанных в файле iptables_inetrouter2.rules, на inetRouter2
добавляются правила, пробрасывающие порт 80 на inetRouter2 8080
Дефолт в инет оставлен через inetRouter.
Переделать разворачивание файрвалла (ДЗ 14) а через ansible
Внутри каталога homework16_Ansible сделать vagrant up
и поднимется инфраструктура, аналогичная Homework 14.
Внутри каталога homework17_Ansible сделать vagrant up
Поднимется машина с именем vagrant1.
- Запретить всем пользователям, кроме группы admin логин в выходные и праздничные дни
Особенностью этой машины будет то, что согласно первой задачи, будут созданы 2 пользователя - vasya и petya, а также группа admin.
vasya член группы admin, petya - нет
С помощью pam_script обеспечивается, чтобы члены группы admin могли логиниться по выходным и праздникам, указанным в файле Holidays.
- Дать конкретному пользователю права рута
Не знаю, что именно имелось в виду, но я придумал дать возможность получения su привилегий определенному пользователю через PAM
Для этого, в файл /etc/pam.d/su добавляются строки
account sufficient pam_succeed_if.so user = vasya use_uid quiet
account required pam_succeed_if.so user notin root:vagrant:vasya
Соответственно, пользователь vasya получает возможность использовать повышение привилегий через su root.