Интерфейс линукс: Интерфейсы | Администрирование Linux

Интерфейсы | Администрирование Linux

Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

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

ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:31:65:b5
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::3db9:eaaa:e0ae:6e09/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1089467 errors:0 dropped:0 overruns:0 frame:0
          TX packets:508121 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:903808796 (903. 8 MB)  TX bytes:31099448 (31.0 MB)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:9643 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9643 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:719527 (719.5 KB)  TX bytes:719527 (719.5 KB)

eth0 – интерфейс, связанный с сетевой картой, работающей через Ethernet (по кабелю). В выводе выше можно увидеть множество полезной информации, например, ip-адрес, привязанный к этому интерфейсу. Если бы сетевых карт было несколько, то кроме eth0, мы бы увидели eth2 и так далее.

lo (loopback device) – виртуальный интерфейс, присутствующий по умолчанию в любом Linux. Он используется для отладки сетевых программ и запуска серверных приложений на локальной машине. С этим интерфейсом всегда связан адрес 127. 0.0.1. У него есть dns-имя – localhost. Посмотреть привязку можно в файле /etc/hosts.

Понимание принципов работы интерфейсов (и в целом tcp/ip) крайне важно для запуска любых сетевых сервисов, будь то веб-сервер или база данных. От этого зависит как доступность сервиса, так и безопасность всего процесса. Мы уже знаем, что запуск сервиса – это запуск процесса операционной системы, который внутри себя должен начать слушать порт на определенном ip-адресе, то есть интерфейсе. По умолчанию большинство сервисов стартует на localhost либо в документации предлагают стартовать на нём.

# Встроенный сервер на PHP. Для старта нужно указать host:port
php -S localhost:8000
[Tue Jul  6 15:39:42 2021] PHP 8.0.7 Development Server (http://localhost:8000) started

На это есть 2 причины. По умолчанию это безопасно. Сервис, запущенный на одном интерфейсе, недоступен с другого. То есть при таком запуске сервис занимает 8000 порт на 127.0.0.1 адресе, но 8000 порт на интерфейсе eth0 остается свободным, а значит снаружи до него не достучаться. Как правило, сервисы не выставляют напрямую во внешний мир, часто для этого служат специальные прокси, которые прокидывают запросы внутрь и обеспечивают дополнительные функции связанные с производительностью или безопасностью.

С другой стороны часть сервисов всё же нужно выставлять наружу. И здесь появляется сложность: нам нужно знать точный ip-адрес интерфейса, на который мы хотим завязаться. Подобное не всегда возможно, адреса имеют свойство меняться. Более того, если сервис запущен на разных машинах, то адреса вообще не совпадут. Как выкручиваться из этой ситуации? Через специальный псевдо-адрес 0.0.0.0. В Linux это не конкретный адрес, а скорее указатель, который говорит о необходимости связать запуск сервиса со всеми доступными интерфейсами в системе. То есть привязавшись к 0.0.0.0, сервис автоматически станет доступным через все сетевые интерфейсы системы.

# Теперь запросы можно выполнять как изнутри компьютера так и снаружи

Ручная настройка сети в Linux

Для доступа к сетевым картам в Linux используются так называемые интерфейсы. Интерфейсы это не файлы устройств и их нет в каталоге /dev. Интерфейсы создаются динамически и не всегда связаны с сетевыми картами. Например интерфейс ppp0 — это интерфейс VPNа, организованного по протоколу PPTP, а интерфейс lo это виртуальная сетевая карта с адресом localhost (127.0.0.1). В Linux имена интерфейсов традиционно состоят из мнемонического типа интерфейса и его порядкового номера. Карты ethernet доступны через интерфейсы eth0, eth2 и т.д. В системах, использующих systemd способ именования другой — интерфейсы имеют имена вида enp2s0 (en -Ethernet, p — PCI, 2 — номер на шине) Список всех интерфейсов можно посмотреть командой ifconfig -a или ip link.

Привязка интерфейса к карте

При наличии нескольких сетевых карт возникает вопрос о порядке их нумерации. В CentOS 6 эта задача возложена на подсистему обнаружения и конфигурации устройств — udev. В системах с systemd правила именования встроены в udev, но могот быть переопределены, как написано ниже.

Конфигурационный файл переименования интерфейсов обновляется автоматически при первом обнаружении очередной сетевой карты и находится в файле /etc/udev/rules.d/70-persistent-net.rules. Файл состоит из строк такого содержания:

# PCI device 0x1af4:0x1000 (virtio-pci)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:29:24:1e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Видно, что нумерация опирается на аппаратный (MAC) адрес карты. Если в компьютере заменить карту, то интерфейс eth0 станет недоступным, а новая карта получит имя eth2. Если есть желание вручную назначить имена картам, то можно отредактировать этот файл, выставив желаемые соответствия между MAC адресами именами интерфейсов (возможно потребуется перезагрузка).

ifcfg

Классическая утилита конфигурации сетевых интерфейсов ifcfg

#просмотр списка активных интерфейсов
ifcfg
#просмотр конфигурации конкретного интерфейса
ifcfg eth0
#просмотр списка доступных интерфейсов
ifcfg -a
#настройка ip адреса и активация интерфейса
ifconfig eth0 192. 168.0.1 netmask 255.255.255.0 up 
#деактивация интерфейса
ifconfig eth0 down

route

Настройка таблицы маршрутизации route

#добавление шлюза по умолчанию
route add default gw 192.168.0.1
#добавление маршрута в локальную сеть
 route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
#добавление маршрута в удаленную сеть
route add -net 192.57.66.0 netmask 255.255.255.0 gw 192.168.0.2
#удаление маршрута
route del -net 192.57.66.0 netmask 255.255.255.0 gw 192.168.0.2
#просмотр таблицы маршрутизации
route
#или
netstat -r

ip

В современных дистрибутивах линукса на смену ifconfig и route приходит универсальная утилита ip

#просмотр списка доступных интерфейсов
ip link
#просмотр статистики по интерфейсам
ip -s link
#просмотр ip адресов
ip addr
#просмотр таблицы маршрутизации
ip route

DNS

Адреса серверов DNS и имя локального домена вписываются в файл /etc/resolv.conf

search example. com
nameserver 8.8.8.8

Общие настройки сети

Файл /etc/sysconfig/network используется стартовыми скриптами и содержит ключевые параметры — нужна ли сеть, нужно ли конфигурировать IP v6, имя компьютера. Сюда можно вписать шлюз по умолчанию, но CentOS 6 ориентируется на динамическое подкючение к сетям через WiFi и вписывает его в конфигурацию подходящего интерфейса.

NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=wwww.example.com
GATEWAY=10.10.10.1

Конфигурация интерфейса

Файлы в каталоге /etc/sysconfig/network-scripts с именами вида ifcfg-eth0

Интерфейс, получающий адрес по DHCP

# динамическая конфигурация интерфейса
ONBOOT="yes"
DEVICE="eth0"
BOOTPROTO="dhcp"

Ручная конфигурация

# статическая конфигурация интерфейса
ONBOOT="yes"
DEVICE="eth2"
BOOTPROTO="static"
IPADDR=145.14.137.221
PREFIX=24
# конфигурация шлюза и DNS
GATEWAY=192.168.1.1
DEFROUTE=yes
DNS1=192.168.1.14
# NM - NetworkManager - графическая оболочка + автоматизация настроек
NM_CONTROLLED="no"

Дополнительный IP адрес на интерфейсе eth2

ONBOOT=no
DEVICE=eth2:0
BOOTPROTO=static
IPADDR=172. 16.12.6
NETMASK=255.255.0.0
# следующие два параметра можно не писать
# они вычисляются из IP и маски
BROADCAST=172.16.255.255
NETWORK=172.16.0.0

Инициализация VLAN на eth2

DEVICE=eth2.72
VLAN=yes
VLAN_TRUNK_IF=eth2
BOOTPROTO=static
IPADDR=10.10.0.1
NETMASK=255.255.255.192
ONBOOT=yes

Настройка DNS

Файл /etc/resolv.conf

# мой домен, для подстановки в короткие имена
search example.com
# сервер DNS
nameserver 8.8.8.8

Ручная настройка имен хостов файл /etc/hosts

127.0.0.1               localhost.localdomain localhost ANY
::1             localhost6.localdomain6 localhost6
194.87.0.50           www.ru

Настройка брандмауэра

Файл /etc/sysconfig/system-config-firewall правила для настройки программой system-config-firewall

Файл /etc/sysconfig/iptables текущие правила, сохраненные на случай перезагрузки.

После ручного изменения правил их можно сохранить командой service iptables save

3 способа настройки сетевого интерфейса в Linux

Опубликовано:
10 марта 2020 г.

|

|

на
Джеймс Бригман (Красная шляпа)

Примечание редактора: эта статья была написана, когда Джеймс Бригман был участником программы Red Hat Accelerator.

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

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

IP-адрес: Уникальный номер, определяющий точку доступа к вашему сетевому интерфейсу. Оно имеет форму : xxx.xxx.xxx.xxx, где «xxx» – это три или меньше числа от 0 до 255. Это число может быть полностью составлено, но обычно оно принимает форму, которая работает с остальные три числа. Если вы используете домашний маршрутизатор с DHCP, который является типичной конфигурацией по умолчанию, маршрутизатор «назначит» IP-адрес вашему сетевому интерфейсу. Вам вообще не нужно будет вводить номер.

Шлюз: Уникальный номер, присвоенный сетевому интерфейсу на «другом конце провода», через который должен обмениваться данными ваш компьютер. Опять же, он имеет общий формат xxx.xxx.xxx.xxx и принимает форму, которая также работает с двумя другими числами. Если вы используете домашний маршрутизатор, ваш домашний маршрутизатор генерирует этот номер, потому что это шлюз, через который вы общаетесь с остальным миром.

[ Получите руководство по установке приложений в Linux. ]

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

Обратите внимание, что я не буду вдаваться в как этих чисел; Я просто говорю, что они нужны для настройки сетевого интерфейса. Я пропущу это, чтобы вы могли перейти к сути статьи: три способа настройки сетевых интерфейсов. В каждом случае числа, которые я использую, будут реальными числами, применимыми к системе, которую я использовал для написания этой статьи. Я использовал CentOS 8 для создания образов, но все, что вы видите здесь, одинаково в Fedora и Red Hat Enterprise Linux.

Во время установки

Установщик Anaconda запрашивает настройку сети, и вы не сможете завершить установку, не предоставив эти номера установщику. Вот начальный экран, в котором используется «Имя сети и хоста» в крайнем правом столбце, третий выбор вниз:

Изображение

При выборе «Имя сети и хоста» появляется следующий экран:

Изображение

Программа установки автоматически определила один доступный интерфейс Ethernet и выбрал его для настройки. Текст рядом с выбранным интерфейсом — это системное имя интерфейса, состояние соединения, аппаратный адрес (найдено из системы, это не вводим) и скорость (тоже найдено из системы).

Что делать в этом случае? Просто переместите кнопку подключения Ethernet из положения ВЫКЛ. в положение ВКЛ. и посмотрите, что произойдет:

Изображение

Когда вы сделаете это, появится информация о сети: IP-адрес, маршрут по умолчанию и DNS. Эти номера были получены от DHCP, потому что, когда вы переводите кнопку соединения Ethernet в положение ON, программа установки запрашивает DHCP и регистрирует систему в DHCP. DHCP — это протокол динамической конфигурации хоста. Теперь ваша сеть настроена, и ваша система подключена к локальной сети и, при необходимости, к Интернету.

С рабочего стола

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

[ Памятка: список утилит и команд Linux для управления серверами и сетями. ]

Вы можете спросить: «Как вы зашли так далеко, если у вас не была настроена сеть?» В этом случае предположим, что DHCP дал нам наш начальный IP-адрес, но по какой-то причине вам нужно изменить эти параметры. Щелкните значок «Сеть» в правом верхнем углу рабочего стола Linux GNOME:

Изображение

При нажатии на значок сети открывается диалоговое окно:

Изображение

При выборе «Настройки проводной сети» открывается всплывающее окно:

Изображение

Снова есть кнопка ВКЛ/ВЫКЛ, и в этом случае , он находится в положении ON. При выборе кнопки с шестеренкой отображаются сетевые номера, назначенные (по-прежнему DHCP) сетевому интерфейсу. Вы узнаете наши три числа как адрес IPv4, маршрут по умолчанию и DNS.

Если вы нажмете на IPv4, вы увидите, что ваши старые знакомые номера были предоставлены вашему сетевому интерфейсу DHCP.

Изображение

Параметры, определенные в этих графических инструментах, должны находиться в файле, который вы можете видеть. Это файл /etc/sysconfig/network-scripts/ifcfg-enp0s3 . Он управляется средством управления сетью nmcli . Соответствующая часть информации здесь касается использования DHCP, который используется для сбора этих трех важных сетевых номеров. Эти номера не записываются в файл /etc/sysconfig/network-scripts/ifcfg-enp0s3 . Важный параметр, показанный ниже:

BOOTPROTO="dhcp"

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

Изображение

[ Узнайте, как успешно управлять средой Linux. ]

Как исправить проблему «localhost»?

Если ваша система Linux останется без имени, это означает, что она получает имя хоста по умолчанию «localhost.localdomain». Вы не хотите создавать более одной системы с этим именем хоста по умолчанию. Если у вас есть несколько систем с одинаковым именем, вы можете ссылаться на эти системы в сети только по IP-адресу, и имя системы становится бесполезным.

Для DHCP вы можете установить DHCP_HOSTNAME в файле ifcfg-enp0s3 . Отредактируйте файл и добавьте следующую строку:

DHCP_HOSTNAME=unicorn.mystical.com

Для этой статьи я использую CentOS8/RHEL8. Вы не можете перезапустить сеть с помощью systemctl, потому что network. service устарела. В версии 8 используйте команду nmcli для перезапуска сети.

 $ сеть sudo nmcli отключена
$ sudo nmcli networking on 

Выйдите из окна терминала, поскольку вы запустили его до установки DHCP_HOSTNAME , оно по-прежнему показывает localhost в качестве имени хоста. Вы должны увидеть следующее:

Изображение

И после выхода и перезапуска окна:

Изображение

Есть несколько других способов установить имя хоста (не нужно гуглить). Вы можете найти эту информацию прямо здесь, в Enable Sysadmin. Пожалуйста, обратитесь к этой подробной статье Сета Кенлона о включении системного администратора: «7 способов установить имя хоста в Fedora, CentOS или Red Hat Enterprise Linux».

Дополнительные сведения о настройке сетевых интерфейсов в CentOS8/RHEL8 см. в статье Настройка сети и управление ею.

Темы:
линукс
Сеть

Интерфейс программирования Linux

Интерфейс программирования Linux

man7. org > тлпи


Интерфейс программирования Linux
(опубликовано
в октябре 2010 г.,
Без Крахмального Пресса,
ISBN 978-1-59327-220-3)
представляет собой подробное руководство и справочник по
Системное программирование Linux и UNIX.

1552 страницы, 115 диаграмм, 88 таблиц,
около 200 примеров программ и более 200 упражнений,
TLPI является наиболее полным описанием
Доступно системное программирование Linux и UNIX.
Автор,
Майкл Керриск,
является сопровождающим Linux
man-страниц
проект, который документирует ядро ​​Linux и API glibc .
Он уже давно активно занимается документацией,
тестирование и обзор дизайна интерфейсов пользовательского пространства ядра Linux.

Закупки

Если вы хотите купить копию TLPI, см.
покупка Программный интерфейс Linux .

Учебные курсы

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

Дополнительная информация о TLPI

  • Подробное описание /
    Краткое описание
  • отзывов
  • Исходный код
    для примеров программ

    • Просмотрите все примеры онлайн
    • Часто задаваемые вопросы об исходном коде
  • Содержание :

    • Список глав
    • Подробно:
      с номерами страниц
      (PDF, 19 страниц) или
      без номеров страниц (HTML)
  • Образцы из книги для скачивания:

    • Предисловие (PDF, 11 страниц)
    • Глава 4: Файловый ввод-вывод: универсальная модель ввода-вывода (PDF, 19 страниц)
    • Глава 24: Создание процесса (PDF, 18 страниц)
    • Глава 52: Очереди сообщений POSIX (PDF, 26 страниц)
    • Список используемой литературы
      (PDF, 9страницы)
    • Индекс
      (PDF, 60 страниц)
  • Об авторе
  • Ошибки
  • Переводы
  • Часто задаваемые вопросы
  • Использование TLPI в качестве текста университетского курса? Смотри сюда.