Network configuration (Русский)
В этой статье описана настройка подключения к сети на 3-м уровне сетевой модели OSI и выше. Отдельные виды передачи информации рассматриваются на подстраницах /Ethernet (Русский) и /Wireless (Русский).
Contents
Проверка подключения
При появлении проблем с подключением последовательно выполните описанные ниже шаги и убедитесь, что:
- Сетевой интерфейс обнаружен и включён. В противном случае, проверьте драйвер устройства – см. /Ethernet (Русский)#Драйвер устройства или /Wireless (Русский)#Драйвер устройства.
- Вы подключены к сети: воткнут сетевой кабель или есть подключение к беспроводной сети.
- Сетевому интерфейсу присвоен IP-адрес.
- Таблица маршрутизации настроена правильно.
- Возможно выполнить ping локального IP-адреса (например, шлюза по умолчанию).
- Возможно выполнить ping публичного IP-адреса (например, 8.8.8.8 — DNS-сервер Google и удобный адрес для проверки подключения).
- Работает распознавание доменных имен (например, archlinux.org ).
This article or section needs expansion.
Чтобы установить, есть ли связь с удалённым хостом, используется утилита ping. Утилита посылает хосту ICMP-пакеты и записывает полученные ответы:
Для каждого полученного ответа будет выведена соответствующая информация, как показано выше. См. справочную страницу ping(8) для получения более подробной информации. Также обратите внимание, что удалённый хост может игнорировать ICMP-запросы. [1]
Кроме того, если вы не получаете ответов, это может быть связано со шлюзом по умолчанию или интернет-провайдером. Можно воспользоваться утилитой traceroute для диагностики маршрута к хосту.
Управление сетевым подключением
Чтобы настроить сетевое подключение, последовательно выполните следующие действия:
- Убедитесь, что сетевой интерфейс обнаружен и включен;
- Подключитесь к сети. Вставьте Ethernet-кабель или подключитесь к беспроводной сети.
- Настройте сетевое подключение:
- статический IP-адрес;
- динамический IP-адрес: используйте DHCP
net-tools
Набор утилит net-tools считается устаревшим, рекомендуется использовать вместо него пакет iproute2 . [2]
Устаревшая команда | Замена |
---|---|
arp | ip neigh |
ifconfig | ip address, ip link |
netstat | ss |
route | ip route |
Более подробную информацию о замене устаревших команд можно найти в этом сообщении.
iproute2
iproute2 — зависимость мета-пакета base , включающий интерфейс командной строки для управления сетевыми интерфейсами, IP-адресами и таблицей маршрутизации. Не забудьте, что настройки, сделанные посредством ip , не сохранятся после перезагрузки. Для применения постоянных настроек можно использовать сетевой менеджер или автоматизировать ip-команды посредством скриптов или файлов юнитов systemd. Также обратите внимание, что ip команды часто имеют сокращённую форму, но в этой статье для большей ясности они указаны полностью.
Сетевые интерфейсы
По умолчанию, udev дает имена сетевым интерфейсам в соответствии со схемой именования, в которой тип устройства обозначается двухбуквенным префиксом: en (проводной/Ethernet), wl (беспроводной/WLAN) или ww (WWAN).
Обнаружение сетевых интерфейсов
Имена как проводных, так и беспроводных интерфейсов можно найти посредством команд ls /sys/class/net и ip link . Имейте в виду, что префиксом lo обозначается петлевое устройство, которое не используется для создания сетевого подключения.
Имена беспроводных устройств также можно получить посредством iw dev . См. также /Wireless (Русский)#Определение имени интерфейса.
Если сетевой интерфейс не обнаружен, убедитесь, что драйвер устройства (проводного или беспроводного) был успешно загружен во время запуска системы.
Включение и отключение сетевых интерфейсов
Включение и выключение интерфейса производится командой ip link set интерфейс up|down (подробнее см. ip-link(8) ).
Для проверки текущего состояния интерфейса (например, enp2s0 ) выполните:
На состояние интерфейса указывает слово UP в
, а не в state UP .
Статический IP-адрес
Настройка статического IP-адреса производится либо посредством сетевого менеджера, либо с помощью демона dhcpcd.
Чтобы настроить статический IP-адрес вручную, добавьте IP-адрес как описано в разделе #IP-адреса, настройте таблицу маршрутизации и DNS-сервер.
IP-адреса
Для управления IP-адресами используется команда ip-address(8) .
Показать существующие IP-адреса:
Добавить IP-адрес к сетевому интерфейсу:
Обратите внимание:
- адрес указан в CIDR-нотации вместе с маской подсети;
- спецсимвол + говорит утилите ip вычислить широковещательный адрес на основе IP-адреса и маски подсети.
Удалить IP-адрес устройства:
Удалить все адреса определенного интерфейса (можно добавить критерий, на соответствие которому будет проверяться каждый адрес перед удалением):
Таблицы маршрутизации
С помощью таблицы маршрутизации определяется возможность достижения удалённого хоста, напрямую или посредством какого-либо шлюза (маршрутизатора). Если подходящего маршрута нет, то используется адрес шлюза по умолчанию.
Настройка таблицы маршрутизации производится посредством команды ip-route(8) .
В приведённых ниже примерах значение ПРЕФИКС либо указывается в CIDR-нотации, либо принимает значение default для шлюза по умолчанию.
Показать маршруты IPv4:
Показать маршруты IPv6:
Сервер DHCP предоставляет клиенту динамический IP-адрес, маску подсети, IP-адрес шлюза по умолчанию и опционально — сервер имён DNS.
Для использования DHCP нужен DHCP-сервер в вашей сети и DHCP-клиент на локальной машине:
Клиент | Пакет | Archiso | Примечания | Юниты systemd |
---|---|---|---|---|
dhcpcd | dhcpcd | Да | DHCP, DHCPv6, ZeroConf, статический IP | dhcpcd.service , dhcpcd@интерфейс.service |
ISC dhclient | dhclient | Да | DHCP, DHCPv6, BOOTP, статический IP | dhclient@интерфейс.service |
Кроме того, iwd имеет встроенный DHCP-клиент, который может использоваться в некоторых конфигурациях: iwd#Enable built-in network configuration.
Сервер
This article or section needs expansion.
Сервер | Пакет | IPv4 | IPv6 | GUI | Интерфейсы | Хранение данных | Примечания |
---|---|---|---|---|---|---|---|
dhcpd | dhcp | Да | Да | Glass-ISC-DHCP | ? | Файл | |
dnsmasq | dnsmasq | Да | Да | Нет | ? | Файл | Также DNS, PXE и TFTP |
Kea | kea | Да | Да | Kea-Anterius (Experimental) | REST, RADIUS и NETCONF | Файл, MySQL, PostgreSQL и Cassandra | Также DNS |
Сетевые менеджеры
Сетевой менеджер позволяет создавать т.н. «сетевые профили», содержащие настройки сетевого подключения, что облегчает переключение между сетями.
Сетевой менеджер | Графический интерфейс | Archiso [3] | Утилиты командной строки | Поддержка PPP (например, 3G-модем) | DHCP-клиент | Юниты systemd |
---|---|---|---|---|---|---|
ConnMan | 8 неофиц. | Нет | connmanctl(1) | Да (с ofono AUR ) | встроенный | connman.service |
netctl | 2 неофиц. | Нет | netctl(1) , wifi-menu | Да | dhcpcd или dhclient | netctl-ifplugd@интерфейс.service , netctl-auto@интерфейс.service |
NetworkManager | Да | Нет | nmcli(1) , nmtui(1) | Да | встроенный, dhcpcd или dhclient | NetworkManager.service |
systemd-networkd | Нет | Да ( base ) | networkctl(1) | Нет [4] | встроенный | systemd-networkd.service , systemd-resolved.service |
Wicd | Да | Нет | wicd-cli(8) , wicd-curses(8) | Нет | dhcpcd или dhclient | wicd.service |
Установка имени хоста
Имя хоста — уникальное имя-идентификатор машины в сети. Имя хоста содержится в файле /etc/hostname , описание которого и правила распознавания имён можно найти в справочных страницах hostname(5) и hostname(7) соответственно. В файле также может храниться доменное имя системы, если оно существует. Чтобы задать имя компьютера, добавьте в файл /etc/hostname одну строку:
В качестве альтернативы для задания имени компьютера можно воспользоваться утилитой hostnamectl(1) :
Утилита hostname(1) из пакета inetutils позволяет задать имя хоста временно, до первой перезагрузки:
На странице справочного руководства machine-info(5) можно найти информацию о том, как задать «красивое» имя машины и другие метаданные.
Разрешение имени хоста
Модуль nss-myhostname входящей в состав systemd службы Name Service Switch (NSS) позволяет выполнять разрешение имени локального хоста без обращения к файлу /etc/hosts . Этот модуль включён по умолчанию. Однако следует иметь в виду, что некоторые программы всё же полагаются на файл /etc/hosts . [5], [6]
Чтобы настроить файл /etc/hosts , добавьте в него следующие строки:
В результате система будет использовать оба варианта — и NSS, и файл /etc/hosts :
Разрешение имён хостов локальной сети
Чтобы машина была доступна по локальной сети посредством имени хоста, следует выбрать один из вариантов:
- отредактировать файл /etc/hosts на каждом устройстве вашей локальной сети, см. hosts(5) ;
- выбрать DNS-сервер для разрешения вашего имени хоста и настроить все машины в локальной сети использовать его (например, посредством #DHCP);
- использовать сервис Zeroconf, осуществляющий автоматическое создание IP-сети без необходимости выполнения ручных настроек. Можно выбрать одну из двух реализаций:
- NetBIOS. Разработан компанией Microsoft, входит в состав Samba. Всё, что необходимо — запустить nmb.service . Машины с операционными системами Windows, macOS, или Linux и работающим nmb смогут найти ваш компьютер в сети;
- mDNS. Возможны два варианта использования: Avahi и systemd-resolved. Компьютеры с macOS или Linux, на которых запущен Avahi или systemd-resolved, смогут обнаружить ваш хост. Windows не имеет встроенного mDNS клиента или демона. Старый Win32 API не поддерживает mDNS, что может помешать старым приложениям Windows получить доступ к вашей системе.
Советы и рекомендации
Смена имени интерфейса
Вы можете изменить имя устройства, установив его вручную при помощи правила udev. Например:
- Чтобы увидеть MAC-адрес каждой платы, используйте команду cat /sys/class/net/имя_устройства/address
- Убедитесь, что в ваших правилах udev используются шестнадцатиричные значения со строчным написанием. Буквы не должны быть прописными
Если сетевая плата имеет динамический MAC-адрес, вы можете использовать DEVPATH , например:
Чтобы получить DEVPATH всех подключённых устройств, посмотрите куда указывают символические ссылки в /sys/class/net/ . Например:
Паттерн пути устройства (DEVPATH) должен подходить для обоих названий устройств, и нового, и старого, поскольку правило udev может срабатывать в процессе загрузки более одного раза. Например, для второго правила в примере выше назначается название устройства en , и если указать путь «/devices/pci*/*1c.0/*/net/enp*» , то паттерн не подойдет. Если после этого системное правило по умолчанию сработает во второй раз, то название изменится обратно на, к примеру, enp1s0 .
Если вы используете USB-интерфейс (например, подключаясь через Android-смартфон) с динамическим MAC-адресом и хотите иметь возможность использовать разные USB-порты, вы можете создать правило на основе данных о производителе и ID устройства:
Если необходимо проверить созданное правило, его можно запустить непосредственно из пространства пользователя, например командой udevadm —debug test /sys/class/net/* . Не забудьте предварительно отключить интерфейс, который собираетесь переименовать (например, выполнив ip link set enp1s0 down ).
Традиционные названия интерфейсов
Если вы предпочитаете восстановить традиционные названия интерфейсов вроде eth0 , использование предсказуемых имён интерфейсов может быть отключено с помощью создания маски для правила udev.
Другой способ — добавить net.ifnames=0 в параметры ядра.
Установка MTU и длины очереди
Вы можете изменить MTU и длину очереди для устройства, определив их вручную в правиле udev. Например:
Объединение сетевых интерфейсов (bonding) или LAG
Бондинг — объединение нескольких сетевых интерфейсов в одно логическое устройство. Подробнее см. статьи netctl, systemd-networkd и Wireless bonding.
Создание псевдонимов IP-адресов
Псевдонимы (aliases) необходимы для назначения нескольких IP-адресов одному сетевому интерфейсу. Благодаря этому один узел сети может иметь несколько подключений, каждое из которых используется в своих целях. Типичное использование этой возможности — виртуальный хостинг Web- и FTP-серверов или реорганизация серверов без необходимости обновления каких-либо других машин (это особенно полезно для серверов имен (nameservers)).
Пример
Чтобы вручную назначить псевдоним для определенного сетевого интерфейса (например, enp2s0 ) используйте входящую в состав пакета iproute2 утилиту ip:
Для удаления псевдонима выполните
По умолчанию для исходящих из определённой подсети пакетов используется основной псевдоним устройства. Если же отправитель находится в подсети вторичного псевдонима, то IP-адрес отправителя в заголовке пакета будет соответствующим. В случае наличия более чем одного сетевого интерфейса маршруты по умолчанию можно уточнить командой ip route .
«Неразборчивый» режим
Включение «неразборчивого» режима заставит (беспроводную) сетевую плату перенаправлять весь трафик, который она получает, в операционную систему для дальнейшей обработки. Это противоположность «нормальному режиму», при котором сетевая плата будет терять пакеты, не предназначенные для приема. Чаще всего эта возможность используется для продвинутого решения сетевых проблем и анализа пакетов.
Если вы хотите включить «неразборчивый» режим для интерфейса eth0 , выполните:
Получение информации о сокетах
Входящая в состав пакета iproute2 утилита ss используется для вывода информации о сокетах. Обладает схожим функционалом со считающейся устаревшей утилитой netcat.
Показать все TCP-сокеты с названиями сервисов:
Показать все TCP-сокеты с номерами портов:
Показать все UDP-сокеты:
За подробной информацией обращайтесь к справочной странице ss(8) .
Решение проблем
Проблема масштабирования TCP window
Пакеты TCP содержат в своих заголовках значение «window», обозначающее, как много данных другие узлы могут посылать в ответ. Это значение может содержать только 16 бит информации, следовательно, размер window должен быть не более 64Kб. Пакеты TCP на некоторое время кэшируются (они должны быть перераспределены), а, поскольку память ограничена, один узел может легко перевалить за это значение.
В далеком 1992 году становилось доступно все больше и больше памяти, и для улучшения ситуации был написан RFC 1323: Window Scaling. Значение «window», содержащееся во всех пакетах, будет изменено при помощи коэффициента масштабирования (Scale Factor), определяемого один раз в самом начале подключения. Этот 8-битный коэффициент масштабирования позволяет Window быть в 32 раза больше, чем изначальные 64Kб.
Похоже, некоторые нестандартные маршрутизаторы и межсетевые экраны в интернете переписывают этот коэффициент в значение 0, что вызывает недопонимание между узлами. В ядре Linux версии 2.6.17 была представлена новая схема подсчета, генерирующая максимальные коэффициенты масштабирования и виртуально делающая последующие подсчеты нестандартных маршрутизаторов и межсетевых экранов более видимыми.
В итоге соединение в лучшем случае очень медленное или часто рвется.
Диагностика
Прежде всего, необходимо разъяснить: это странная проблема. В некоторых случаях вы не сможете по-полной использовать соединения TCP (HTTP, FTP и т.д.), в других вы сможете обращаться к некоторым узлам (лишь нескольким).
Если у вас появилась такая проблема, вывод dmesg будет нормальным, логи — чистыми, а ip addr сообщит о нормальном состоянии. Все будет выглядеть нормально.
Если вы не можете просматривать никакие веб-сайты, но можете отправлять запросы ping на некоторые узлы, высока вероятность, что у вас именно эта проблема: ping использует ICMP и не затрагивается проблемами TCP.
Вы можете попробовать использовать Wireshark. В итоге вы можете получить успешные соединения UDP и ICMP, но неудачные соединения TCP (только для неизвестных узлов).
Способы решения проблемы
Плохой
Плохой способ заключается в изменении значения tcp_rmem , на котором основывается подсчет коэффициента масштабирования. Несмотря на то, что это должно помочь для большинства узлов, это не гарантирует успеха, особенно для очень удаленных из них.
Хороший
Просто отключите масштабирование Window. Поскольку оно — лишь приятная функция TCP, это может быть некомфортно, особенно, если вы не можете исправить проблему с нестандартным маршрутизатором. Есть несколько способов отключения этого масштабирования, и, кажется, наиболее «пуленепробиваемый» из них (который будет работать с большинством ядер) — добавление следующей строки в файл /etc/sysctl.d/99-disable_window_scaling.conf (смотрите также статью sysctl):
Лучший
Проблема вызвана нестандартными маршрутизаторами/межсетевыми экранами, поэтому замените их. Некоторые пользователи отмечали, что нестандартным маршрутизатором был их собственный маршрутизатор DSL.
Дополнительная информация
Этот раздел основывается на статье LWN TCP window scaling and broken routers и архивной статье Kernel Trap Window Scaling on the Internet.
На странице LKML есть также несколько ссылок по теме.
Нет подключения к локальной сети через мост
Первый компьютер подключён к двум локальным сетям. Второй — к одной локальной сети и первому компьютеру. Выполните следующие команды, чтобы дать второму компьютеру доступ к сети за мостовым интерфейсом (на первой машине):