# Практическая работа №2. Настройка сети в Linux (на примере Ubuntu)

## Подготовка
На стадии подготовки я загрузил 2 iso образа Ubuntu - desktop и server (рис. 1), после этого я создал snapshot обоих машин, чтобы в случае поломки откатываться назад (рис. 1.1 и 1.2)

<center>Рисунок 1. Машинки Ubuntu</center>

<center>Рисунок 1.1. Snapshot Desktop Ubuntu</center>

<center>Рисунок 1.2. Snapshot Server Ubuntu</center>
## Практическая работа
### Работа в командной строке
1. Посмотреть под каким пользователем в системе Linux
Чтобы знать какие пользователи в настоящее время вошли в Linux, нужно использовать простую команду **who**. Она немедленно выведет список текущих имен пользователей с активным сеансом в системе (рис. 2).

<center>Рисунок 1. Пользователей, вошедший в систему Linux</center>
> Команда: who
2. Перейти в корневой каталог

<center>Рисунок 2. Корневой каталог</center>
3. Посмотреть содержимое каталога

<center>Рисунок 3. Содержимое каталога</center>
4. Определить типы команд ls и cd
Команда **ls** используется в командной оболочке Linux для вывода содержимого каталогов и информации о файлах.
Команда **cd** («изменить каталог») используется для изменения текущего рабочего каталога в Linux и других Unix-подобных операционных системах. Это одна из самых основных и часто используемых команд при работе в терминале Linux.
5. Посмотреть из корневого каталога содержимое директории Home

<center>Рисунок 4. Содержимое home</center>
> Команда: ls home
6. Перейти в директорию /tmp

<center>Рисунок 5. Содержимое tmp</center>
> Команда: cd ../tmp
7. Создать директорию /pt

<center>Рисунок 6. Содержимое pt</center>
> Команда: mrdir pt
8. Создать 3 текстовых документа

<center>Рисунок 7. Создание текстовых документов</center>
> Команда: cat > x.txt
9. Изменить или добавить содержимое текстового документа с помощью редакторов nano и vim
Изменил содержимое текстовых документов 1.txt, 2.txt, 3.txt

<center>Рисунок 8. Изменение содержимого 1.txt</center>

<center>Рисунок 8.1. Изменение содержимого 2.txt</center>

<center>Рисунок 8.2. Изменение содержимого 3.txt</center>
> Команда: nano x.txt
10. Скопировать и переименовать директорию с файлами
Я скопировал директорию pt и переименовал, получилась директория saiko, в которой абсолютно аналогичные файлы директории pt

<center>Рисунок 9. Скопировал директорию pt</center>

<center>Рисунок 9.1. Содержимое директории saiko и pt</center>
> Команда: cp -r "oldFolder" "newFolder"
11. Заархивировать директорию
Я решил заархивировать папку в zip

<center>Рисунок 10. Заархивировал директорию saiko</center>
> Команда: zip -r "newFolder.zip" "oldFolder"
12. Разархивировать директорию
Так как в linux отстутствует разархиватор zip файлов, его пришлось отдельно устанавливать и после этого разархивировать папку

<center>Рисунок 11. Разархивировал директорию newSaiko.zip</center>
> Команда: unzip "Folder.zip"
13. Посмотреть содержимое домашней директории и каталога usr одной командой

<center>Рисунок 12. Содержимое домашней директории</center>
> Команда: ls ~ ../usr
14. Посмотреть содержимое каталога в обратном порядке
-r — reverse (обратный). Показывает содержимое каталога от конца к началу

<center>Рисунок 13. Содержимое домашней директории в обратном порядке</center>
> Команда: ls -r ~ ../usr
15. Посмотреть права на директорию
Чтобы увидеть имеющиеся скрытые файлы (в UNIX системах все файлы начинающиеся с символа точка являются скрытыми). Для решения этой задачи используется короткий ключ **-a** и его длинный аналог **—all** и сразу для получения о содержимом подробной информации используется совместно с ключом **-l**

<center>Рисунок 14. Скрытые файлы</center>
> Команда: ls -la
16. Посмотреть права на текстовые файлы
Команда такая же **ls -la**

<center>Рисунок 15. Скрытые файлы</center>
> Команда: ls -la
17. Переместить и переименовать один текстовый файл в директорию /tmp

<center>Рисунок 16. Перемещение файла</center>

<center>Рисунок 16.1. Переименование файла</center>
> Команда: cp 1.txt /tmp
> mv 1.txt 1.1.txt
18. Создать новую директорию, в ней создать новый текстовый документ, переместить из директории /tmp файл в новую диреторию с заменой файла и запросом на его изменение

<center>Рисунок 17. Новая директория </center>
> Команда: sudo cp -i 1.1.txt /newFolder/
19. Определить местоположение данного исполняемого файла ls, cd

<center>Рисунок 18. Местоположение файла </center>
> Команда: whereis ls
20. Вывести краткое описание команды и утилиты ls, nano, rm

<center>Рисунок 19. Описание некоторых базовых команд </center>
> Команда: whatis ls, nano, rm
21. Создать символические ссылки
В командной оболочке Linux, чтобы создать еще одну жесткую ссылку на файл (ещё одно имя) используется команда **ln** (от "link" – ссылка, связывать). Первым аргументом указывается существующее имя файла, вторым – имя новой ссылки. Адреса обоих аргументов могут быть как относительными, так и абсолютными. Символьные ссылки создаются с помощью той же команды **ln**, однако используется ключ **-s** (от "symbolic"). В качестве первого аргумента пишется абсолютный адрес файла или каталога, на который делается ссылка, в качестве второго – абсолютный или относительный адрес создаваемой мягкой ссылки

<center>Рисунок 20. Ссылки </center>
22. Создать символическую ссылку в никуда, продемонстрировать её
Чтобы создать ссылку в никуда достаточно удалить содержимое ссылки.

<center>Рисунок 21. Ссылка в никуда </center>
23. Создать прямые ссылки
Жёсткие ссылки - Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жёсткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок - это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности: Работают только в пределах одной файловой системы; Нельзя ссылаться на каталоги; Имеют ту же информацию inode и набор разрешений что и у исходного файла; Разрешения на ссылку изменяться при изменении разрешений файла; Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.

<center>Рисунок 22. Жёсткая ссылка </center>
24. Создать собственную команду, которая будет использовать следующее: cd /usr; ls; cd -, с помощью alias
Свои команды нужно создавать, если лень набирать сложную и длинную команду или вы просто не помню её. Создание своей команды упрощает и ускоряет работу. Это как использовать аббревиатуру вместо полного названия — пишу одну команду, которая может выполнять несколько различных.

<center>Рисунок 23. Команда </center>
25. С помощью команды cat написать любой текст и записать его в текстовый файл
Команда cat (catenate) очень проста - она читает данные из файла или стандартного ввода и выводит их на экран. Она часто применяется опытными пользователями во время работы с терминалом. С помощью этой команды можно очень просто посмотреть содержимое небольшого файла и склеить несколько файлов.
>Основные функции:
>* -b - нумеровать только непустые строки;
>* -n - нумеровать все строки;
>* -s - удалять пустые повторяющиеся строки;
>* -T - отображать табуляции в виде ^I;
>* -h - отобразить справку;
>* -v - версия утилиты.

<center>Рисунок 24. cat </center>
26. Создать скрипт - минимум 5 строк
Набор встроенных команд bash (и его аналогов sh, zsh, etc) совместим с любым POSIX-совместимым приложением в Linux, что позволяет встроить в bash-скрипт любое совместимое приложение. Это дает очень большой набор возможностей в сфере автоматизации рутинных задач администрирования систем Linux, деплоя и сборки приложений, различных пакетных обработок, в том числе аудио и видео. Суть bash-скриптов — записать все действия в один файл и выполнять их по необходимости.
27. Удалить один текстовый файл

<center> Рисунок 26. Удаление файла </center>
> Команда: rm x.txt
28. Создать пустую директорию и удалить её

<center>Рисунок 27. Удаление файла </center>
> Команда: mkdir test
> rmdir test
29. Удалить директорию с 3-я текстовыми файлами
**-R** или** -r** удаление директорий и их содержимого (рекурсивное удаление), -v выводить информацию об удаляемых файлах. **-f** (force) игнорировать несуществующие файлы и аргументы. Никогда не выдавать запросы на подтверждение удаления.

<center>Рисунок 28. Удаление директории </center>
> Команда: rm rfv "folder"
30. Создать пользователя

<center>Рисунок 29. Новый пользователь </center>
> Команда: sudo useradd "userName"
31. Поменять пароль нового пользователя

<center>Рисунок 30. Пароль пользователя </center>
> Команда: sudo passwd "userName"
32. Найти текстовый документ с помощью команд Find и Grep

<center>Рисунок 31. grep и find </center>
> Команда: find . -name 'x.txt'
> ls | grep x.txt
33. Воспользоваться логическими ‘и’ и ‘или’ как пример использовать команду ping
По умолчанию команда ping IP-адреса на Linux посылает пакеты, пока вы не
прервете их отправку вручную с помощью сочетания клавиш Ctrl+C. Чтобы
ограничить количество, я указал определённое число 5 (ping -c 5 localhost), поэтому отправилось 5 пакетов

<center>Рисунок 31. ping </center>
>Команда: ping -c 5 localhost && df -h
>ping -c 5 localhost || df -h
---
### Команда ping
1. Синтаксис
ping -help показывает синтаксис на linux

<center>Рисунок 32. ping -help </center>
2. Простая проверка доступности
Чтобы понять есть ли доступ в интернет и проверить доступен ли сайт можно сделать так: **ping "address.com"** (вместо домена можно ip-адрес использовать) - рис. 32. Чтобы ограничить количество запросов нужно написать ping -с (кол-во запросов) - рис. 32.1.
Чтобы изменить интервал запросов можно написать **ping -i** (кол-во секунд) - рис. 32.2. На этом рисунке каждый пакет отправлялся раз в 2 секунды, чтобы сделать число меньше 0.2 секунды нужны права суперпользователя - sudo.
Чтобы сделать массовую отправку пакетов, к примеру, для тестирования нужно написать **ping -f** - отправляются сотни тысяч запросов за секунду. Так же требуется права sudo - рис. 32.3.

<center>Рисунок 32. ping 8.8.8.8 </center>

<center>Рисунок 32.1. Количество запросов </center>

<center>Рисунок 32.2. Отправка пакетов раз в 2 секунды </center>

<center>Рисунок 32.3. Отправка множества пакетов </center>
3. Изменение размера пакета
По умолчанию размер пакета – 32 байта, но можно установить другой размер с помощью команды **ping -s** (кол-во байтов) - рис. 33

<center>Рисунок 33. Количество байт </center>
4. Включение звукового сигнала
Если нет ответа хоста, то пишем команду **ping -a**. Затем начинаем искать причину сбоя. После ее устранения воспроизведется звуковой сигнал. Он говорит о том, что хост теперь отвечает - рис. 34. На этом рисунке на каждой отправке пакета воспроизводился короткий звуковой сигнал

<center>Рисунок 34. Звуковой сигнал </center>
5. Вывод статистики ping
Чтобы не засорять терминал лишней информацией, пропустим ответы хоста и сразу получим статистику с помощью команды ****ping -c 3 -q**** - рис. 35

<center>Рисунок 35. Статистика </center>
---
### Утилита ifconfig
1. Подготовка, установка ifconfig на Ubuntu
Так как в новых дистрибутивов Linux нет команды ifconfig её пришлось устанавливать отдельно - рис. 36

<center>Рисунок 35. Установка ifconfig </center>
> Команда: sudo apt install net-tools -y
2. Использование ifconfig
#### Базовый синтаксис ifconfig
Вот так надо использовать ifconfig нужно написать - **ifconfig "-a" "-v" "-s" "interface" "address"**

<center>Рисунок 36. Базовый синтаксис ifconfig </center>
#### Отображение информации о сетевых интерфейсах
При вызове без каких-либо опций ifconfig отображает информацию о конфигурации всех сетевых интерфейсов и связанный IP-адрес - **ifconfig -a**

<center>Рисунок 37. ifconfig -a </center>
Чтобы отобразить информацию о конфигурации любого конкретного сетевого интерфейса, напишите имя интерфейса после команды - **ifconfig ens33**

<center>Рисунок 37. Конфигурации конкретного сетевого интерфейса </center>
#### Назначение IP-адреса и маски сети сетевому интерфейсу
Чтобы назначить ip адрес и маску сети нужно написать - **ifconfig "interface-name" "ip-address" netmask "subnet-mask"**
На рис. 38 я назначил интерфейсу (ens33) ip адрес и маску сети

<center>Рисунок 38. Назначение ip адреса и маски сети </center>
#### Включение и отключение сетевого интерфейса
Иногда нужно сбросить интерфейс, для этого нужно написать - **ifconfig ens33 down**, а чтобы поднять (включить) неактивный интерфейс нужно написать - **ifconfig ens33 up**, показано на рис. 39

<center>Рисунок 39. Включение и отключение интерфейса </center>
#### Включение и отключение беспорядочного режима
Беспорядочный режим позволяет сетевому интерфейсу получать доступ и просматривать все пакеты в сети. Чтобы включить этот режим нужно написать команду - **ifconfig ens33 promisc**, чтобы отключить нужно написать команду - **ifconfig ens33 -promisc**, показано на рис. 40

<center>Рисунок 40. Включение и отключение беспорядочного режима </center>
#### Изменение MTU сетевого интерфейса
MTU «Максимальный блок передачи» позволяет ограничить размер пакетов, передаваемых через интерфейс, чтобы включить это нужно написать - **ifconfig ens33 mtu "X" (кол-во пакетов)**
<center>Рисунок 41. Ограничение количества пакетов </center>
#### Изменить MAC-адрес Сетевого интерфейса
MAC «Управление доступом к среде» - это физический адрес, который однозначно идентифицирует устройства в сети, чтобы установить новый MAC адрес, нужно написать команду - **ifconfig ens33 hw ether 00:00:2d:3a:2a:28**

<center>Рисунок 42. Установка нового MAC адреса </center>
---
### Утилита ip a
1. Синтаксис команды ip a
ip a в отличии от ifconfig установлен во всех новых дистрибутивов Linux. Если ввести ip a -help, покажет самые основные и важные команды

<center> Рисунок 43. ip a -help</center>
2. Отображение и изменение IP-адресов
При работе с командой addr имеет следующий вид: ip addr "COMMAND" "IP-ADDRESS" dev "ens33". Наиболее часто используемые КОМАНДЫ объекта addr: **show**, **add** и **del**

<center> Рисунок 44. Добавление ip-адреса </center>
3. Отображение информации обо всех IP-адресах
Чтобы отобразить список всех сетевых интерфейсов и связанный с ними IP-адрес, нужно ввести команду **ip addr show** либо **ip addr**. Если надо отобразить только IP-адреса IPv4 или IPv6, то надо ввести **ip -4 addr** или **ip -6 addr**

<center> Рисунок 45. ip addr show </center>
4. Отображение информации обо всех IP-адресах и об одном сетевом интерфейсе
Чтобы получить информацию о конкретном сетевом интерфейсе, надо ввести **ip addr show dev ens33** за которым следует имя интерфейса. Например, чтобы запросить ens33, нужно ввести **ip addr show dev ens33**

<center> Рисунок 46. Информация о конкретном сетевом интерфейсе </center>
5. Назначьте IP-адреса интерфейсу
Чтобы назначить IP-адрес интерфейсу, нужно написать команду - **ip addr add "IP-ADDRESS" dev ens33**

<center> Рисунок 47. Добавление ip-адреса </center>
6. Назначьте несколько IP-адресов одному интерфейсу
С помощью ip можно назначить несколько адресов одному интерфейсу. Например: sudo ip address add 192.168.121.241/24 dev ens33
sudo ip address add 192.168.121.45/24 dev ens33
Чтобы подтвердить, что IP-адреса назначены, нужно написать команду **ip -4 addr show dev ens33** или **ip -4 a show dev ens33**

<center> Рисунок 48. Добавление нескольких ip-адресов </center>
7. Удалить IP-адрес из интерфейса
Синтаксис для удаления IP-адреса из интерфейса следующий **ip addr del "IP-ADDRESS" dev "ens33"**

<center> Рисунок 49. Удаление ip-адреса </center>
8. Отображение и изменение сетевых интерфейсов
Для управления и просмотра состояния сетевых интерфейсов нужно использовать объект **link**. При работе с объектами link наиболее часто используются следующие команды: **show**, **set**, **add** и **del**
Чтобы отобразить список всех сетевых интерфейсов, нужно написать команду: **ip link show**

<center> Рисунок 50. Управления и просмотр состояния сетевых интерфейсов </center>
В отличие от **ip addr show**, **ip link show** не выводит информацию об IP-адресах, связанных с устройством. Чтобы получить информацию о конкретном сетевом интерфейсе, нужно написать команду **ip link show dev ens33**
Например, чтобы запросить ens33 нужно ввести - ip link show dev ens33

<center> Рисунок 51. Управления и просмотр состояния сетевых интерфейсов </center>
9. Изменение статуса интерфейса up/down
Чтобы включить или выключить интерфейс, нужно написать команду **ip link set dev ens33** за которым следует желаемое состояние - **ip link set dev {DEVICE} {up|down}**. Например, чтобы включить интерфейс ens33, нужно ввести - **ip link set enss33 up**, чтобы выключить - **ip link set ens33 down**

<center> Рисунок 52. Включение и выключение состояния сетевых интерфейсов </center>
10. Отображение и изменение таблицы маршрутизации
Для назначения, удаления и отображения таблицы маршрутизации ядра нужно использовать объект **route**. Наиболее часто используемые команды при работе с объектами маршрутов - **list**, **add** и **del**.
11. Показать таблицу маршрутизации
Чтобы получить список записей маршрута ядра, нужно использовать одну из следующих команд -
* ip route
* ip route list
* ip route list SELECTOR
При использовании без SELECTOR команда выведет список всех записей маршрута в ядре:

<center> Рисунок 53. Маршруты </center>
12. Добавить новый маршрут
Чтобы добавить новую запись в таблицу маршрутизации, используйте команду **route add** за которой следует имя сети или устройства. Чтобы добавить маршрут к 192.168.121.0/24 через шлюз 192.168.28.1. Добавьте маршрут к 192.168.121.0/24, который может быть достигнут на устройстве ens33. Чтобы добавить маршрут по умолчанию, используйте ключевое слово default . Следующая команда добавит маршрут по умолчанию через локальный шлюз 192.168.28.1 который может быть достигнут на устройстве ens33

<center> Рисунок 54. Маршруты </center>
13. Удалить маршрут
Чтобы удалить запись из таблицы маршрутизации, используйте команду **route add**. Синтаксис удаления маршрута такой же, как и при добавлении. Следующая команда удалит маршрут по умолчанию: **ip route del default**
Удалите маршрут для 192.168.28.0/24 через шлюз 192.168.28.1

<center> Рисунок 55. Маршруты </center>
---
## Утилита ethtool
>Команда ethtool позволяет использовать утилиту с соответствующим именем для изменения низкоуровневых параметров сетевых карт. Данная утилита способна изменять огромное количество параметров сетевых карт, большая часть из которых не интересна обычным пользователям. Кроме того, драйверы сетевых карт домашних компьютеров и ноутбуков не позволяют изменять большую часть поддерживаемых утилитой параметров, поэтому в большинстве случаев она используется для проверки и установки скорости сетевого соединения, а также режима работы сетевой карты. Утилита поддерживает огромное количество параметров. Наиболее важными из них являются параметр -i, позволяющий получить информацию о драйвере сетевой карты, параметр -S, позволяющий получить статистику работы сетевой карты в случае поддержки этой функции драйвером, параметр -s, позволяющий установить скорость и режим работы сетевой карты, параметры -k и -K, позволяющие получить и установить значения параметров режима передачи данных, а также параметр -p, позволяющий идентифицировать порт сетевой карты с помощью мигающего индикатора.

Для получения параметров сетевой карты достаточно использовать утилиту без каких-либо параметров:

Для установки параметров сетевого соединения следует использовать параметр -s:
**ethtool -s ens33 speed 10 duplex full autoneg off**. Посмотреть можно с помощью команды:
**ethtool ens33 | grep Speed**

Для просмотра параметров драйвера сетевой карты нужно ввести команду - **ethtool -i ens33**

Для идентификации порта сетевой карты с помощью мигающего индикатора нужно использовать параметр -p - **ethtool -p ens33 7**. Значение 7 устанавливает длительность периода мигания индикатора, равную 7 секундам.

Команда **ethtool** позволяет использовать утилиту с соответствующим именем для изменения низкоуровневых параметров сетевых карт. Данная утилита способна изменять огромное количество параметров сетевых карт, большая часть из которых не интересна обычным пользователям. Кроме того, драйверы сетевых карт домашних компьютеров и ноутбуков не позволяют изменять большую часть поддерживаемых утилитой параметров, поэтому в большинстве случаев она используется для проверки и установки скорости сетевого соединения, а также режима работы сетевой карты.
Базовый синтаксис команды выглядит следующим образом - **ethtool [параметры] имя-сетевого-интерфейса**
Утилита поддерживает огромное количество параметров. Наиболее важными из них являются параметр **-i**, позволяющий получить информацию о драйвере сетевой карты, параметр **-S**, позволяющий получить статистику работы сетевой карты в случае поддержки этой функции драйвером, параметр **-s**, позволяющий установить скорость и режим работы сетевой карты, параметры **-k** и **-K**, позволяющие получить и установить значения параметров режима передачи данных, а также параметр **-p**, позволяющий идентифицировать порт сетевой карты с помощью мигающего индикатора.





Утилита работает с именами сетевых интерфейсов, связанных с сетевыми картами, поэтому для работы с ней нужно выяснить имя сетевого интерфейса, связанного с нужной сетевой картой. Для этого используется команда - **ip a**

---
## Netplan
Netplan — это утилита для конфигурации сети. Настройка сети через Netplan выполняется в конфигурационном файле, который находится в папке /etc/netplan/. Это текстовый файл с расширением .yaml
Чтобы узнать название конфигурационного файла надо написать команду - **ls -la /etc/netplan/**. Команда выведет на экран список файлов, которые находятся в директории /etc/netplan/. В директории будет один файл, который и является конфигурационным:

Чтобы открыть этот нужно ввести команду - **sudo nano /etc/netplan/"config".yaml** (вместо конфиг надо написать название файла)

**Команды NETPLAN**
Синтаксис самой команды **netplan** очень прост: **netplan опции команда**
В качестве команды можно передать одну из команд:
- **try** - попробовать применить конфигурацию с возможностью отмены;
- **apply** - применить конфигурацию;
- **generate** - проверка текущей конфигурации и запись на диск;
- **config** - записать текущую конфигурацию сети в YAML.
**Как настроить сеть Netplan в Ubuntu**
Сначала необходимо посмотреть, как называются сетевые интерфейсы в вашей системе. Для этого можно просто изучить содержимое папки /sys/class/net - **ls /sys/class/net**

**Настройка динамического IP в Netplan**
Для настройки динамического IP- адреса для интерфейса ens33 создадим новый конфигурационный файл **02-networkd.yaml**. Самая простая настройка Netplan для получения IP по DHCP будет выглядеть вот так - **sudo vi /etc/netplan/02-networkd.yaml**. В качестве программы для обработки конфигурации мы используем Networkd, далее мы указываем наш сетевой интерфейс и включаем получение IPv4 адреса по DHCP. Все остальные параметры тоже подтянутся по DHCP. Или мы можем вручную настроить DNS для этого интерфейса:

Теперь осталось проверить эту конфигурацию. Для этого выполните: **sudo netplan generate**. Если ошибок нет, программа ничего не выведет. Если есть ошибки, утилита о них сообщит. Для применения конфигурации используйте команду **sudo netplan apply**

**Настройка статического IP в Netplan**
Статический IP-адрес в Netplan настроить немного сложнее. Поскольку здесь нам нужно будет задать не только непосредственно сам адрес, но и кучу других параметров, которые система раньше получала по DHCP. Нам надо указать шлюз для доступа в интернет и DNS-серверы. Модифицируем тот же конфигурационный файл - **sudo vi /etc/netplan/02-networkd.yaml**

**Настройка Wi-Fi через Netplan на Ubuntu**
Кроме проводного подключения, система конфигурации Netplan умеет управлять подключением к Wi-Fi. Это отличная новость, учитывая, насколько сложно всё это раньше настраивалось, если не было NetworkManager. Правда, для работы Wi-Fi через Networkd надо, чтобы в системе был установлен пакет wpasupplicant. Например, у нас есть точка доступа AccessPoint с паролем 12345678? и мы хотим к ней подключаться. Тогда настройка Netplan Ubuntu будет выглядеть так:

Здесь мы указываем, что надо получить IP и другие параметры по DHCP, устанавливаем DNS-сервер вручную, хотя это не обязательно, а затем добавляем точку доступа и пароль к ней.
**Применение конфигурации NETPLAN**
После смены настроек в конфигурационном файле ничего не меняется. Сначала нужно проверить конфигурационный файл на ошибки и создать файлы конфигурации программы-обработчика. Для этого выполните - **sudo netplan generate**

Если вы хотите видеть более подробную информацию, используйте опцию --debug: **sudo netplan --debug generate**. Если есть ошибки, их надо исправить, если нет, применяем конфигурацию с помощью команды - **sudo netplan --debug apply**

Если вы меняли программу-обработчик, например с NetworkManager на networkd, то надо ещё **перезапустить компьютер**. После этого сеть будет работать на новой конфигурации.
5. **Объединение интерфейсов (bonds)**
При желании, мы можем вернуть привычный принцип настройки сети. Для этого выполним несколько шагов.
Открываем настройку grub - **vi /etc/default/grub**
Находим опцию GRUB_CMDLINE_LINUX и дописываем в нее параметр - **GRUB_CMDLINE_LINUX="netcfg/do_not_use_netplan=true"**

Устанавливаем пакет ifupdown - **apt install ifupdown**
Настраиваем сеть в файле - **nano /etc/network/interfaces**

Применяем настройки загрузчика - **update-grub** И перезагружаем систему - **shootdown -r now**
## Traceroute
Команда **ping** позволяет убедиться, что удаленная сеть IP достижима. Однако с ее помощью нельзя обнаружить и устранить неполадки. Рассмотрим следующий пример: Если маршрут от системы к целевому хосту содержит много транзитных узлов (например, шлюзов и маршрутизаторов), то неполадка может возникнуть на любом из этих узлов. В этом случае нужно выяснить, на каком этапе теряется пакет.
Если пакет не удается доставить, команда **ping** не сообщает причину ошибки.
Команда **traceroute** позволяет узнать, где в данный момент находится пакет, и почему его нельзя доставить по заданному маршруту. Если пакет будет передаваться через маршрутизаторы и каналы связи, принадлежащие другим организациям, то вам вряд ли удастся проверить состояние этих маршрутизаторов с помощью команды **telnet**. В этом случае можно воспользоваться командами **traceroute** и **ping**.
>Синтаксис: **traceroute опции адрес_узла**
**В качестве адреса может использоваться ip адрес или доменное имя. Основные опции:**
- 4 или -6 - использовать ipv4 или ipv6 протокол;
- I - использовать ICMP пакеты вместо UDP;
- T - использовать TCP пакеты вместо UDP;
- F - не фрагментировать пакеты;
- f - указать TTL с которого нужно начать;
- g - передавать пакет через указанный шлюз;
- i - передавать пакет через указанный интерфейс;
- m - максимальное количество узлов, через которые пройдет пакет;
- q - количество пакетов, отправляемых за раз, по умолчанию три;
- n - не узнавать доменные имена;
- p - указать порт вместо порта по умолчанию;
- w - установить время ожидания ответа от узла, по умолчанию полсекунды;
- r - использовать другой роутер вместо того, что указанный в таблице маршрутизации;
- z - минимальный интервал между пакетами;
- U - использовать UDP с увеличением номера порта;
- UL - использовать протокол UDPLITE;
- D - использовать протокол DCCP;
- –mtu - указать размер пакета;
- P - протокол, доступны такие значения: raw, dccp, udplite, udp, tcpconn, tcp, icmp.
**Примеры удачного выполнения команды traceroute**
Команда traceroute применяет протокол UDP и функцию создания отчета об ошибках, предусмотренную в ICMP. Эта команда трижды отправляет пакет UDP каждому шлюзу или маршрутизатору, входящему в маршрут. Первый пакет отправляется ближайшему шлюзу. Второй пакет отправляется следующему за ним транзитному узлу и т.д. Последний пакет отправляется целевой системе. В выводе команды указывается имя шлюза, IP-адрес шлюза и время оборота трех пакетов, отправленных шлюзу
Пример я привёл самостоятельно на рисунке ниже, для работы с traceroute необходимо установить 2 утилиты: **sudo apt install traceroute** и **sudo apt install inetutils-traceroute**
## History
1. Повторение последней команды
Чтобы повторить последнюю команду в bash надо написать команду **!!**

2. Повторение других команд
Можно повторить другие команды, используя один **!,** за которым следует один или несколько символов. Оболочка повторит последнюю команду, которая начиналась с этих символов

3. История команд
**history**

**history 30** (можно написать число команд, сколько выведет)

4. Повторение команд через номер
При вводе текста ! за которым следует номер, предшествующий команде, которую вы хотите повторить, затем оболочка повторит команду и выполнит ее

5. **Сtrl+r для поиска в истории**
Использование **ctrl+r** для поиска в истории. На скриншоте ниже я набрал только ctrl+r, за которым следуют nano и он находит последнюю команду, содержащую nano

6. **Переменная $HISTSIZE**
Переменная **$HISTSIZE** определяет количество команд, которые будут запоминаться в текущей среде. В большинстве дистрибутивов по умолчанию эта переменная равна **500 или 1000:** - **echo (знак доллара)HISTSIZE**

7. **Переменная $HISTFILE**
Переменная **$HISTFILE** указывает на файл, содержащий историю. Оболочка **bash** по умолчанию устанавливает это значение равным **~/.bash_history:**

8. **Переменная $HISTFILESIZE**
Количество команд, хранящихся в файле истории, можно задать с помощью **$HISTFILESIZE:**

Чтобы изменить значение, введите - **HISTFILESIZE=15000**

9. **Повторения с помощью регулярных выражений**
При использовании **! (bang)** для повторения команд можно использовать регулярные выражения. На скриншоте ниже 1 заменяется на 2

## Linux управление сетью, устранение неполадок и отладка
1. Конфигурация сети, средства устранения неполадок и отладки
> ifconfig - инструмент интерфейса командной строки для настройки сетевого интерфейса, который также используется для инициализации интерфейсов во время загрузки системы. После того, как сервер запущен и работает, его можно использовать для назначения IP-адреса интерфейсу и включения или отключения интерфейса по запросу. Он также используется для просмотра статуса **IP-адреса**,** оборудования/MAC-адреса**, а также размера **MTU** (максимального блока передачи) активных в данный момент интерфейсов. Таким образом, ifconfig полезен для отладки или настройки системы.
**ifconfig -a**. Чтобы перечислить все доступные в настоящее время интерфейсы, вверх или вниз, используйте флаг **-a** (в новых дисктрибутивов linux предлагает команда ip вместо ifconfig)

Чтобы назначить IP-адрес интерфейсу надо написать команду - **sudo ifconfig ens33 [ip address] netmask 255.255.255.0** (маска на /24 указана). Чтобы активировать сетевой интерфейс, надо написать - **sudo ifconfig ens33 up**, чтобы отключить интерфейс надо написать **sudo ifnconfig ens33 down**

2. Ping
> ping (Packet Internet Groper) - утилита, обычно используемая для проверки возможности соединения между двумя системами в сети (локальная сеть (LAN) или глобальная сеть (WAN)). Он использует ICMP (протокол управляющих сообщений Интернета) для связи с узлами в сети.
Чтобы проверить возможность подключения к другому узлу, надо написать например, его IP-адрес или имя хоста - **ping [ip/host]**

Также можно указать ping выйти после указанного количества пакетов ECHO_REQUEST, используя флаг -c (кол-во пакетов)

3. Traceroute
> Traceroute - утилита командной строки для отслеживания полного пути от вашей локальной системы к другой сетевой системе. Он печатает количество переходов (IP-адреса маршрутизатора) на этом пути, по которому вы путешествуете, чтобы добраться до конечного сервера. Это простая в использовании утилита для устранения неполадок сети после команды ping.
В этом примере отслеживается маршрут пакетов от локальной системы к одному из серверов ya.ru - **sudo traceroute -T ya.ru**

4. MTR
> MTR - современный инструмент диагностики сети с командной строкой, который сочетает в себе функции **ping** и **traceroute** в едином диагностическом инструменте. Его вывод обновляется в реальном времени по умолчанию, пока не выйдем из программы, нажав **q**
Самый простой способ запустить mtr - предоставить ему имя хоста или IP-адрес в качестве аргумента - **sudo mtr -T ya.ru**

Можно ограничить количество проверок до определенного значения и выйти из mtr после этих проверок, используя флаг **-c** - **sudo mtr -T -c 5 ya.ru**
5. route
> route - утилита командной строки для отображения или управления таблицей IP-маршрутизации системы Linux. В основном он используется для настройки статических маршрутов к определенным хостам или сетям через интерфейс
Можно просмотреть таблицу IP-маршрутизации ядра, написав команду - **sudo route**

Существует множество команд, которые можно использовать для настройки маршрутизации. Вот несколько полезных:
Добавить шлюз по умолчанию в таблицу маршрутизации - **sudo route add default gw [gateway-ip]**

Добавить сетевой маршрут в таблицу маршрутизации - **sudo route add -net [network ip] gw [gateway ip] [interface]**
Удалить конкретную запись маршрута из таблицы маршрутизации - **sudo route del -net [network ip]**


Как отклонить сетевые пакеты для конкретного хоста или сети можно использовать команду IP route для запрета сетевого трафика на конкретном хосте или даже для диапазона сети
Чтобы отклонить сетевые пакеты для одного хоста - **route add -host 10.10.2.20 reject**
Чтобы отклонить сетевые пакеты для всей сети, мы можем использовать следующую команду - **route add -net 192.168.127.0 netmask 255.255.255.0 reject**

6. Nmcli
> Nmcli - простой в использовании инструмент командной строки с поддержкой сценариев для сообщения о состоянии сети, управления сетевыми подключениями и управления NetworkManager.
Чтобы просмотреть все свои сетевые устройства нужно написать команду - **nmcli dev status**

Чтобы проверить сетевые подключения в вашей системе, введите - **nmcli con show**. Чтобы видеть только активные соединения, добавьте флаг -a -** nmcli con show -a**

7. ethtool
> Иногда возникают ситуации, когда необходимо настроить или изменить настройки сетевой карты. Сразу отмечу, что настраивать сетевую карту можно только на реальном железе. На виртуальном, скорее всего, ни одна из предложенных дальше команд не приведет к какому-нибудь результату. У виртуальных сетевых адаптеров просто нет настроек.
Для начала посмотрим, какие сетевые карты есть на сервере - **lspci | grep Eth**

Посмотрим информацию о сетевой карте - **sudo ethtool ens33**

Указана текущая скорость, на которой работает карточка. Ее можно сменить в случае необходимости - **ethtool -s ens33 speed 100 duplex full**. Этой командой можно изменить скорость сетевой карточки до 100Mb/s в случае, если там стояла другая скорость

## Инструменты сетевого сканирования и анализа производительности
1. netstat
> netstat - инструмент командной строки, который отображает полезную информацию, такую как сетевые соединения, таблицы маршрутизации, статистику интерфейса и многое другое, о сетевой подсистеме Linux. Это полезно для устранения неполадок в сети и анализа производительности.
Кроме того, это также основной инструмент отладки сетевых служб, используемый для проверки того, какие программы какие порты прослушивают. Например, следующая команда покажет все порты TCP в режиме прослушивания и программы, которые их прослушивают - **sudo netstat tnlp**

Чтобы просмотреть таблицу маршрутизации ядра, используйте флаг -r (который эквивалентен выполнению команды маршрута выше) - **sudo netstat -r**. Несмотря на то, что Netstat - отличный инструмент, он устарел, его заменой является команда ss

2. ss
> ss (статистика сокетов) - мощная утилита командной строки для исследования сокетов. Он сбрасывает статистику сокетов и отображает информацию, аналогичную netstat. Кроме того, он показывает больше информации о TCP и состоянии по сравнению с другими аналогичными утилитами
В следующем примере показано, как вывести список всех TCP-портов (сокетов), открытых на сервере - **ss -ta**
Чтобы отобразить все активные TCP-соединения вместе с их таймерами, выполните следующую команду - **ss -to**

3. NC (NetCat)
> NC (NetCat), также называемый «Сетевым швейцарским армейским ножом», представляет собой мощную утилиту, используемую практически для любых задач, связанных с сокетами TCP, UDP или UNIX-домена. Он используется для открытия TCP-соединений, прослушивания произвольных TCP- и UDP-портов, выполнения сканирования портов и многого другого.
Вы также можете использовать его в качестве простых TCP-прокси, для тестирования сетевых демонов, проверки доступности удаленных портов и многого другого. Кроме того, можно использовать **nc** вместе с командой **pv** для передачи файлов между двумя компьютерами.
В следующем примере показано, как сканировать список портов - **nc -zv 192.168.28.130 21 22 80 443 3000**. Но так как не запущено не кастомное приложение, ни telnet и т.д., то порты закрыты, поэтому connection refused.

Можно указать диапазон портов, как показано - **nc -zv server2.tecmint.lan 20-90**

В следующем примере показано, как использовать nc для открытия TCP-соединения с портом 22 на 192.168.127.167, используя порт 3000 в качестве исходного порта, с таймаутом в 10 секунд - **nc -p 3000 -w 5 192.168.28.130 22**

Прослушивание порта. Для того, чтобы прослушивать порт используйте параметр -l. В общем случае этого достаточно, но можете включить подробный режим - **nc -nlv 8080**

При использовании протокола TСP порт должен быть в свободен, в противном случае вы увидите ошибку: Already in use. Также стоит отметить, что не все порты могут использовать обычные пользователи, например, 80 порт (HTTP) мало того, что скорее всего окажется занят другим процессом, так ещё и потребует прав суперпользователя.
Общий вид команды nc - nc [-параметры] [ip-адрес] [порты]
4. Nmap
> Nmap (Network Mapper) - мощный и чрезвычайно универсальный инструмент для системных/сетевых администраторов Linux. Он используется для сбора информации об одном узле или для исследования сетей в целом. Nmap также используется для сканирования безопасности, аудита сети, поиска открытых портов на удаленных хостах и многого другого.
Вы можете сканировать хост, например, используя его имя хоста или IP-адрес - **nmap google.com**
5. host
> Команда host - это простая утилита для поиска DNS, она переводит имена хостов в IP-адреса и наоборот.

6. dig
> dig (поиск информации о домене) также является еще одной простой утилитой поиска DNS, которая используется для запроса информации, связанной с DNS, такой как A Record, CNAME, MX Record и т. д., например:

7. Nslookup
> Nslookup - популярная утилита командной строки для интерактивного и неинтерактивного запроса DNS-серверов. Он используется для запроса записей ресурсов DNS (RR). Можно узнать запись «A» (IP-адрес) домена, как показано.

8. Tcpdump
> Tcpdump - очень мощный и широко используемый сетевой сниффер командной строки. Он используется для захвата и анализа пакетов TCP/IP, переданных или полученных по сети на определенном интерфейсе.
Чтобы перехватить пакеты с заданного интерфейса, надо указать его с помощью параметра -i - **tcpdump -i ens33**

**tcpdump -c 5 -i ens33**

Можно захватывать и сохранять пакеты в файл для последующего анализа, используя флаг **-w** , чтобы указать выходной файл - **tcpdump -w tcp.txt -i ens33**
9. Wireshark
> Wireshark - это популярный, мощный, универсальный и простой в использовании инструмент для захвата и анализа пакетов в сети с коммутацией пакетов в режиме реального времени.
Чтобы запустить wireshark нужно написать - **sudo wireshark**


10. bmon
> bmon - это мощная утилита для сетевого мониторинга и отладки на основе командной строки для Unix-подобных систем, она собирает статистику, связанную с сетью, и выводит ее визуально в удобном для человека формате. Это надежный и эффективный монитор полосы пропускания и оценщик скорости в реальном времени.

## Шифрование домашнего каталога на базе Ubuntu
Создадим нового пользователя командой - **adduser user1**

Установить ecryptfs - **sudo apt-get install ecryptfs-utils cryptsetup**
Для шифрования всего домашнего каталога пользователя можно использовать программу **ecryptfs**. Допустим, что команда позволяет просмотреть информацию о сетевых интерфейсах в Linux? в системе есть пользователь user1, тогда его домашний каталог можно зашифровать следующей командой - **sudo ecryptfs-migrate-home -u user1**

Команду эту также нужно выполнить сразу после миграции и не затягивать с ней. Она не требует прав sudo, что вполне логично, - ведь простые пользователи не могут и не должны иметь права повышать свои привелегии. Смысл команды — создать фразу для шифрования - **ecryptfs-unwrap-passphrase**


Осталась одна возможность, которая может стать причиной утечки зашифрованной информации, файл подкачки. Если какая-либо пользовательская информация попала в память и ОС сбросила эту страницу памяти на диск в файл подкачки, а хакер смог прочитать этот файл, то это станет для вас серьезной проблемой.
Поэтому рекомендуется зашифровать и файл подкачки, для чего администратор системы должен выполнить команду - **ecryptfs-setup-swap**

Прежде чем программа завершит работу, она запросит подтверждение, потому что эта операция нарушит сон ноутбука, так как ОС не сможет восстановить работу из зашифрованного файла, перестает работать функция гибернации.