Как сделать сеть на linux

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

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

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

Настройка проводной сети Linux

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

Настройка статического адреса

nano /etc/network/interfaces

Пример настройки интерфейса:

Специальные команды читают этот конфигурационный файл автоматически настраивают интерфейс при запуске системы. Строка auto задает интерфейсы, которые должны включится при загрузке системы или при выполнении ifup -a.

Ключевое слово inet определяет семейство адресов IPv4 или IPv6.(inet — IPv4).

Ключевое слово static указывает способ назначения сетевого адреса устройству. Может быть static или dhcp. Первое — мы прописываем адрес, маску подсети и шлюз вручную, второе dhcp — автоматическое конфигурирование по протоколу dhcp. address — сам адрес IP который вы указываете для сетевой карты. netmask — маска подсети которой принадлежит IP адрес. gateway — шлюз для доступа в интернет.

Настройка получения адреса по протоколу dhcp

Если ваш провайдер поддерживает протокол dhcp, в конфигурационном файле сети нужно добавить следующие строки:

Теперь при включении компьютера или включении устройства, сетевая карта будет получать автоматические настройки от роутера провайдера.

Настройка при помощи ifconfig


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

Синтаксис команды довольно прост:

Например, команда
аналогична тому, что мы писали в файл конфигурации. Задает ip адрес и маску подсети на интерфейсе eth0, приводит в состояние готовности.

Если вам нужно посмотреть какие интерфейсы есть в системе, вы можете ввести команду ifconfig -a и получите на экране список ваших интерфейсов.

Для получения настроек по dhcp из консоли, нам нужно запустить dhclient на интерфейсе: Как видите, нету ничего сложного в настройке сети, всего пара простых шагов, немного практики и вы сможете без особых усилий проводить настройку сети.

Настройка сети Linux

Большую часть времени мы используем только самые простые возможности сетевого стека Linux. Маршрут по умолчанию, SNAT, несколько правил netfilter — все, что нужно среднему маршрутизатору. Но есть множество функций для менее распространенных и даже весьма нестандартных ситуаций.

Например, возможность использовать нестандартный широковещательный адрес IPv4 sudo ip addr add 192.0.2.1 / 24 broadcast 192.0.2.2 dev eth0 . Технически ни один RFC этого не запрещает. Я данной возможностью не воспользовался ни разу, но почти уверен, что кто-то нашел ей осмысленное применение.

Dummy interfaces

В отличие от Cisco IOS и систем семейства BSD, в Linux может быть только один loopback interface, который всегда называется lo и несет на себе тот самый адрес 127.0.0.1/8. Если надо просто несколько адресов для разных демонов, можно присвоить их на тот же интерфейс lo .

Но что делать, если требуется несколько независимых локальных интерфейсов?

Некоторые советуют решать эту проблему использованием не по назначению интерфейсов других типов, вроде мостов. Не слушайте их. Правильное решение — использовать интерфейсы типа dummy, которые аналогичны loopback во всем, кроме названия. Исторически так сложилось, что loopback — это уникальный интерфейс lo , и для совместимости сделали отдельный тип.

А зачем мне несколько интерфейсов loopback?

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

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

Какой выбрать? Любой интерфейс маршрутизатора потенциально может уйти в down, но сессии BGP и SSH должны работать. Поскольку loopback или dummy самопроизвольно не уйдет в down никогда, можно присвоить ему отдельный адрес и анонсировать его остальной сети через протокол OSPF (Open Shortest Path First), который использует multicast и не зависит от конкретных адресов интерфейсов. В этом случае адрес на loopback останется доступным, если у маршрутизатора есть хотя бы один живой канал в остальную сеть.

MACVLAN

У любого интерфейса L2 может быть один и только один MAC-адрес. Что делать, если надо отправлять кадры с разным MAC-адресом с одного физического интерфейса?

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

Современные версии Astra Linux поддерживают возможность использования трёх (а с учётом возможности использования ОС Astra Linux для мобильных устройств - четырёх) способов конфигурирования сети:

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

Кроме указанных выше методов конфигурирования сети некоторые сетевые параметры можно устанавливать через изменение параметров ядра (инструмент sysctl).

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

Документация по использованию NetworkManager находится в каталоге /usr/share/doc/ network-manager/.

Конфигурационные файлы NetworkManager находятся в каталоге /etc/NetworkManager/.

Инструмент командной строки nmcli для работы с NetworkManager

В составе пакета имеется инструмент командной строки nmcli для работы с NetworkManager.

Инструмент может работать с устройствами (devices, dev) или с соединениями (connection, con).

Примеры применения командного интерфейса к устройствам:

При установке ОС по умолчанию устанавливается сетевой интерфейс "Проводное соединение 1" , настроенный на получение динамического адреса по протоколу DHCP.
Кроме "длинного" имени "Проводное соединение 1" можно использовать опции path (выбор соединений по номеру конфигурации в шине dBus) или apath (выбор активных соединений по номеру конфигурации в шине dBus), например:

При этом типовой задачей при настройке серверов является задача переключения этого соединения на статический адрес.
Пример сценария настройки соединения (connection, сокращенно con), выполняющего эту задачу:

nmcli con down "$con" ; nmcli con up "$con"

Полное описание командного интерфейса доступно в общей системе документации:

man nmcli
man nmcli-examples
man nm-online

Во избежание конфликтов со службой networking настроенная по умолчанию служба NetworkManager НЕ РАБОТАЕТ с сетевыми интерфейсами, перечисленными в файле /etc/network/interfaces.
По умолчанию в файле /etc/network/interfaces присутствует только интерфейс локальной петли (loopback).

Для того, чтобы NetworkManager прочитал изменения конфигурации (в том числе изменения списка интерфейсов, перечисленных в файле /etc/network/interfaces), следует перезапустить службу NetworkManager:

При работе со службой NetworkManager можно использовать её псевдоним network-manager: sudo systemctl restart network-manager

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

Networking: Настройка сети из командной строки

Теоретически, службы NetworkManager и networking конфликтовать не должны, так как первая не работает с сетевыми интерфейсами, перечисленными в файле /etc/network/interfaces, а вторая - работает только с интерфейсами, перечисленными в этом файле, но при переходе к использованию службы networking лучше отключить NetworkManager , для чего выполнить команду:

По желанию после удаления службы NetworkManager можно с крыть графическую оснастку NetworkManager (значок сети в панели задач). Для запрета запуска графической оснастки выполнить команду

Иконка будет скрыта в следующей сессии пользователя. Если нужно, чтобы оснастка была скрыта немедленно, перезапустить fly-dm:

Традиционно, настройка сети TCP/IP из командной строки выполняется с использованием инструментов ifup и ifdown, входящих в пакет ifupdown, и предназначенных для высокоуровневого конфигурирования сети.
При этом можно выделить два типичных случая

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

Пакеты resolvconf и NetworkManager могут конфликтовать, так как работают с одним файлом /etc/resolv.conf

Пакет ifupdown содержит три команды: команды ifup и ifdown, обеспечивающие настройки сетевых интерфейсов в соответствии с конфигурационным файлом /etc/network/interfaces, и команда ifquery, проверяющая корректность конфигурационного файла /etc/network/interfaces.
При этом список включенных в данный момент интерфейсов хранится в файле /run/network/ifstate

Сценарий изменения настройки сетевого интерфейса (на примере интерфейса eth0):

Внести изменения в файл /etc/network/interfaces в секцию, относящуюся к интерфейсу eth0.

Проверить корректность файла:

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

Не следует использовать низкоуровневые конфигурационные команды как, например, ifconfig(8) и ip(8) для переключения сетевых интерфейсов во включенное (up) состояние.

Типичной ошибкой при использовании команд ifdown/ifup является повторное назначение параметров интерфейса неотключенным и некорректно работающим сервисом NetworkManager,
что выглядит как игнорирование изменений, внесённых в файл /etc/network/interfaces.
Для проверки полного состояния сетевого интерфейса вместо устаревшей команды ifconfig следует использовать современную команду ip из пакета iproute2:

проверить все сетевые адреса, назначенные сетевому интерфейсу:

очистить все сетевые адреса, назначенные сетевому интерфейсу:

Сетевые интерфейсы в статичных сетях

Полное описание синтаксиса файла настроек интерфейсов /etc/network/interfaces доступно по команде

Основные опции настройки:

Опции, начинающиеся с "iface …"

Определяют сетевую конфигурацию и имеют следующий синтаксис:

Опции , начинающиеся с "mapping "

Не допускается определять повторяющиеся имена в опциях iface.

Интерфейс локальная петля (loopback)

Автоматическое включение интерфейса локальной петли при запуске системы задаётся в /etc/network/interfaces следующими командами:

auto lo
iface lo inet loopback

Этот интерфейс всегда присутствует в стандартном файле /etc/network/interfaces.

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

Отправка запроса DHCP и получение адреса при подключении сетевого кабеля:

allow-hotplug eth0
iface eth0 inet dhcp

Интерфейс со статическим адресом

В примере подразумевается следующее:

  • Диапазон IP-аресов локальной сети: 192.168.11.0 - 192.168.11.255
  • IP-адрес шлюза: 192.168.11.1
  • Собственный IP-адрес интерфейса 192.168.11.100
  • The resolvconf package: installed
  • Имя домена: "example.com" (используется пакетом resolvconf)
  • IP-адрес сервера DNS: 192.168.11.1 (используется пакетом resolvconf)

При этом, если не используется пакет resolvconf, соответствующая настройка параметров DNS должна быть выполнена вручную в файле /etc/resolv.conf:

Для использования служб systemd-networkd / systemd-resolved во избежание конфликтов следует отключить, остановить и заблокировать все остальные службы управления сетевыми интерфейсами:

sudo systemctl --now mask NetworkManager
sudo systemctl --now mask networking
sudo systemctl --now mask resolvconf

И разблокировать и запустить systemd-networkd / systemd-resolved:

sudo systemctl unmask systemd-networkd
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd
sudo systemctl unmask systemd-resolved
sudo systemctl enable systemd-resolved
sudo systemctl start systemd-resolved

Конфигурациионные файлы сетевых служб systemd хранятся в каталоге /etc/systemd/network.
Доступны следующие типы конфигурационных файлов:

Описания содержимого конфигурационных файлов доступны в общей системе документации:

В мобильном режиме используется сетевой менеджер connman, а файл /etc/resolv.conf заменяется на ссылку на файл /var/run/connman/resolv.conf .

Сетевой менеджер connman поддерживает собственный интерфейс командной строки connmanctl.
Описание команд commanctl доступно в системе документации:

Графический интерфейс для работы с connman доступен в мобильной версии ОС Astra Linux.

Состояние перевода: На этой странице представлен перевод статьи Network configuration. Дата последней синхронизации: 12 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В статье описана настройка сетевого подключения на 3-м уровне модели OSI и выше. Отдельные способы передачи информации рассматриваются на подстраницах /Ethernet и /Wireless.

Contents

Проверка подключения

При проблемах с подключением к сети последовательно проверьте, что:

Для проверки соединения с хостом, используется утилита ping.

Утилита выводит информацию о каждом полученном ответе. Подробнее см. ping(8) . Учтите, что удалённый хост может быть настроен игнорировать ICMP-запросы [1].

Управление сетевым подключением

Для настройки сетевого подключения сделайте следующее:

  1. Убедитесь, что сетевой интерфейс обнаружен и включён.
  2. Подключитесь к сети. Вставьте Ethernet-кабель или подключитесь к беспроводной сети.
  3. Настройте сетевое подключение:
      .
    • динамический IP-адрес: используйте DHCP.

Примечание: В установочном образе в качестве DHCP-клиента используются systemd-resolved и systemd-networkd для всех типов сетевых интерфейсов — Ethernet, WLAN и WWAN.

net-tools

Утилиты net-tools считаются устаревшими; рекомендуется использовать пакет iproute2 [2].

Устаревшая команда Замена
arp ip neigh
ifconfig ip address, ip link
netstat ss
route ip route

iproute2

iproute2 (зависимость мета-пакета base ) предоставляет утилиту командной строки ip(8) для управления сетевыми интерфейсами, IP-адресами и таблицей маршрутизации. Учтите, что сделанные с помощью ip настройки исчезнут после перезагрузки. Для задания постоянных настроек используйте сетевой менеджер или автоматизируйте ip-команды с помощью сценариев или юнитов systemd. Также обратите внимание, что многие команды ip имеют сокращённую форму, но в этой статье для ясности они указываются полностью.

Сетевые интерфейсы

Обнаружение сетевых интерфейсов

Имена как проводных, так и беспроводных интерфейсов можно узнать командами ls /sys/class/net и ip link . Имейте в виду, что префиксом lo обозначается петлевое устройство, которое не используется для сетевых соединений.

Включение и отключение сетевых интерфейсов

Включение и выключение интерфейса производится командой ip link set интерфейс up|down (подробнее см. ip-link(8) ).

Для проверки текущего состояния интерфейса (например, enp2s0 ) выполните:

На состояние интерфейса указывает UP в
, а не state UP .

Статический или динамический адрес?

Статический IP-адрес

Настройка статического IP-адреса производится либо посредством сетевого менеджера, либо с помощью демона dhcpcd.

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-клиент на локальной машине:

Сервер

Сетевые менеджеры

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

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

Имя хоста

Имя хоста — уникальное имя-идентификатор машины в сети. Имя хоста хранится в файле /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 :

Примечание: Порядок имён/псевдонимов после IP-адреса имеет значение. Сразу после IP-адреса следует "каноническое" имя хоста, к которому при неоходимости может присоединиться название родительского домена, отделенное от имени точкой (как, например, .localdomain выше). Все последующие значения на той же строке считаются псевдонимами. Подробнее см. hosts(5) .

В результате система будет использовать оба варианта — и NSS, и файл /etc/hosts :

Если хост использует статический IP-адрес, то его следует указать вместо 127.0.1.1 .

Разрешение имён в локальной сети

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

Советы и рекомендации

Смена имени интерфейса

Вы можете изменить имя устройства, установив его вручную при помощи правила udev. Например:

Эти правила будут применяться автоматически при загрузке.

Кое-что на заметку:

  • Узнать MAC-адрес интерфейса можно командой cat /sys/class/net/имя_устройства/address
  • Убедитесь, что в правиле udev шестнадцатеричные значения указаны строго в нижнем регистре.

Если сетевой интерфейс имеет динамический MAC-адрес, вместо последнего можно использовать DEVPATH :

DEVPATH подключённых устройств можно узнать по символическим ссылкам в каталоге /sys/class/net/ :

Паттерн пути устройства (DEVPATH) должен подходить для обоих названий устройств, и нового, и старого, поскольку одно и то же правило udev может срабатывать несколько раз в процессе загрузки. Например, во втором правиле в примере выше шаблон "/devices/pci*/*1c.0/*/net/enp*" будет ошибочным, поскольку после изменения имени на en он перестанет совпадать, и если после этого сработает системное правило по умолчанию, то имя изменится обратно на что-то вида enp1s0 .

Если вы используете USB-интерфейс (например, подключаясь через Android-смартфон) с динамическим MAC-адресом и хотите иметь возможность использовать разные USB-порты, можно создать правило на основе данных о производителе и ID устройства:

Проверить созданное правило из пространства пользователя можно командой udevadm --debug test /sys/class/net/* . Не забудьте предварительно отключить интерфейс, который собираетесь переименовать (например, выполнив ip link set enp1s0 down ).

Примечание: При выборе статических имен вы должны избегать использования формата "ethX" и "wlanX", поскольку это может привести к состоянию гонки между ядром и udev во время загрузки системы. Вместо этого лучше взять имена интерфейсов, которые не используются по умолчанию в ядре, например: net0 , net1 , wifi0 , wifi1 . Подробнее см. документацию systemd.

Традиционные названия интерфейсов

Если вы предпочитаете традиционные названия интерфейсов вроде eth0 , отключите назначение предсказуемых имён интерфейсов, создав маску для правила udev.

Другой способ — добавить net.ifnames=0 в параметры ядра.

Установка MTU и длины очереди

Вы можете изменить MTU и длину очереди для устройства, определив их вручную в правиле udev. Например:

tx_queue_len : Малые значения — для медленных устройств с высокой задержкой (ADSL, ISDN). Большие значения рекомендованы для высокоскоростных соединений с серверами, где предполагается передача значительных объёмов данных.

Объединение сетевых интерфейсов (bonding) или LAG

Бондинг — объединение нескольких сетевых интерфейсов в одно логическое устройство. См. статьи netctl, systemd-networkd и Wireless bonding.

Псевдонимы для IP-адресов

Псевдонимы (aliases) необходимы для назначения нескольких IP-адресов одному сетевому интерфейсу. Благодаря этому один узел сети может иметь несколько подключений, каждое из которых будет использоваться для конкретной цели. Типичное применение этой возможности — виртуальный хостинг Web- и FTP-серверов или реорганизация серверов без необходимости обновления каких-либо других машин (особенно полезно для серверов имен).

Пример

Чтобы вручную назначить псевдоним для определенного сетевого интерфейса (например, enp2s0 ) используйте утилиту ip из пакета iproute2 :

Для удаления псевдонима выполните:

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

Promiscuous mode

Promiscuous mode ("неразборчивый" режим) предполагает, что (беспроводной) сетевой интерфейс перенаправляет весь входящий трафик ядру операционной системы для дальнейшей обработки. Это противоположность "нормальному режиму", при котором интерфейс отбрасывает пакеты, которые не ожидались быть полученными. Чаще всего эта возможность используется для решения сетевых проблем и анализа пакетов.

Чтобы включить "неразборчивый" режим для интерфейса eth0 , выполните:

Получение информации о сокетах

Показать все TCP-сокеты с названиями сервисов:

Показать все TCP-сокеты с номерами портов:

Показать все UDP-сокеты:

За подробной информацией обращайтесь к справочной странице ss(8) .

Решение проблем

Проблема масштабирования TCP window

Заголовк TCP-пакета содержит поле "Window", которое определяет, какое количество данных может быть прислано в ответ другим хостом. Ширина поля составляет 16 бит, следовательно, размер окна не может превышать 64 Kбайт. С учётом кэширования пакетов, связанного с необходимостью восстановить их исходный порядок, значение окна легко может быть превышено.

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

В итоге соединение в лучшем случае очень медленное или часто прерывается.

Диагностика

Если у вас появилась такая проблема, вывод dmesg будет нормальным, логи - чистыми, а ip addr сообщит о нормальном состоянии. Все будет выглядеть нормально.

Если вы не можете просматривать никакие веб-сайты, но можете отправлять запросы ping на некоторые узлы, высока вероятность, что у вас именно эта проблема: ping использует ICMP, поэтому проблемы TCP на него не влияют.

С помощью Wireshark можно будет увидеть, что UDP- и ICMP-соединения работают, а TCP-соединение с внешними узлами установить не удаётся.

Способы решения проблемы

Плохой

Плохой способ заключается в изменении значения tcp_rmem , на основе которого вычисляется коэффициент масштабирования. Скорее всего, это решит проблему, кроме случая связи с особо удалёнными хостами.

Хороший

Просто отключите масштабирование. Эта функция — довольно приятное дополнение к стандартному 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 есть также несколько ссылок по теме.

Нет подключения к локальной сети через мост

Первый компьютер подключён к двум локальным сетям. Второй — к одной локальной сети и первому компьютеру. Выполните следующие команды, чтобы дать второму компьютеру доступ к сети за мостовым интерфейсом (на первой машине):

Читайте также: