Linux для сетевых инженеров - Роб Ванденбринк - E-Book

Linux для сетевых инженеров E-Book

Роб Ванденбринк

0,0
12,99 €

-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.
Mehr erfahren.
Beschreibung

Операционная система Linux продолжает завоевывать популярность, и все больше сетевых служб разворачивается на ее основе из соображений стоимости и гибкости. Книга даст исчерпывающее представление о том, как устроена работа с сетью в Linux. В начале описаны основные дистрибутивы и рассказано, как выбрать правильный и настроить простейшую сетевую конфигурацию. Затем идет речь о диагностике, брандмауэре и использовании Linux в качестве узла для сетевых служб. Наконец, работая с примерами сборок, вы овладеете различными вариантами защиты от распространенных видов атак. Освоив последние главы, станете еще на шаг ближе к тому, чтобы построить надежный каркас для центра обработки данных, функционирующего полностью под управлением Linux. Вы сможете не только уверенно настраивать систему, но и использовать проверенные методологии для будущих развертываний.

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB
MOBI

Seitenzahl: 568

Veröffentlichungsjahr: 2023

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Роб Ванденбринк
Linux для сетевых инженеров

Переводчик А. Гаврилов

Роб Ванденбринк

Linux для сетевых инженеров. — СПб.: Питер, 2023.

ISBN 978-5-4461-2275-2

© ООО Издательство "Питер", 2023

Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

Посвящается моей жене Карен. Каждый год, проведенный вместе, становится лучшим в нашей жизни!

Роб Ванденбринк

Я хотел бы поблагодарить свою жену Надиолис Варелу и детей, Аарона и Мэтью, за помощь и поддержку на протяжении многих лет.

Мелвин Рейес Мартин

Об авторе

Роб Ванденбринк (Rob VandenBrink) — консультант в компании Coherent Security в Онтарио (Канада). Также он сотрудничает на общественных началах с сайтом Internet Storm Center, который ежедневно публикует сводки новостей и записи из блогов на тему информационной безопасности. Кроме того, Роб в качестве волонтера участвует в подготовке бенчмарков (контрольных показателей), которые выпускает Центр интернет-безопасности (Center for Internet Securuty, CIS), в частности бенчмарков брандмауэра Palo Alto Networks и Cisco Nexus.

Среди его областей специализации — все аспекты информационной безопасности, сетевой инфраструктуры, проектирования сетей и центров обработки данных, автоматизации, виртуализации и координации в сфере IT. Роб разрабатывал инструменты, которые обеспечивают соблюдение политик для пользователей VPN, различные сетевые компоненты, встроенные в Cisco IOS, а также инструменты аудита и оценки безопасности для брандмауэра Palo Alto Networks и для VMware vSphere.

Роб получил степень магистра в области систем информационной безопасности в Технологическом институте SANS и имеет ряд сертификатов SANS/GIAC, VMware и Cisco.

О рецензенте

Мелвин Рейес Мартин (Melvin Reyes Martin) — старший сетевой инженер, ­увлеченный проектированием, рационализацией и автоматизацией. Он получил сертификаты экспертного уровня в области сетевых технологий, такие как CCIE Enterprise Infrastructure и CCIE Service Provider. Мелвин 6 лет работал в Cisco Systems, внедряя новейшие сетевые технологии для интернет-провайдеров в странах Латинской Америки и Карибского бассейна. Он также имеет сертификат Linux+ и любит интегрировать проекты с открытым исходным кодом в сетевые решения. Мелвин — большой сторонник облачной инфраструктуры и технологии блокчейн.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected](издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Предисловие

Приветствуем вас на страницах книги «Linux для сетевых инженеров»! Если вы когда-нибудь задумывались, как снизить стоимость обслуживания серверов, которые поддерживают вашу сеть, вы обратились по адресу. Или, если вас интересует, как наладить защиту сетевых служб, таких как DNS, DHCP или RADIUS, мы поможем вам и с этим.

Какие бы службы ни обеспечивали работу вашей сети, — скорее всего, из этой книги  вы узнаете, как запустить их с базовой конфигурацией и надежно защитить. Попутно мы попытаемся помочь вам выбрать нужный дистрибутив Linux, а также покажем, как устранять неполадки с помощью Linux, и познакомим вас с некоторыми службами, о нужности которых вы, возможно, даже не догадывались.

Надеемся, что материал этой книги поможет вам обогатить свою сеть новыми службами, а также лучше разобраться в том, как она устроена.

Для кого эта книга

Эта книга предназначена для тех, кому поручено администрировать сетевую инфраструктуру практически любого рода. Если вам интересно досконально узнать, как все работает в вашей сети, — эта книга для вас. Она также будет полезна, если вы часто теряетесь в догадках, как оснастить сеть различными службами, которые нужны вашей организации, но у вас нет бюджета на коммерческие продукты. Мы подробно разберемся, как работает каждая из представленных в книге служб Linux, а также как настраивать эти службы в типичной среде.

Наконец, если вас беспокоит, что злоумышленники точат зубы на ваши сетевые активы, книга поможет бороться и с этой проблемой. Мы обсудим, как злоумышленники и вредоносные программы атакуют различные сетевые службы и как их защищать.

Поскольку внимание здесь сосредоточено на Linux, вы обнаружите, что бюджет как для развертывания обсуждаемых служб, так и для их защиты выражается скорее в вашем энтузиазме и времени для изучения новых интересных вещей, чем в долларах и центах!

О чем рассказывает эта книга

Глава 1. Добро пожаловать в семейство Linux вкратце пересказывает историю Linux и описывает различные дистрибутивы этой системы. Кроме того, мы даем ряд советов о том, как выбрать дистрибутив Linux для ваших задач.

Глава 2. Базовая конфигурация сети в Linux. Работа с локальными интерфейсами посвящена конфигурации сетевого интерфейса в Linux, которая часто становится камнем преткновения для администраторов, особенно когда решено развертывать сервер без графического интерфейса. В этой главе мы обсудим, как настраивать различные параметры сетевого интерфейса из командной строки, а также рассмотрим основные понятия адресации IP.

Глава 3. Диагностика сети в Linux охватывает диагностику и устранение неполадок сети — задачи, которыми ежедневно занимаются почти все сетевые администраторы. В этой главе мы продолжим разговор, который начали в предыдущей, и перейдем к основам протоколов TCP и UDP. Опираясь на изученный материал, мы обсудим локальную и удаленную сетевую диагностику с помощью встроенных команд Linux и популярных вспомогательных программ. В завершение главы речь пойдет об оценке беспроводных сетей.

Глава 4. Брандмауэр Linux объясняет, что многим администраторам бывает непросто работать с брандмауэром Linux, особенно потому, что существует несколько различных «поколений» реализации брандмауэра на основе iptables и ipchains. Мы обсудим эволюцию брандмауэра Linux и внедрим его для защиты конкретных служб.

Глава 5. Стандарты безопасности Linux с примерами из реальной жизни посвящена тому, как настроить защиту вашего узла Linux (которая всегда оказывается «движущейся мишенью») в зависимости от того, какие службы работают на узле и в каком окружении он развернут. Мы обсудим эту настройку, а также различные стандарты безопасности, которые помогают принимать решения. В частности, мы рассмотрим критические принципы безопасности CIS (CIS Critical Secirity Controls) и проработаем несколько рекомендаций из бенчмарков (CIS Benchmark) для Linux.

Глава 6. Службы DNS в Linux объясняет, как DNS работает в разных окружениях и как реализовать службы DNS в Linux — и в локальной сети, и в интернете. Мы также обсудим, каким атакам может подвергаться DNS и как защитить от них ваш сервер.

Глава 7. Службы DHCP в Linux охватывает DHCP, который выдает IP-адреса клиентским рабочим станциям, а также снабжает всевозможные клиентские устройства многочисленными вариантами конфигурации. В этой главе мы посмотрим, как наладить DHCP в Linux для традиционных рабочих станций, и обсудим вопросы, которые могут пригодиться при работе с другими устройствами, например такими, как телефоны Voice over IP (VoIP).

Глава 8. Службы сертификатов в Linux рассказывает о сертификатах, которые часто кажутся самым страшным компонентом сетевой инфраструктуры. В этой главе мы попытаемся прояснить, как они работают и как реализовать бесплатный центр сертификации на Linux для вашей организации.

Глава 9. Службы RADIUS в Linux объясняет, как использовать RADIUS в Linux для аутентификации различных сетевых устройств и служб.

Глава 10. Балансировка нагрузки в Linux демонстрирует, что Linux служит отличным балансировщиком, позволяя «бесплатно» балансировать нагрузки, привязанные к каждой задаче, в отличие от традиционных, дорогих и монолитных решений, привязанных к центрам обработки данных.

Глава 11. Перехват и анализ пакетов в Linux посвящена тому, как использовать Linux в качестве узла перехвата пакетов. Здесь рассказывается, как сделать так, чтобы пакеты перехватывались в масштабе всей сети, а также рассматриваются различные методы фильтрации, с помощью которых можно получить информацию, необходимую для решения проблем. Чтобы проиллюстрировать это, мы проведем ряд атак на VoIP систему.

Глава 12. Сетевой мониторинг с помощью Linux объясняет, как централизованно регистрировать трафик в Linux с помощью syslog и настраивать оповещения в реальном времени по ключевым словам, найденным в журналах. Мы также обсудим шаблонные приемы регистрации трафика с помощью NetFlow и связанных с ним протоколов.

Глава 13. Системы предотвращения вторжений в Linux показывает, как приложения Linux оповещают о популярных видах атак и блокируют их, а также как они добавляют важные метаданные к информации о трафике. Мы изучим два различных решения из этой области и продемонстрируем, как различные фильтры позволяют обнаруживать шаблоны в трафике и атаках.

Глава 14. Приманки (honeypots) в Linux посвящена приманкам — фальшивым узлам, которые помогают отвлекать злоумышленников и затруднять их деятельность, одновременно обеспечивая эффективные оповещения для средств защиты. Мы также обсудим, как с помощью приманок исследовать тенденции вредоносного поведения в общедоступном интернете.

Как извлечь максимальную пользу из этой книги

Большинство примеров в книге опирается на Ubuntu Linux в стандартной конфигурации. Конечно, можно установить Ubuntu на «голое железо», однако не исключено, что вам удастся усваивать материал эффективнее, если вы задействуете средства виртуализации, такие как VMware (Workstation или ESXi), VirtualBox или Proxmox (все перечисленное ПО бесплатно, кроме VMware Workstation). Эти средства позволяют делать резервные снимки системы, так что если вы что-то испортите во время экспериментов с тем или иным инструментом, можно будет просто откатить неудачное изменение и попробовать снова.

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

В этой книге мы используем несколько служб Linux, которые в основном реализованы в дистрибутиве Ubuntu Linux версии 20 (или новее). Они перечислены в таблице:

Компоненты или службы, рассматриваемые в книге

Где и как используются

Netcat, Nmap

Инструменты для устранения неполадок проводных и беспроводных сетей. Nmap будет особенно часто появляться на протяжении всей книги

Kismet, Wavemon, LinSSID

Различные инструменты для диагностики беспроводных сетей

iptables и nftables

Стандартные реализации брандмауэра, доступные в Linux

SELinux и AppArmor

Полные наборы средств безопасности для Linux

Berkely Internet Name Domain (BIND)

DNS-сервер, который встроен в Linux и очень широко используется. Обслуживается организацией Internet Systems Consortium (ISC)

ISC DHCP

DHCP-сервер. Чаще всего используется в Linux, тоже поддерживается и обслуживается ISC

OpenSSL

Самый популярный инструмент для работы с сертификатами и диагностики проблем с ними. С его помощью мы также будем развертывать сервер центра сертификации

FreeRADIUS (Remote Authentication Dial-In User Service)

Служба аутентификации, которую чаще всего используют для централизованной аутентификации VPN-серверов, беспроводных устройств и любых других служб в сети

HAProxy

Балансировщик нагрузки, основанный на Linux. Позволяет балансировать рабочую нагрузку между несколькими серверами

Rsyslog

Базовый сервер syslog для LInux, с помощью которого можно централизованно хранить журналы от всевозможных узлов и устройств

Кроме того, в книге фигурируют некоторые дополнительные инструменты Linux, с которыми вы, возможно, не знакомы:

Инструмент, рассматриваемый в книге

Где и как используется

tcpdump, Wireshark, TShark

Инструменты для перехвата пакетов

dSniff, Ettercap, Bettercap

Инструменты, которые могут использоваться злонамеренно для перехвата пакетов, в частности с данными, которые злоумышленник может посчитать интересными (например, учетные данные пользователей)

NetworkMiner

Инструмент, позволяющий просеивать большие объемы перехваченных пакетов и извлекать из них нужные данные.

Проект DShield

Интернет-ресурс, который анализирует журналы и помогает отслеживать тенденции сетевого трафика как в масштабах вашего брандмауэра, так и в интернете в целом

snmpget, snmpwalk

Инструменты командной строки для сбора данных от протокола SNMP

LibreNMS

Система управления сетью (Network Management System, NMS), которую можно легко и быстро развернуть в организации среднего размера. В этой книге мы будем работать с готовой виртуальной машиной LibreNMS, хотя вы, безусловно, можете установить ее с нуля

nfcapd, nfdump

Инструменты командной строки для перехвата, отображения или фильтрации данных, которые передаются по протоколу NetFlow

NfSen

Простой веб-интерфейс для работы с nfcapd и nfdump

Suricata, Snort

Две популярные системы предотвращения вторжений (Intrusion Protection System, IPS). В этой книге мы сосредоточимся только на Suricata, используя готовые сборки SELKS и Security Onion

Zeek

Инструмент, позволяющий добавлять различные метаданные в сетевой трафик, чтобы вы не тратили время и усилия, разбираясь во всем самостоятельно. Например, какой центр сертификации выдал сертификат или какой стране принадлежит IP-адрес атакующего? В книге мы используем Zeek в конфи­гурации из дистрибутива Security Onion

Portspoof

Приманка, которая маскирует порты и применяет элементарные подходы, вводящие злоумышленников в заблуждение

Cowrie

Приманка для протоколов telnet и SSH, которая отслеживает, какие учетные данные используют злоумышленники и какие команды они пробуют во время атак

WebLabyrinth

Веб-приманка, которая предлагает злоумышленникам бесконечное количество веб-страниц. Такие инструменты особенно эффективно замедляют (по принципу «смоляной ямы») средства автоматического сканирования, которые применяют злоумышленники

Thinkst Canary

Коммерческое решение в виде приманки, которая может маскироваться под различные компоненты инфраструктуры

Приманка Internet Storm Center

Размещенная в интернете приманка для веб-трафика, а также протоколов SSH и telnet с централизованной конфигурацией и отчетностью. Пользователи этого инструмента могут участвовать в исследовательском проекте, который отслеживает тенденции в методах работы злоумышленников в масштабах всего интернета

Большинство перечисленных инструментов и служб можно устанавливать параллельно на одном и том же узле Linux по мере чтения этой книги. Это имеет смысл в учебных целях, хотя в реальной сети вы, конечно, распределите важные серверы по нескольким узлам.

Некоторые инструменты мы рассматриваем в составе заранее собранных или предварительно упакованных дистрибутивов. В этих случаях, безусловно, можно развернуть тот же самый дистрибутив в виртуальной машине. Однако вы также можете самостоятельно установить все описываемые инструменты и службы, чтобы глубже разобраться в соответствующих концепциях, подходах и подводных камнях. 

Условные обозначения  

В этой книге используются следующие условные обозначения:

Код в тексте. Указывает фрагменты кода в тексте, имена таблиц баз данных, имена папок и файлов, расширения файлов, пути к файлам и другим ресурсам, фиктивные URL, пользовательский ввод и дескрипторы Twitter. Вот пример: «Все три инструмента распространяются свободно, и их все можно установить с помощью стандартной команды apt-get install <имя пакета> ».

Любой ввод или вывод командной строки записывается так:

$ sudo kismet -c <wireless interface name>

Жирный шрифт. Обозначает новый термин либо важные слова и понятия, на которые следует обратить внимание. Например «В этой главе мы рассмотрим несколько тем, связанных с протоколом DHCP».

Шрифт без засечек используется для обозначения URL, адресов электронной почты, а также элементов, которые вы видите на экране, например надписей на кнопках, пунктов меню или названий диалоговых окон. Вот пример: «Чтобы начать работу в Linux GUI, можно нажать на значок сети на верхней панели, а затем выбрать Настройки (Settings) для вашего интерфейса».

Советы или важные примечания

Обозначаются вот так.

Часть 1. Основы Linux

В этой части описаны различные варианты установки и настройки Linux и причины, по которым имеет смысл выбрать Linux для тех или иных сетевых функций либо служб. Кроме того, подробно рассматривается базовая конфигурация сети в Linux. Этот материал закладывает основу для всех дальнейших глав.

Часть 1 состоит из следующих глав:

• Глава 1. Добро пожаловать в семейство Linux

• Глава 2. Базовая конфигурация сети в Linux. Работа с локальными интер­фейсами

Глава 1. Добро пожаловать в семейство Linux

В этой книге изучается платформа Linux и различные операционные системы семейства Linux — в первую очередь их применение для сетевых служб. Сперва мы обсудим историю ОС, а затем рассмотрим ее базовую конфигурацию и устранение неполадок. Затем мы поработаем с различными сетевыми службами в Linux, которые обычно встречаются в большинстве организаций. По ходу дела мы будем настраивать настоящие службы на реальных узлах, уделяя особое внимание защите и устранению неполадок каждой службы. К концу книги вы достаточно хорошо познакомитесь с этими службами, чтобы начать внедрять некоторые или даже все из них в своей организации. Как говорится, путешествие в тысячу миль начинается с первого шага, так что давайте сделаем этот шаг и приступим к обсуждению платформы Linux в целом.

В этой главе мы начнем свое путешествие с изучения Linux как семейства операционных систем. Все они родственны друг другу, но у каждой системы есть свои уникальные сильные стороны и особенности.

Мы рассмотрим такие темы:

• Почему Linux хорошо подходит для сетевых инженеров.

• Основные дистрибутивы Linux для центров обработки данных.

• Специальные дистрибутивы Linux.

• Виртуализация.

• Как выбрать дистрибутив Linux для вашей организации.

Почему Linux хорошо подходит для сетевых инженеров

В этой книге мы рассмотрим, как поддерживать сеть и устранять ее неполадки с помощью Linux и инструментов на базе Linux, а также как безопасно развертывать типичную сетевую инфраструктуру на платформах Linux.

Почему именно Linux подходит для этих целей? Начнем с того, что архитектура, история и культура Linux стимулируют администраторов писать сценарии и ­автоматизировать процессы. Если доводить это до крайности, можно попасть в курьезные ситуации, но в то же время сценарии для рутинных задач могут ощутимо сэкономить время.

На самом деле даже сценарии для нестандартных задач, которые выполняются раз в год, могут быть полезны: в этом случае администраторам не нужно заново учиться тому, что уже было сделано в прошлом году.

Однако сценарии для рутинных задач приносят еще больше пользы. За долгие годы администраторы Windows убедились, что если выполнять одну и ту же задачу сотни раз в графическом интерфейсе (GUI), то хотя бы несколько раз случится щелкнуть куда-то не туда. А написание сценариев для таких же задач гарантирует стабильные результаты. Кроме того, в сети, где администраторы постоянно производят операции с сотнями или тысячами машин, сценарии часто являются единственным способом выполнять задачи в больших масштабах.

Еще одна причина, по которой сетевые администраторы предпочитают платформы Linux, заключается в том, что Linux, а до этого Unix, существует с тех пор, как появились сети, к которым можно было подключаться. На стороне сервера службы Linux (или Unix) исторически задавали стандарты сетевого взаимодействия, в то время как аналогичные службы Windows лишь копировали службы Linux (Unix), чтобы не отставать от их функциональности.

Если же вам нужен инструмент для сетевого администрирования или диагностики на стороне рабочей станции, в Linux он, вероятно, уже установлен. А если нет, то его можно установить и запустить с помощью однострочной команды вместе с любыми другими необходимыми инструментами, библиотеками или зависимостями. И не нужно платить за лицензию на этот инструмент: как сам Linux, так и любые установленные в нем инструменты (почти без исключения) распространяются бесплатно с открытым исходным кодом.

Наконец, как на стороне сервера, так и на стороне рабочей станции Linux исторически был бесплатным. Даже сейчас, когда коммерческие компании взимают лицензионные сборы за некоторые из основных поддерживаемых дистрибутивов (например, Red Hat и SUSE), эти компании предоставляют соответствующие бесплатные версии. Red Hat предлагает Fedora Linux и CentOS: обе эти ОС бесплатны и в той или иной степени служат для тестирования новых функций Red Hat Enterprise Linux. Бесплатный openSUSE и платный SUSE Linux тоже очень похожи, хотя дистрибутив SUSE тщательнее тестируется, а обновляется чаще и регулярнее. Корпоративные версии обычно лицензируются на определенный срок, при этом лицензия предоставляет клиентам доступ к технической поддержке и часто также к обновлениям ОС.

Многие компании выбирают лицензионные корпоративные версии ОС, но многие другие предпочитают строить инфраструктуру на бесплатных версиях openSUSE, CentOS или Ubuntu. Доступность бесплатных версий Linux означает, что многие организации могут работать со значительно меньшими затратами на IT, что очень сильно повлияло на отрасль в целом.

Почему Linux важен?

На протяжении многих лет одна из шуток в сообществе IT заключается в том, что каждый следующий год объявляется «годом Linux на десктопе», когда Linux будет установлен на большинстве персональных компьютеров в мире, не нужно будет оплачивать лицензии на настольные и бизнес-приложения, а все программы будут распространяться бесплатно с открытым исходным кодом.

Однако на самом деле вместо этого Linux неуклонно проникает в серверную и инфраструктурную части во многих отраслях.

Linux лежит в основе большинства центров обработки данных, даже если они декларируют, что функционируют только под управлением Windows. У многих компонентов инфраструктуры «под капотом» работает Linux с качественным веб-интерфейсом, который соответствует уровню промышленного решения. Если у вас есть сеть хранения данных (Storage Area Network, SAN), то она, скорее всего, базируется на Linux, равно как и балансировщики нагрузки, точки доступа и беспроводные контроллеры. Под управлением Linux работают многие маршрутизаторы и коммутаторы, как и практически все новые программно-определяемые сетевые решения.

Средства информационной безопасности почти без исключения базируются на Linux. Брандмауэры — как традиционные, так и нового поколения, системы обнаружения и предотвращения вторжений (IDS/IPS), системы управления информацией и событиями безопасности (SIEM) и серверы протоколирования — всюду Linux, Linux и еще раз Linux!

Почему Linux так распространен? Есть много причин:

• Это зрелая операционная система.

• В нее встроен механизм исправлений и обновлений.

• Основные функции просты в настройке. Однако стоит отметить, что более продвинутые возможности настраиваются сложнее, чем в Windows. Подробности можно найти в главах о DNS и DHCP.

• С другой стороны, многие функции, которые в Windows поставляются как платные продукты, можно бесплатно установить в Linux.

• Поскольку Linux почти полностью основан на файлах, довольно легко поддерживать его на определенном базовом уровне, если вы поставляете продукты на основе Linux.

• Поверх Linux можно построить практически любое решение, если только правильно сочетать пакеты (бесплатные и с открытым исходным кодом), сценарии и, если необходимо, специальный программный код.

• Если выбрать правильный дистрибутив, то сама операционная система будет бесплатной, что служит отличным стимулом как для поставщиков, стремящихся увеличить прибыль, так и для потребителей, которые пытаются сократить расходы.

Если вас привлекает новое направление инфраструктура как код, то вы будете рады узнать, что почти все языки программирования представлены в Linux и активно развиваются: от таких новых, как Go и Rust, до почтенных Fortran и Cobol. Даже PowerShell и .NET, выросшие из Windows, полностью поддерживаются в Linux. Большинство систем координации инфраструктуры (например, Ansible, Puppet и Terraform) впервые появились под Linux и поддерживаются в этой ОС в первую очередь.

Что касается облачной стороны современной IT-инфраструктуры, то бесплатность Linux — важный фактор того, что поставщики облачных услуг почти с самого начала подталкивают своих клиентов к этому варианту. Если вы подписаны на какую-нибудь облачную службу, которая описывается как «бессерверная» или «…как услуга», то вполне вероятно, что это решение почти полностью работает на Linux.

Наконец, теперь, когда мы увидели, что серверная и инфраструктурная часть IT движется в сторону Linux, стоит отметить, что современные мобильные телефоны неуклонно становятся самой распространенной платформой и вытесняют настольные ПК в компьютерной реальности. На нынешних мобильных устройствах, как правило, установлена iOS или Android, а обе эти системы, как вы наверняка догадались, основаны на Unix/Linux! Итак, «год Linux на десктопе» подкрадывался к нам незаметно по мере того, как изменилось само определение «десктопа».

Вот почему Linux так важен для современных сетевых инженеров и других ­IT-специалистов. В этой книге основное внимание уделено тому, как использовать Linux в качестве инструментария для профессионалов в области сетей, а также как безопасно настраивать и предоставлять различные сетевые службы на платформе Linux.

История Linux

Чтобы понять происхождение Linux, сперва нужно обсудить историю Unix. Система Unix была разработана в конце 1960-х — начале 1970-х годов в Bell Labs, ее главные создатели — Деннис Ритчи (Dennis Ritchie) и Кен Томпсон (Ken Thompson). Название Unix на самом деле было шуточным антонимом Multics — так называлась более ранняя операционная система, которая во многом вдохновила создателей Unix.

В 1983 году Ричард Столлман (Richard Stallman) и Фонд свободного программного обеспечения (Free Software Foundation, FSF) запустили проект GNU (рекурсивная аббревиатура — GNU's Not Unix), целью которого было создать Unix-подобную ОС, доступную для всех бесплатно. Результатом этих усилий стало ядро GNU Hurd, которое принято считать предшественником сегодняшних версий Linux. (SFS предпочел бы, чтобы мы называли их все GNU/Linux.)

В 1992 году Линус Торвальдс (Linus Torvalds) выпустил Linux — первое полностью реализованное ядро GNU. Важно отметить, что сам по себе Linux обычно рассматривается не как операционная система, а как ядро, на основе которого можно создавать операционные системы. Линус Торвальдс по-прежнему поддерживает Linux в качестве ведущего разработчика, но теперь вместе с ним в проекте участвует большая команда отдельных программистов и даже целых корпораций. Таким образом, хотя формально название Linux относится только к ядру, в IT принято называть так же любую операционную систему, построенную на этом ядре.

С 1970-х годов были выпущены сотни отдельных разновидностей Linux, которые обычно называются дистрибутивами. Каждый дистрибутив основан на актуальном ядре Linux и содержит инфраструктуру для установки и систему взаимодействия с репозиториями для ОС и обновлений. Большинство из них уникальны либо сочетанием базовых пакетов, либо назначением: одни дистрибутивы имеют небольшой размер, чтобы соответствовать скромным аппаратным возможностям, другие ориентированы прежде всего на безопасность, третьи рассчитаны на широкое использование в корпоративной среде, и т.д.

Некоторые дистрибутивы остаются мейнстримом в течение долгих лет, а популярность некоторых других со временем снизилась. Их всех объединяет общее ядро Linux, на основе которого создается каждый отдельный дистрибутив. Многие разработчики строят свой дистрибутив на базе другого, модицифицируя его до такой степени, чтобы полученную реализацию можно было назвать новым дистрибутивом. Эта тенденция натолкнула нас на идею «генеалогического древа Linux», где из общего корня растут десятки дистрибутивов. Эта концепция представлена на сайте DistroWatch: https://distrowatch.com/dwres.php?resource=family-tree.

Альтернативой Linux, особенно в аппаратном пространстве Intel / AMD/ARM, является Berkeley Software Distribution (BSD) Unix. BSD Unix — потомок оригинальной Bell Labs Unix, который вообще не основан на Linux. Однако BSD и многие ее производные по-прежнему бесплатны и имеют много общих характеристик (и программного кода) с Linux.

По сей день ключевая особенность как Linux, так и BSD Unix заключается в том, что обе эти системы распространяются свободно. Хотя, безусловно, предлагаются и коммерческие дистрибутивы, почти у всех них есть соответствующие бесплатные версии.

В этом разделе мы кратко рассмотрели как историю создания, так и важность Linux в компьютерной отрасли. Мы разобрались, как появился Linux и как он стал популярным в определенных сегментах IT. Теперь рассмотрим различные версии Linux, которые нам доступны. Это снабдит нас необходимой информацией, чтобы выбрать, какой дистрибутив использовать далее в этой главе.

Основные дистрибутивы Linux для центров обработки данных

Как мы уже говорили, Linux — это не монолитная конструкция, а скорее разнообразная или даже раздробленная экосистема различных дистрибутивов. Все дистрибутивы Linux основаны на одном и том же ядре GNU/Linux, но они разбиваются на группы с разным назначением и разной философией, что обеспечивает широкий выбор организациям, которые хотят стандартизировать ПО на своих серверах и рабочих станциях.

Основные дистрибутивы, которые обычно можно увидеть в современных центрах обработки данных, — Red Hat, SUSE и Ubuntu. Также встречается FreeBSD Unix, хотя сейчас он гораздо менее популярен, чем раньше. Это не означает, что на настольных компьютерах или в центрах обработки данных не бывает других дистрибутивов, но с перечисленными вы будете встречаться чаще всего. У всех них есть версии как для настольных ПК, так и для серверов. Серверные версии часто «урезанные», без офисных приложений, мультимедийных инструментов и зачастую даже без графического интерфейса.

Red Hat

Компания Red Hat была приобретена IBM в 2019 году, но по-прежнему поддерживает Fedora как один из основных проектов. У Fedora есть как серверная, так и настольная версия, и эта система по-прежнему распространяется бесплатно. Коммерческой версией Fedora является Red Hat Enterprise Linux (RHEL), ­которая поставляется по платной лицензии и имеет официальный канал поддержки.

Дистрибутив CentOS начинался как бесплатная версия Linux, которая поддерживалась сообществом и была функционально совместима с Red Hat Enterprise, поэтому стала очень популярной на серверах во многих организациях. В январе 2014 года Red Hat взяла CentOS под свою опеку, став официальным спонсором дистрибутива. В конце 2020 года было объявлено, что CentOS больше не будет поддерживаться как дистрибутив, совместимый с RHEL, а скорее станет чем-то средним между Fedora и RHEL — не настолько новым, чтобы считаться передним краем технологии, но и не таким стабильным, как RHEL. В рамках этого изменения CentOS была переименована в CentOS Stream.

Наконец, Fedora — это дистрибутив с новейшими функциями и кодом, в котором испытываются новые возможности. Дистрибутив CentOS Stream более стабилен, но все еще более «передовой», чем RHEL. RHEL — это стабильная, полностью протестированная операционная система с официальной поддержкой.

Oracle/Scientific Linux

Oracle/Scientific Linux тоже используется во многих центрах обработки данных (и в облачных продуктах Oracle). Oracle Linux основан на Red Hat и позиционируется как полностью совместимый с RHEL. Oracle Linux можно скачивать и использовать бесплатно, но поддержка от Oracle осуществляется только по подписке.

SUSE

openSUSE — это дистрибутив, который развивается силами сообщества и на котором основан SUSE Linux подобно тому, как RedHat Enterprise Linux основан на Fedora.

SUSE Linux Enterprise Server (обычно называемый SLES) на заре существования Linux был главным европейским конкурентом американского дистрибутива Red Hat. Однако те дни остались в прошлом, и в современных центрах обработки данных в Индиане вероятность обнаружить SUSE Linux примерно такая же, как в Италии.

Как и в случае с RedHat и CentOS, у SUSE Linux есть и настольная, и серверная версия. Кроме того, SUSE поддерживает специальную высокопроизводительную версию ОС, которая поставляется с готовыми решениями оптимизации и инструментами для параллельных вычислений. SLES более стабильна по сравнению с openSUSE, которая снисходительнее относится к тому, что не все изменения работают с первого раза. В дистрибутив openSUSE Tumbleweed включаются новейшие функции и версии, тогда как openSUSE Leap по версионированию и стабильности ближе к корпоративным версиям (SLE) операционной системы. Неслучайно эта схема похожа на семейство дистрибутивов RedHat.

Ubuntu

Ubuntu Linux поддерживается компанией Canonical и распространяется бесплатно, без отдельных коммерческих или «экспериментальных» вариантов. Он основан на Debian и отличается уникальным циклом выпуска. Новые настольные и серверные версии выходят каждые 6 месяцев. Версии с долгосрочной поддержкой (long-term support, LTS) выпускаются каждые 2 года, а их поддержка как для серверов, так и для настольных компьютеров действует в течение 5 лет со дня выпуска. Как и в случае с другими крупными поставщиками, официальная поддержка осуществляется по подписке, хотя вполне доступна и бесплатная поддержка сообщества.

Как и следовало ожидать, серверная версия Ubuntu больше ориентирована на работу с ядром ОС, сетью и службами центра обработки данных. Во время установки серверной версии графический интерфейс по умолчанию часто бывает отключен. Однако в настольной версии установлено несколько пакетов для офисной работы, создания и преобразования мультимедиа, а также несколько простых игр.

BSD/FreeBSD/OpenBSD

Как мы упоминали ранее, «генеалогическое древо» BSD происходит от Unix, а не от ядра Linux, но в этих системах много общего кода, особенно если посмотреть на пакеты, которые не входят в ядро.

FreeBSD и OpenBSD исторически считались более защищенными, чем ранние версии Linux. Из-за этого многие брандмауэры и сетевые устройства были построены на основе той или иной ОС из семейства BSD и остаются на этой ОС по сей день. Одна из самых заметных разновидностей BSD — коммерческая операционная система Apple OS X (теперь macOS). Она основана на ОС Darwin, которая, в свою очередь, является ответвлением BSD.

Однако с течением времени возможности безопасности в Linux практически достигли уровня BSD, хотя считается, что настройки BSD по умолчанию обеспечивают бо́льшую безопасность, чем большинство альтернативных дистрибутивов Linux.

Теперь в Linux доступны модули, которые значительно повышают уровень безопасности. Два основных варианта — SELinux и AppArmor. SELinux вырос из дистрибутивов Red Hat и также полностью реализован для SUSE, Debian и Ubuntu. AppArmor обычно считается проще в реализации и обладает многими (но не всеми) похожими функциями. AppArmor доступен в Ubuntu, SUSE и большинстве других дистрибутивов (за исключением RHEL). В обоих модулях реализован подход на основе политик, который значительно повышает общий уровень безопасности ОС.

После того как в ходе своей эволюции Linux стал больше ориентирован на ­безопасность, в том числе благодаря тому что SELinux или AppArmor доступны (и рекомендуются) для большинства современных дистрибутивов Linux, аргумент про «бо́льшую безопасность» BSD по сравнению с Linux теперь оказывается скорее историческим рудиментом, а отнюдь не фактом.

Специальные дистрибутивы Linux

Помимо основных дистрибутивов Linux, существуют дистрибутивы, специально созданные для определенного набора задач. Каждый из них основан на каком-нибудь более распространенном дистрибутиве, но приспособлен под специфические требования. Здесь мы опишем некоторые дистрибутивы, с которыми вы, скорее всего, столкнетесь как сетевой инженер.

Большинство коммерческих сетевых хранилищ (network-attached storage, NAS) и сетей хранения данных (SAN) основаны на Linux или BSD. На момент написания этой книги ведущими службами NAS/SAN с открытым исходным кодом были TrueNAS (ранее FreeNAS) и XigmaNAS (ранее NAS4Free). У обоих продуктов есть бесплатные и коммерческие версии.

Брандмауэры с открытым исходным кодом

В сфере сетевых технологий и безопасности доступен широкий спектр брандмауэров, большинство из которых основано на Linux или BSD. Многие компании предлагают бесплатные брандмауэры, наиболее популярные из которых — pfSense (доступны бесплатные версии и готовые аппаратные решения), OPNsense (бесплатно, за пожертвования) и Untangle (у которого также есть коммерческая версия). Smoothwall — еще одна альтернатива, доступная как в бесплатной, так и в коммерческой версии.

В этой книге мы рассмотрим, как использовать встроенный в Linux брандмауэр для защиты отдельных серверов или периметра сети.

Kali Linux

Произошедший от BackTrack, а до этого от KNOPPIX, Kali Linux представляет собой дистрибутив на основе Debian, который ориентирован на информационную безопасность. Основная цель этого дистрибутива — собрать на одной платформе как можно больше полезных инструментов для тестирования на проникновение и «белого хакинга» и заставить их работать, не мешая друг другу. Более новые версии дистрибутива сосредоточены на том, чтобы поддерживать совместимость этого инструментария по мере обновления ОС (с помощью apt).

SIFT

Дистрибутив SIFT создан командой криминалистов института SANS (SysAdmin, Audit, Network, Security) и ориентирован на инструменты для работы с цифровой криминалистикой. Подобно Kali, цель SIFT — стать «службой одного окна» для бесплатных инструментов с открытым исходным кодом в одной области — цифровой криминалистике и реагировании на инциденты (digital forensics and Incident response, DFIR). Исторически этот дистрибутив был основан на Ubuntu, но в последние годы произошли изменения: теперь SIFT также распространяется в виде сценария, который устанавливает инструменты поверх настольной версии Ubuntu или подсистемы Windows для Linux (WSL, которая также основана на Ubuntu).

Security Onion

Security Onion тоже похож на Kali Linux тем, что содержит ряд инструментов информационной безопасности, однако в этом дистрибутиве применяется подход с позиции защитника системы. Он сосредоточен на поиске угроз, мониторинге сетевой безопасности и управлении журналами. В Security Onion входят такие инструменты, как Suricata, Zeek, Wazuh и многие другие.

Виртуализация

Виртуализация играет важную роль в распространении Linux и позволяет одновременно работать с несколькими дистрибутивами. С помощью локального гипервизора сетевой специалист может запускать десятки различных машин на ноутбуке или настольном компьютере. Первопроходцем в области виртуализации рабочих станций и выделенных серверов была VMware, однако теперь к ней присоединились Xen, KVM, VirtualBox, QEMU и другие решения. Хотя все продукты VMware, кроме VMware Player, являются коммерческими, остальные перечисленные решения на момент написания книги по-прежнему бесплатны. Флагманский гипервизор VMware — ESXi — также доступен бесплатно как отдельный продукт.

Linux и облачные технологии

В наше время облачные экосистемы развиваются во многом благодаря тому, что Linux становится стабильнее, а виртуализация превратилась в массовое явление. Добавьте к этому растущие возможности автоматизации развертывания и обслуживания серверной инфраструктуры и изощренность, доступную разработчикам веб-приложений и интерфейсов прикладного программирования (Application Programming Interfaces, API), и вы получите современные облачные решения. Вот некоторые из их ключевых особенностей:

• Многопользовательская инфраструктура, в которой каждый клиент поддерживает в облаке свои экземпляры — виртуальные серверы и виртуальные центры обработки данных.

• Детальная тарификация либо по месяцам, либо, что чаще, по потреблению ресурсов с течением времени.

• По надежности облачные службы догоняют или даже превосходят многие современные центры обработки данных (хотя недавние сбои показали, что происходит, если класть слишком много яиц в одну корзину1).

• API позволяют относительно просто автоматизировать инфраструктуру, из-за чего для многих компаний подготовка и обслуживание инфраструктуры свелись по большей части к написанию кода (инфраструктура как код).

• Эти API позволяют масштабировать или сокращать ресурсы по мере необходимости, будь то дисковые хранилища, вычислительные ядра, оперативная память, количество сеансов подключения или все вместе.

В конечном итоге облачные службы работают ради прибыли: если компания решит «выгрузить» свой дата-центр в облако, она, вероятно, обнаружит, что все эти небольшие начисления за облачные службы со временем накапливаются и в конечном итоге сравниваются с затратами на локальный центр обработки данных, а то и превосходят их. Однако это часто оказывается все равно выгоднее, потому что оплата облачных служб — это операционные расходы (Op-Ex), которые относятся к прямым затратам, в отличие от капитальных расходов (Cap-Ex) на локальное решение.

Как видите, перенос центра обработки данных в облако действительно дает организации много преимуществ перед локальной инфраструктурой. Это становится все более очевидно по мере того, как используется все больше облачных решений.

Выбор дистрибутива Linux для вашей организации

По большому счету, не так важно, какой дистрибутив вы выберете для своего дата-центра: у всех основных дистрибутивов одни и те же функции, часто идентичные компоненты и схожие варианты поддержки со стороны поставщиков или сообщества. Однако поскольку дистрибутивы все-таки отличаются друг от друга, важно выбрать какой-либо один дистрибутив (или набор похожих дистрибутивов).

Желательно, чтобы ваша организация утвердила в качестве стандарта один дистрибутив, на котором ваша команда сможет специализироваться в дальнейшем. При этом для расширенной поддержки и устранения неполадок вы сможете взаимодействовать с одной и той же структурой, будь то консалтинговая компания, платная группа поддержки от поставщика дистрибутива или сообщество единомышленников на различных интернет-форумах. Многие организации оформляют договоры на поддержку с одним из представителей «большой тройки» — Red Hat, SUSE или Canonical, в зависимости от выбранного дистрибутива.

Вряд ли вы захотите оказаться в ситуации, с которой сталкивались многие мои клиенты: наняв человека, которому интересно учиться, год спустя они обнаруживали, что каждый из серверов, введенных в эксплуатацию за это время, был построен на своем собственном дистрибутиве Linux и все серверы чем-то отличаются друг от друга. Это верная дорога к тому, чтобы сетевая инфраструктура превратилась в бесконечный «научный эксперимент».

Сравните это с другой компанией из моего опыта. Первым сервером у этих клиентов был SUSE Linux для SAP, который, как следует из названия, представляет собой сервер SUSE Linux с предустановленным приложением SAP, которое приобрел клиент (в данном случае SAP HANA). По мере того как их взаимодействие с Linux затрагивало все больше служб, они окончательно остановились на одной платформе SUSE, но выбрали полноценный дистрибутив SLES. Это удерживало компанию на единой операционной системе и, что было не менее важно, на единой лицензии на поддержку SUSE. Сотрудники смогли разиваться и целенаправленно повышать квалификацию в работе с SUSE. Еще одним ключевым преимуществом стало то, что по мере добавления серверов можно было применять единый поток обновлений и исправлений с поэтапным подходом. На каждом цикле исправления сначала применяются к менее важным серверам, а через несколько дней после того, как они протестированы, обновляются основные серверы бизнес-приложений.

Главный совет при выборе дистрибутива — придерживаться одного из более крупных дистрибутивов. Если люди из вашей команды склонны предпочитать какой-то конкретный дистрибутив, обязательно примите это во внимание. Скорее всего, вам подойдет один из массовых дистрибутивов, который активно сопровождается и предлагает платную подписку на техническую поддержку. Даже если сейчас вы не видите необходимости в платной поддержке, в будущем ситуация может измениться.

Итоги

Теперь, когда мы обсудили эволюцию Linux, а также несколько основных дистрибутивов, я надеюсь, что вы стали лучше понимать историю и значение операционных систем. Также надеюсь, что у вас сформировались критерии, которые помогут вам выбрать подходящий дистрибутив для своей сетевой инфраструктуры.

В качестве основного дистрибутива в этой книге мы будем использовать Ubuntu. Он бесплатный, и в версии LTS можно рассчитывать на долгосрочную поддержку по мере того, как мы будем работать с различными сценариями, сборками и примерами из этой книги. Это дистрибутив также встроен в ОС Windows в качестве подсистемы Windows для Linux. Благодаря этому его будет проще осваивать, даже если у вас нет не только лишнего оборудования для отдельной рабочей станции или сервера, но и тестовой платформы виртуализации.

В следующей главе мы обсудим, как подключить сервер или рабочую станцию к сети. Мы разберемся, как работать с локальными интерфейсами и добавлять IP-адреса, маски подсети и любые маршруты, необходимые для того, чтобы ваш узел Linux работал в новой или существующей сети.

Ссылки

• Red Hat Linux: https://www.redhat.com/en

• Fedora: https://getfedora.org/

• CentOS: https://www.centos.org/

• SUSE Linux: https://www.suse.com/

• openSUSE: https://www.opensuse.org/

• Ubuntu Linux: https://ubuntu.com/

• Подсистема Windows для Linux: https://docs.microsoft.com/en-us/

• https://docs.microsoft.com/en-us/windows/wsl/about

• FreeBSD Unix: https://www.freebsd.org/

• OpenBSD Unix: https://www.openbsd.org/

• Различия между Linux и BSD: https://www.howtogeek.com/190773/htg-explains-whats-the-difference-between-linux-and-bsd/

• TrueNAS: https://www.truenas.com/

• XigmaNAS: https://www.xigmanas.com/

• pfSense: https://www.pfsense.org/

• OPNsense: https://opnsense.org/

• Untangle: https://www.untangle.com/untangle

• Kali Linux: https://www.kali.org/

• SIFT: https://digital-forensics.sans.org/community/downloads

• https://www.sans.org/webcasts/started-sift-workstation-106375

• Security Onion: https://securityonionsolutions.com/software

• Kali Linux: https://www.kali.org

1 Возможно, речь идет о сбоях в работе облачных служб компании Amazon, которые произошли 7 декабря 2021 и привели к обширным перебоям в предоставлении услуг многими компаниями по всему миру. — Примеч. пер.

Глава 2. Базовая конфигурация сети в Linux. Работа с локальными интерфейсами

Эта глава посвящена тому, как просматривать и настраивать локальные интерфейсы и маршруты на узле Linux. Насколько это возможно, мы обсудим как новые, так и устаревшие команды для этих операций. Сюда относится отображение и изменение IP-адресов, локальных маршрутов и других параметров сетевого интерфейса. Попутно мы рассмотрим, как создавать IP-адреса и адреса подсетей в двоичном виде.

Мы изучим такие темы:

• Работа с настройками сети: два набора команд

• Вывод информации об IP интерфейса

• Адреса и маски подсети IPv4

• Назначение IP-адреса интерфейсу

Технические требования

Обсуждая различные команды в этой и во всех остальных главах, мы призываем вас попробовать их на своем компьютере. Все команды в этой книге демонстрируются для Ubuntu Linux версии 20 (LTS), но по большей части они должны быть идентичными или очень похожими почти в любом дистрибутиве Linux.

Работа с настройками сети: два набора команд

На протяжении практически всей истории Linux команда ifconfig (interface config, конфигурация интерфейса) и связанные с ней команды были настолько неотъемлемой частью операционной системы Linux, что теперь, когда эта команда уже объявлена устаревшей в большинстве дистрибутивов, она все еще остается в «мышечной памяти» у многих сетевых инженеров и системных админи­страторов.

Почему эти старые сетевые команды были заменены? Тому есть несколько причин. Старые команды плохо совместимы с некоторыми новыми устройствами (в частности, сетевыми адаптерами InfiniBand). Кроме того, по мере развития ядра Linux старые команды работали все менее согласованно, но решить эту проблему мешали требования обратной совместимости.

Старые команды находятся в программном пакете net-tools, а новые — в пакете iproute2. Современным системным администраторам стоит сосредоточиться на новых командах, но знакомство с устаревшим набором по-прежнему может пригодиться. Довольно часто встречаются старые компьютеры под управлением Linux, которые, возможно, никогда не будут обновляться и все еще используют старые команды. Поэтому мы рассмотрим оба набора команд.

Главный вывод из этого состоит в том, что в мире Linux изменения происходят постоянно. Старые команды по-прежнему доступны, но не устанавливаются по умолчанию.

Чтобы установить набор устаревших команд, используйте такую команду (здесь она показана вместе с ее выводом):  

robv@ubuntu:~$ sudo apt install net-tools

  [sudo] password for robv:

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following package was automatically installed and is no longer required:

  libfprint-2-tod1

Use 'sudo apt autoremove' to remove it.

The following NEW packages will be installed:

  net-tools

0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Need to get 0 B/196 kB of archives.

After this operation, 864 kB of additional disk space will be used.

Selecting previously unselected package net-tools.

(Reading database ... 183312 files and directories currently installed.)

Preparing to unpack .../net-tools_1.60+git20180626.aebd88e1ubuntu1_amd64.deb ...

Unpacking net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...

Setting up net-tools (1.60+git20180626.aebd88e-1ubuntu1) ...

Processing triggers for man-db (2.9.1-1) ...

В этой команде install и ее выводе можно заметить несколько особенностей:

• sudo: По сути, sudo означает запускать от имени суперпользователя, поэтому команда выполняется с привилегиями root (администратора). Для sudo нужно ввести пароль пользователя, который запустил команду. Кроме того, этот пользователь должен быть правильно указан в файле конфигурации /etc/sudoers. По умолчанию в большинстве дистрибутивов в этот файл автоматически включается идентификатор пользователя (userid), который был задан при установке операционной системы. Дополнительных пользователей или группы можно добавить с помощью команды visudo.

• Почему мы использовали sudo? Чтобы устанавливать ПО, изменять параметры сети и выполнять многие другие системные операции, нужны повышенные права. В многопользовательской корпоративной системе не стоит допускать, чтобы эти операции выполнял кто-то, кроме администраторов.

• Итак, если команда sudo так хороша, почему бы нам не запускать все с правами суперпользователя? Прежде всего потому, что это небезопасно. Конечно, если у вас есть root-права, все будет работать. Однако любые ошибки и опечатки могут привести к самым плачевным последствиям. Кроме того, если вы работаете с привилегиями суперпользователя и запустите какое-то вредоносное ПО, то у него будут те же привилегии, а это совсем не то, что нужно! И да: вредоносное ПО для Linux действительно бывает и, к сожалению, сопровождает операционную систему практически с самого начала ее существования.

• apt: apt расшифровывается как Advanced Package Tool («расширенный инструмент для работы с пакетами») и устанавливает не только запрошенный пакет, но и другие необходимые пакеты, библиотеки и прочие зависимости, которые нужны для запуска этого пакета. Мало того, эта команда по умолчанию собирает все эти компоненты из онлайн-репозиториев. Такой способ — огромный шаг вперед по сравнению со старой процедурой установки пакетов, когда все зависимости (с правильными версиями) приходилось собирать вручную, а затем устанавливать в правильном порядке, чтобы все новые функции заработали.

• apt является установщиком по умолчанию в Ubuntu, Debian и родственных дистрибутивах, однако в других дистрибутивах применяются другие приложения для управления пакетами. В дополнение к команде apt и ее аналогам по-прежнему можно устанавливать программы из загруженных файлов. Debian, Ubuntu и родственные дистрибутивы используют файлы deb, в то время как многие другие дистрибутивы — файлы rpm. Сводка форматов файлов и приложений приведена в таблице:

Операционная система

Формат файла

Установщики

Debian

.deb

apt, apt-cache, apt-get, dpkg

Ubuntu

.deb

apt, apt-cache, apt-get, dpkg

Red Hat/CentOS

.rpm

yum, rpm

SUSE

.rpm

zypper, rpm

Итак, теперь, когда у нас есть куча новых команд, как получить больше информации о них? Команда man (сокращение от manual) предоставляет документацию по большинству команд и операций в Linux. Например, справку для apt можно вывести на экран с помощью команды man apt:

Рис. 2.1. Пример вывода команды man apt

По мере того как в этой книге будут вводиться новые команды, уделяйте время тому, чтобы просмотреть их документацию с помощью man. Книга предназначена скорее для того, чтобы направлять вас в обучении, а не чтобы заменять официальную документацию по работе с ОС.

Теперь, когда мы поговорили о современных и устаревших инструментах, а затем установили устаревшие команды net-tools, пришло время узнать, что это за команды и что они умеют.

Вывод информации об IP интерфейса

Отображение информации об интерфейсе — обычная задача на рабочей станции Linux. Это особенно полезно, если адаптер вашего узла настраивается автоматически, например с помощью протокола динамической конфигурации узла (DHCP) или автоконфигурации IPv6.

Как мы уже говорили, есть два набора команд для просмотра сведений. Команда ip позволяет отображать или настраивать сетевые параметры узла в новых операционных системах, а команда ifconfig — в старых.

С помощью команды ip можно выводить или обновлять IP-адреса, сведения о маршрутизации и другую сетевую информацию. Например, чтобы вывести информацию о текущем IP-адресе, используйте такую команду:

ip address

Команда ip поддерживает функцию автодополнения, поэтому ip addr или даже ip a дадут одинаковые результаты:

robv@ubuntu:~$ ip ad

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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_ codel state UP group default qlen 1000

    link/ether 00:0c:29:33:2d:05 brd ff:ff:ff:ff:ff:ff

    inet 192.168.122.182/24 brd 192.168.122.255 scope global dynamic noprefixroute ens33

        valid_lft 6594sec preferred_lft 6594sec

    inet6 fe80::1ed6:5b7f:5106:1509/64 scope link noprefixroute

        valid_lft forever preferred_lft forever

Вы увидите, что даже самые простые команды иногда предоставляют гораздо больше информации, чем вам нужно. Например, здесь выводятся сведения как об IP версии 4 (IPv4), так и об IPv6. Результаты можно ограничить только версией 4 или 6, добавив -4 или -6 к параметрам командной строки:

robv@ubuntu:~$ ip -4 ad

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    inet 127.0.0.1/8 scope host lo

        valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_ codel state UP group default qlen 1000

    inet 192.168.122.182/24 brd 192.168.122.255 scope global dynamic noprefixroute ens33

        valid_lft 6386sec preferred_lft 6386sec

В этом выводе можно обнаружить, что интерфейс loopback (логический, ­внутренний интерфейс) имеет IP-адрес 127.0.0.1, а интерфейс Ethernet ens33 имеет IP-адрес 192.168.122.182.

Сейчас самое время ввести man ip и посмотреть, какие еще операции можно выполнять с помощью этой команды:

Рис. 2.2. Страница документации команды ip

Команда ifconfig выполняет практически те же функции, что ip, но, как мы уже отмечали, она встречается в основном в старых версиях Linux. Все устаревшие команды в свое время развивались естественным образом и обрастали новыми функциями по мере необходимости. Это привело к тому, что чем более сложные вещи нужно было выводить или настраивать, тем менее последовательным становился синтаксис. Современные команды были разработаны с нуля и лучше организованы.

Давайте решим ту же задачу с помощью старой команды. Чтобы отобразить IP-адрес интерфейса, просто введите ifconfig:

robv@ubuntu:~$ ifconfig

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1400

        inet 192.168.122.22 netmask 255.255.255.0 broadcast 192.168.122.255

        inet6 fe80::1ed6:5b7f:5106:1509 prefixlen 64 scopeid 0x20<link>

        ether 00:0c:29:33:2d:05 txqueuelen 1000 (Ethernet)

        RX packets 161665 bytes 30697457 (30.6 MB)

        RX errors 0 dropped 910 overruns 0 frame 0

        TX packets 5807 bytes 596427 (596.4 KB)

        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536

        inet 127.0.0.1 netmask 255.0.0.0

        inet6 ::1 prefixlen 128 scopeid 0x10<host>

        loop txqueuelen 1000 (Local Loopback)

        RX packets 1030 bytes 91657 (91.6 KB)

        RX errors 0 dropped 0 overruns 0 frame 0

        TX packets 1030 bytes 91657 (91.6 KB)

        TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Как видите, практически та же самая информация отображается в несколько ином формате. Если вы просмотрите страницу man для обеих команд, то увидите, что в команде ip параметры лучше согласованы, а IPv6 в старой версии поддерживается хуже: например, без специальных средств нельзя выбрать для отображения только IPv4 или IPv6.

Вывод сведений о маршрутизации

В современных сетевых командах сведения о маршрутизации выводятся с помощью той же команды ip. Как вы наверняка догадались, полностью команда выглядит как ip route, и ее можно сократить до ip r:

robv@ubuntu:~$ ip route

default via 192.168.122.1 dev ens33 proto dhcp metric 100

169.254.0.0/16 dev ens33 scope link metric 1000

192.168.122.0/24 dev ens33 proto kernel scope link src

192.168.122.156 metric 100

robv@ubuntu:~$ ip r

default via 192.168.122.1 dev ens33 proto dhcp metric 100

169.254.0.0/16 dev ens33 scope link metric 1000

192.168.122.0/24 dev ens33 proto kernel scope link src

192.168.122.156 metric 100

Из этого вывода видно, что существует маршрут по умолчанию, который указывает на 192.168.122.1. Этот маршрут работает так: если пакет отправляется в пункт назначения, которого нет в таблице маршрутизации, узел передает этот пакет на свой шлюз по умолчанию. Таблица маршрутизации всегда будет отдавать предпочтение наиболее специфичному маршруту, то есть тому, который точнее всего соответствует IP-адресу назначения. Если совпадений нет, то наиболее специфичный маршрут ведет к шлюзу по умолчанию, который указывает на 0.0.0.00.0.0.0 (другими словами, маршрут по принципу «если больше ничего не подходит»). Узел предполагает, что IP-адрес шлюза по умолчанию принадлежит маршрутизатору, который, предположительно, знает, куда отправить пакет дальше.

Мы также видим маршрут до 169.254.0.0/16. Этот адрес называется адресом локальной связи (Link-Local Address, LLA) и определяется в RFC 3927. Документы RFC (Request for Comments) участвуют в неофициальном процессе коллективного рецензирования стандартов интернет-технологий в ходе их разработки. Список опубликованных RFC поддерживается сообществом IETF (Internet Engineering Task Force) по адресу https://www.ietf.org/standards/rfcs/.

Адреса локальной связи работают только в текущей подсети: если у узла нет статически настроенного IP-адреса, а DHCP не назначает адрес, то первые два октета адреса будут определены в соответствии с RFC (169.254), а последние два октета узел назначит почти случайно. После проверки Ping/ARP, которая подтверждает, что этот назначенный адрес действительно доступен, узел готов к обмену данными. (Мы рассмотрим ARP в главе 3 «Диагностика сети в Linux».) Предполагается, что этот адрес взаимодействует только с другими адресами LLA в том же сегменте сети и адреса обычно обнаруживают друг друга с помощью широковещательных и групповых протоколов, таких как ARP, AllJoyn и т.д. Имейте в виду, что эти адреса почти никогда не используются в реальных сетях; они применяются, только если нет совсем никаких альтернатив. Стоит отметить, что компания Microsoft по неизвестной причине называет эти адреса по-другому — автоматическая частная IP-адресация (automatic private internet protocol addressing, APIPA).

Наконец, мы видим маршрут к локальной подсети, в данном случае 192.168.122.0/24. Этот маршрут называется подключенным (connected route), потому что он подключен к этому интерфейсу. Это сообщает узлу, что для связи с другими узлами в его собственной подсети маршрутизация не требуется.

Этот набор маршрутов очень распространен в простых сетях: шлюз по умолчанию, локальный сегмент, и все. Во многих операционных системах вы не увидите подсеть 169.254.0.0, если только узел фактически не использует адрес локальной связи.

В устаревшем наборе команд есть несколько способов вывести текущие маршруты. Типичной командой является netstat -rn, которая показывает состояние сети, маршруты и числовые адреса. Но есть и отдельная команда route (зачем она нужна, мы узнаем далее в этой главе):

robv@ubuntu:~$ netstat -rn

Kernel IP routing table

Destination    Gateway        Genmask        Flags  MSS  Window  irtt  Iface

0.0.0.0        192.168.122.1  0.0.0.0        UG     0    0         0   ens33

169.254.0.0    0.0.0.0        255.255.0.0    U      0    0         0   ens33

192.168.122.0  0.0.0.0        255.255.255.0  U      0    0         0   ens33

robv@ubuntu:~$ route -n

Kernel IP routing table

Destination    Gateway        Genmask        Flags  Metric  Ref  Use Iface

0.0.0.0        192.168.122.1  0.0.0.0        UG     100     0    0   ens33

169.254.0.0    0.0.0.0        255.255.0.0    U      1000    0    0   ens33

192.168.122.0  0.0.0.0        255.255.255.0  U      100     0    0   ens33

Обе команды netstat и route показывают одну и ту же информацию. В устаревшем наборе сетевых инструментов, как правило, для каждой цели есть своя уникальная команда. В данном случае мы видим, что две из них частично дублируют друг друга. Разбираться во всех этих командах и соблюдать нюансы их синтаксиса может оказаться непростой задачей для новичка в Linux. Семейство команд ip значительно облегчает жизнь!

Независимо от того, какой набор инструментов вы в итоге используете, теперь вы знаете основы того, как выводить сведения об IP-адресации и маршрутизации, которые обеспечивают сетевое подключение для узла.

Адреса IPv4 и маски подсети

В предыдущем разделе мы кратко обсудили IP-адреса, а теперь поговорим о них немного подробнее. IPv4 позволяет адресовать каждое устройство в подсети уникальным образом, назначая ему адрес и маску подсети. Например, в нашем примере адрес IPv4 — 192.168.122.182. Каждый октет адреса IPv4 может находиться в диапазоне от 0 до 255, а маска подсети — /24, что также обычно представляется как 255.255.255.0. Это кажется сложным до тех пор, пока мы не разложим все в двоичное представление. 255 в двоичной системе равно 11111111 (8 бит), и три такие группы составляют 24 бита. Итак, наше представление адреса и маски говорит о том, что при маскировании сетевая часть адреса представляет собой 192.168.122.0, а часть адреса, относящаяся к узлу, равна 182 и может варьироваться от 1 до 254.

Разложим адрес IPv4 на составляющие:

Адрес в десятичной форме

192

168

122

182

Адрес в двоичной форме

11000000

10101000

01111010

10110110

Маска подсети в двоичной форме

11111111

11111111

11111111

00000000

Что, если нам понадобится бо́льшая подсеть? Можно просто сдвинуть эту маску на несколько битов влево. Например, для 20-битной маски подсети разложенный адрес выглядит так:

Адрес в десятичной форме

192

168

122

182

Адрес в двоичной форме

11000000

10101000

01111010

10110110

Маска подсети в двоичной форме

11111111

11111111

11110000

00000000

Третий октет маски в данном случае — 0b11110000 (обратите внимание, что двоичное представление обозначается префиксом 0b), чему в десятичной форме соответствует 240. Это маскирует третий октет сети до 0b01110000, или 112, и увеличивает диапазон адресов для наших узлов до 0–15 (0–0b1111) в третьем октете­ и 0–255 (0–0b11111111) в четвертом, так что всего получается 3824 адреса (15 × 255 − 1). Почему в этой формуле фигурирует −1, мы узнаем в следующем разделе.

Нетрудно видеть, что профессионалу в области сетей необходимо приложение-калькулятор, которое преобразует двоичные числа в десятичные и обратно. Такой калькулятор также должен уметь работать с шестнадцатеричными числами; вскоре мы поговорим об этом подробнее.

Теперь, когда мы получили представление об адресах и масках подсети в десятичном и особенно двоичном формате, давайте копнем глубже и рассмотрим другие понятия из области адресации.

Адреса специального назначения

Есть несколько адресов специального назначения, которые необходимо рассмотреть, чтобы дальше разговаривать о том, как IP-адреса работают в локальной сети. Прежде всего, если все биты узла в адресе установлены в 1, то адрес называется широковещательным. Когда вы отправляете информацию на широковещательный адрес, ее принимают и считывают все сетевые интерфейсы в подсети.

Итак, в двух предыдущих примерах широковещание для сети /24 будет выглядеть так:

Адрес в десятичной форме

192

168

122

182

Адрес в двоичной форме

11000000

10101000

01111010

10110110

Маска подсети в двоичной форме

11111111

11111111

11110000

00000000

Широковещание

11000000

10101000

01111010

11111111

Другими словами, получается широковещательный адрес 192.168.122.255.

Широковещание для сети /20 будет таким:

Адрес в десятичной форме

192

168

122

182

Адрес в двоичной форме

11000000

10101000

01111010

10110110

Маска подсети в двоичной форме

11111111

11111111

11110000

00000000

Широковещание

11000000

10101000

01111111

11111111

Преобразовав обратно в десятичный формат, получаем широковещательный адрес 192.168.127.255.

Сдвигая границу между сетевой и узловой частями адреса IPv4, можно понять суть классовой адресации. При преобразовании в двоичный формат первые несколько байтов определяют так называемую классовую маску подсети для этого адреса. В большинстве операционных систем, если вы устанавливаете IP-адрес в графическом интерфейсе, эта классовая маска заполняется по умолчанию. Эти назначения двоичной маски подсети выглядят следующим образом:

Класс

Начальные биты адреса

Маска подсети (битовая)

Маска подсети (десятичная)

Первый возможный адрес

Последний возможный адрес

Класс А

0

/8

255.0.0.0

0.0.0.0

127.255.255.255

Класс B

10

/16

255.255.0.0

128.0.0.0

191.255.255.255

Класс C

110

/24

255.255.255.0

192.0.0.0

223.255.255.255

Класс D (групповая адресация)

1110

224.0.0.0

239.255.255.255

Класс E (зарезервирован, не используется)

1111

240.0.0.0

255.255.255.255

Так устроены классовые маски подсети по умолчанию. Мы изучим их подробнее в следующих двух разделах.

Из всего этого легко понять, почему большинство администраторов используют классовые границы (classful boundaries) в подсетях внутри своей организации. На сегодняшний день большинство внутренних подсетей имеют маски 255.255.255.0 или 255.255.0.0. Любые другие значения сбивают с толку новых членов команды, что может привести к ошибкам в конфигурации сервера или рабочей станции. Кроме того, большинству специалистов не по душе заниматься расчетами каждый раз, когда нужно задать или интерпретировать сетевой адрес.

Второй тип специальных адресов, о котором мы только что упомянули,— это групповая адресация (multicast addresses). Групповые адреса используются, чтобы наладить связь между несколькими устройствами. Например, такие адреса можно использовать, чтобы передавать одинаковый видеопоток на несколько подключенных к сети дисплеев или чтобы настроить созвон или видеовстречу в приложении для конференций. Групповые адреса, локальные в рамках сети, имеют следующую форму:

Возможные двоичные значения

11100000

00000000

00000ххх

хххххххх

Возможные десятичные значения

224

0

1–8

1–255

Последние 11 бит (3 + 8) обычно образуют так называемые общеизвестные адреса для различных групповых рассылок. Вот некоторые распространенные групповые адреса:

224.0.0.1

Все узлы в подсети

224.0.0.2

Все маршрутизаторы в подсети

224.0.0.12

DHCP-серверы и агенты DHCP-ретранслятора

224.0.0.18

Устройства, участвующие в протоколе VRRP

224.0.0.102

Устройства, участвующие в протоколе HSRP (Hot Standby Router Protocol)

224.0.1.1

Все серверыNTP (протокол сетевого времени)

224.0.0.113

Узлы AllJoyn (используется в ОС Windows для обнаружения устройств в локальной сети)

Полный список общеизвестных зарегистрированных групповых адресов составляется и обновляется Администрацией адресного пространства интернета (Internet assigned numbers authority, IANA) по адресу https://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml. Хотя этот список кажется исчерпывающим, некоторые поставщики часто создают свои собственные групповые адреса.

Вы только что познакомились с введением в групповую адресацию. На самом деле она намного сложнее: ее проектированию, реализации и теории посвящены целые книги. Однако того, что мы рассмотрели, достаточно, чтобы получить общее представление.

После широковещательных и групповых адресов рассмотрим семейства IP-адресов, которые, скорее всего, используются в вашей среде.

Частные IP-адреса — RFC 1918

Другой набор специальных адресов — это адресное пространство RFC 1918. Документ RFC 1918 описывает список IP-подсетей, выделенных для использования внутри организаций. Эти адреса недействительны в общедоступном интернете, поэтому их необходимо преобразовывать с помощью NAT (Network Address Translation, «система преобразования сетевых адресов»), прежде чем их входящий или исходящий трафик можно будет маршрутизировать через интернет.

Адреса RFC 1918 могут быть следующего вида:

• 10.0.0.0/8 (Класс А)

• от 172.16.0.0 до 172.31.255.255 (Класс В). По-другому этот диапазон адресов можно представить как 172.16.0.0/16.

• 192.168.0.0/16 (Класс C)

Эти адреса дают организациям большое пространство IP-адресов для внутреннего использования, и все они гарантированно не конфликтуют ни с чем в общедоступном интернете.

В качестве интересного упражнения вы можете выяснить, какие подклассы по умолчанию соответствуют подсетям RFC 1918. Для этого преобразуйте первый октет каждой из них в двоичную систему, а затем сравните их с таблицей в предыдущем разделе.

Спецификация RFC 1918 доступна по адресу: https://tools.ietf.org/html/rfc1918.

После того как мы рассмотрели двоичные аспекты IP-адресации и масок подсети, а также специальные группы IP-адресов, я уверен, что вы устали от теории с математикой и хотите вернуться к упражнениям с командной строкой Linux. Правда, нам еще придется глубже познакомиться с тонкостями адресации для IPv6. Однако не расстраивайтесь: IPv6 мы рассмотрим в приложении, так что прямо сейчас можно вернуться к клавиатуре и командной строке!

Теперь, когда мы хорошо разобрались, как выводить параметры IP на экран и как устроена IP-адресация, давайте настроим IP-интерфейс для работы.

Как назначить IP-адрес интерфейсу

Назначать постоянный адрес IPv4 вам, вероятно, придется почти на каждом сервере, который вы создаете. К счастью, это довольно простая процедура. В новом наборе команд мы будем использовать команду nmcli (Network Manager Command Line). Мы установим IP-адрес, шлюз по умолчанию и DNS-сервер, а также переключим режим адресации в manual. Мы будем отображать сетевые подключения в формате nmcli:

robv@ubuntu:~$ sudo nmcli connection show

NAME                UUID                                  TYPE      DEVICE

Wired connection 1  02ea4abd-49c9-3291-b028-7dae78b9c968  ethernet  ens33

Наше соединение называется Wired connection 1. Однако нам не нужно вводить его каждый раз: можно воспользоваться автодополнением, набрав Wi, а затем Tab, чтобы завершить имя. Кроме того, имейте в виду, что nmcli позволяет сокращать команды, так что можно использовать mod вместо modify, con вместо connection и т.д. Давайте продолжим нашу последовательность команд (обратите внимание, как укорачиваются параметры в последней команде):

$ sudo nmcli connection modify "Wired connection 1" ipv4.addresses 192.168.122.22/24

$ sudo nmcli connection modify "Wired connection 1" ipv4.gateway 192.168.122.1

$ sudo nmcli connection modify "Wired connection 1" ipv4.dns "8.8.8.8"

$ sudo nmcli con mod "Wired connection 1" ipv4.method manual

Теперь сохраним изменения и применим их:

$ sudo nmcli connection up "Wired connection 1"

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

При старом подходе все изменения выполняются путем редактирования файлов, причем имена файлов и их местоположения меняются от дистрибутива к дистрибутиву. Далее показаны наиболее распространенные настройки.

Чтобы изменить DNS-серверы, отредактируйте файл /etc/resolv.conf и измените строку nameserver, чтобы в ней был необходимый IP-адрес сервера:

nameserver 8.8.8.8

Чтобы изменить IP-адрес, маску подсети и т.д., отредактируйте файл /etc/sysconfig/network-scripts/ifcfg-eth0 и задайте такие значения:

DEVICE=eth0

BOOTPROTO=none

ONBOOT=yes

NETMASK=255.255.255.0

IPADDR=10.0.1.27

Если ваш шлюз по умолчанию находится на этом интерфейсе, можно добавить следующую строку:

GATEWAY=192.168.122.1

Опять же, обратите внимание на то, что в разных дистрибутивах редактируемые файлы могут различаться, а особенно на то, что этот подход не имеет обратной совместимости. В современных системах Linux такие методы редактирования базовых файлов для настройки сети чаще всего больше не работают.

Теперь, когда мы знаем, как назначить IP-адрес интерфейсу, давайте рассмотрим, как настроить маршрутизацию на нашем узле.

Как добавить маршрут

Чтобы добавить временный статический маршрут, мы снова используем команду ip. В этом примере мы заставляем наш узел направить маршрут на 192.168.122.10, чтобы добраться до сети 10.10.10.0/24:

robv@ubuntu:~$ sudo ip route add 10.10.10.0/24 via

192.168.122.10

  [sudo] password for robv:

robv@ubuntu:~$ ip route

default via 192.168.122.1 dev ens33 proto dhcp metric 100

10.10.10.0/24 via 192.168.122.10 dev ens33

169.254.0.0/16 dev ens33 scope link metric 1000

192.168.122.0/24 dev ens33 proto kernel scope link src

192.168.122.156 metric 100

Чтобы добавить сетевой интерфейс egress, можно дописать dev <devicename> в конец команды ip route add.

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

Для начала отобразим сетевые подключения в формате nmcli:

robv@ubuntu:~$ sudo nmcli connection show

NAME                UUID                                  TYPE      DEVICE

Wired connection 1  02ea4abd-49c9-3291-b028-7dae78b9c968  ethernet  ens33

Затем добавим к Wired connection 1 маршрут на 10.10.11.0/24 через 192.168.122.11 с помощью nmcli:

robv@ubuntu:~$ sudo nmcli connection modify "Wired connection

1" +ipv4.routes "10.10.11.0/24 192.168.122.11"

Сохраним изменения:

$ sudo nmcli connection up "Wired connection 1"

Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

Теперь, глядя на таблицу маршрутизации, мы видим оба наших статических маршрута:

robv@ubuntu:~$ ip route

default via 192.168.122.1 dev ens33 proto dhcp metric 100

10.10.10.0/24 via 192.168.122.10 dev ens33

10.10.11.0/24 via 192.168.122.11 dev ens33 proto static metric 100

169.254.0.0/16 dev ens33 scope link metric 1000

192.168.122.0/24 dev ens33 proto kernel scope link src 192.168.122.156 metric 100

Однако если перезагрузить систему, можно убедиться, что временного маршрута больше нет, а постоянный остался:

robv@ubuntu:~$ ip route

default via 192.168.122.1 dev ens33 proto dhcp metric 100

10.10.11.0/24 via 192.168.122.11 dev ens33 proto static metric 100

169.254.0.0/16 dev ens33 scope link metric 1000

192.168.122.0/24 dev ens33 proto kernel scope link src 192.168.122.156 metric 100

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

Как добавить маршрут с помощью устаревших команд

Чтобы добавить маршрут, используйте эту команду:

$ sudo route add -net 10.10.12.0 netmask 255.255.255.0 gw 192.168.122.12

Если маршрут нужно сделать постоянным, задача усложняется: постоянные маршруты хранятся в файлах, а имена и расположение файлов различаются в зависимости от дистрибутива. Вот почему в современных системах унифицированные команды iproute2/nmcli значительно упрощают работу.

В старых дистрибутивах Debian/Ubuntu обычно редактируют файл /etc/network/interfaces, добавляя следующую строку:

up route add -net 10.10.12.0 netmask 255.255.255.0 gw 192.168.122.12

А в прежних дистрибутивах семейства Red Hat отредактируйте файл /etc/sysconfig/network-scripts/route-<device name> и добавьте такую строку:

10.10.12.0/24 via 192.168.122.12

Чтобы просто добавить маршруты в виде команд, отредактируйте файл /etc/rc.local. Этот метод работает практически в любой системе Linux, но считается менее элегантным, главным образом потому, что следующий администратор лишь в последнюю очередь будет искать настройки в этом файле (так как он не ­является правильным файлом настроек сети). Файл rc.local