Администрирование FreeBSD, Linux, ... Ubuntu: настройка сетевых адаптеров Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Ubuntu: настройка сетевых адаптеров Печать
Добавил(а) microsin   

В этой статье (перевод документации [1]) опиcываются основные элементы сетевой подсистемы, такие как IP-адреса, устройства Ethernet, разрешение имен и так далее.

[Интерфейсы Ethernet]

Интерфейсы Ethernet идентифицируются в системе с помощью предсказуемых, уникальных имен. Эти имена могут быть eno1, enp0s25, или даже такие, как docker0 (виртуальный интерфейс) или enx00e04c55004e (интерфейс переходничка USB-Ethernet). Однако в некоторых случаях интерфейсы могут все еще использовать kernel-стиль имен наподобие eth#.

Как определить интерфейсы Ethernet. Чтобы быстро идентифицировать все доступные интерфейсы, их имена и IP-адреса, можно воспользоваться командой ip a, как показано ниже.

$ ip a
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
2: enp2s0: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether c0:18:03:69:01:36 brd ff:ff:ff:ff:ff:ff
3: wlp0s20f3: < BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether f0:57:a6:d0:c6:a9 brd ff:ff:ff:ff:ff:ff
5: docker0: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:33:01:30:21 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
6: enx98e7431e0463: < BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 98:e7:43:1e:04:63 brd ff:ff:ff:ff:ff:ff
    inet 10.1.145.31/21 brd 10.1.151.255 scope global dynamic noprefixroute enx98e7431e0463
       valid_lft 64532sec preferred_lft 64532sec
7: enx00e04c55004e: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:e0:4c:55:00:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.7/24 scope global enx00e04c55004e
       valid_lft forever preferred_lft forever

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

$ sudo lshw -class network
[sudo] password for username: 
  *-network DISABLED        
       description: Wireless interface
       product: Wi-Fi 6 AX201
       vendor: Intel Corporation
       physical id: 14.3
       bus info: pci@0000:00:14.3
       logical name: wlp0s20f3
       version: 20
       serial: f0:57:a6:d0:c6:a9
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=iwlwifi driverversion=6.8.0-40-generic 
                      firmware=77.2df8986f.0 QuZ-a0-hr-b0-77.u latency=0 link=no multicast=yes
                      wireless=IEEE 802.11
       resources: iomemory:600-5ff irq:16 memory:600324c000-600324ffff
  *-network
       description: Ethernet interface
       product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
       vendor: Realtek Semiconductor Co., Ltd.
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: enp2s0
       version: 15
       serial: c0:18:03:69:01:36
       capacity: 1Gbit/s
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical tp mii
                     10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8169 driverversion=6.8.0-40-generic
                     firmware=rtl8168h-2_0.0.2 02/26/15 latency=0 link=no multicast=yes port=twisted pair
       resources: irq:19 ioport:3000(size=256) memory:54104000-54104fff memory:54100000-54103fff
  *-network:0
       description: Ethernet interface
       physical id: 12
       bus info: usb@2:1.4
       logical name: enx98e7431e0463
       serial: 98:e7:43:1e:04:63
       size: 1Gbit/s
       capacity: 1Gbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd 1000bt 1000bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8152 driverversion=v1.12.13 duplex=full
                      firmware=rtl8153b-2 v2 04/27/23 ip=10.1.145.31 link=yes multicast=yes port=MII
                      speed=1Gbit/s
  *-network:1
       description: Ethernet interface
       physical id: 13
       bus info: usb@3:6
       logical name: enx00e04c55004e
       serial: 00:e0:4c:55:00:4e
       size: 10Mbit/s
       capacity: 100Mbit/s
       capabilities: ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=r8152 driverversion=v1.12.13 duplex=half
                      ip=192.168.1.7 link=no multicast=yes port=MII speed=10Mbit/s

Для запуска lshw требуются права администратора (sudo). Обратите внимание, что в выводе команды lshw отсутствует информация об интерфейсе docker0 (программная эмуляция операционной системы) и lo (loopback-интерфейс), которые присутствовали в выводе команды ip a. Это потому, что интерфейсы docker0 и lo виртуальные, а команда lshw показывает параметры физических сетевых интерфейсов.

Логические имена интерфейсов Ethernet. Логические имена интерфейсов можно также конфигурировать через конфигурацию Netplan. Если вы хотите управлять тем, какой интерфейс получит определенное логическое имя, то можете сделать это с помощью ключей конфигурации match и set-name. Ключ match используется для нахождения адаптера по некоторому критерию наподобие MAC-адреса, драйвера и т. п. Ключ set-name может использоваться для изменения логического имени сетевого устройства.

network:
  version: 2
  renderer: networkd
  ethernets:
    eth_lan0:
      dhcp4: true
      match:
        macaddress: 00:11:22:33:44:55
      set-name: eth_lan0

ethtool. Утилита ethtool это программа, которая показывает и может изменять настройки сетевой карты, такие как автоматическое согласование разводки сигналов (auto-negotiation) [5], скорость порта, режим дуплекса, пробуждение от сетевой активности (Wake-on-LAN). Ниже показан пример, как просмотреть поддерживаемые возможности и сконфигурированные настройки Ethernet-интерфейса enx98e7431e0463.

$ sudo ethtool enx98e7431e0463
[sudo] password for username:
Settings for enx98e7431e0463:
   Supported ports: [ TP MII ]
   Supported link modes:   10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Half 1000baseT/Full
   Supported pause frame use: No
   Supports auto-negotiation: Yes
   Supported FEC modes: Not reported
   Advertised link modes:  10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Full
   Advertised pause frame use: No
   Advertised auto-negotiation: Yes
   Advertised FEC modes: Not reported
   Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                        100baseT/Half 100baseT/Full
                                        1000baseT/Full
   Link partner advertised pause frame use: No
   Link partner advertised auto-negotiation: Yes
   Link partner advertised FEC modes: Not reported
   Speed: 1000Mb/s
   Duplex: Full
   Auto-negotiation: on
   Port: MII
   PHYAD: 32
   Transceiver: internal
   Supports Wake-on: pumbg
   Wake-on: g
        Current message level: 0x00007fff (32767)
                               drv probe link timer ifdown ifup rx_err tx_err tx_queued
                               intr tx_done rx_status pktdata hw wol
   Link detected: yes

Конфигурация сети на Ubuntu обрабатывается через Netplan [2], который предоставляет высокоуровневый, не зависящий от дистрибутива способ определить, как должна быть настроена сеть в вашей системе. Это осуществляется через конфигурационный файл YAML [3].

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

[IP-адресация]

Здесь мы рассмотрим, как конфигурировать IP-адрес адаптера и шлюз по умолчанию (default gateway). Эти параметры необходимы для осуществления сетевого взаимодействия по локальной сети и через Internet.

Временное назначение IP-адреса. Это обычно полезно для некоторых административных задач наподобие обновление прошивки роутера по протоколу TFTP и т. п. Для временной конфигурации сети Ubuntu вы можете использовать команду ip, которая также присутствует на большинстве других операционных системах семейства GNU/Linux. Команда ip позволит вам сконфигурировать адаптер таким образом, что они немедленно вступят в силу. Однако они не будут постоянными, и потеряются после перезагрузки системы.

Ниже показан пример конфигурирования адреса IP адаптера enx00e04c55004e. Здесь указан IP-адрес 192.168.1.7 с маской подсети 255.255.255.0:

$ sudo ip addr add 192.168.1.7/24 dev enx00e04c55004e

Команда ip может использоваться для активации (up) и деактивации (down) сетевого интерфейса:

$ ip link set dev enx00e04c55004e up
$ ip link set dev enx00e04c55004e down

Чтобы проверить конфигурацию IP-адреса адаптера, можно использовать следующую команду:

$ ip address show dev enx00e04c55004e
7: enx00e04c55004e: < NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel
                     state DOWN group default qlen 1000
    link/ether 00:e0:4c:55:00:4e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.7/24 scope global enx00e04c55004e
       valid_lft forever preferred_lft forever

Default gateway. Чтобы сконфигурировать шлюз по умолчанию, используйте команду:

$ sudo ip route add default via 10.102.66.1

Проверка настройки шлюза по умолчанию:

$ ip route show
default via 10.102.66.1 dev eth0 proto dhcp src 10.102.66.200 metric 100
10.102.66.0/24 dev eth0 proto kernel scope link src 10.102.66.200
10.102.66.1 dev eth0 proto dhcp scope link src 10.102.66.200 metric 100 

Настройка DNS. Если вам требуется настройка DNS для временной конфигурации сети, то вы можете добавить IP-адреса сервера DNS в файл /etc/resolv.conf. Обычно прямое редактирование файла /etc/resolv.conf не рекомендуется, однако это временная и не постоянная конфигурация разрешения сетевых имен.

Пример ниже показывает, как ввести два DNS-сервера в файл /etc/resolv.conf. Адреса 8.8.8.8 соответствуют 8.8.4.4 серверам DNS от Google, и эти адреса могут быть изменены при необходимости в соответствии с конфигурацией вашей локальной сети. Более длинное описание правильной (постоянной) настройки клиента DNS будет показано в следующей секции.

nameserver 8.8.8.8
nameserver 8.8.4.4

Если вам больше не нужна эта конфигурация, и вы хотите удалить всю IP-конфигурацию с интерфейса, то можете использовать команду ip с опцией flush:

$ ip addr flush enx00e04c55004e

Обратите внимание, что flush конфигурации IP не очищает содержимое файла /etc/resolv.conf. Вы должны удалить или модифицировать эти записи вручную (либо выполнить перезагрузку системы), что также должно привести к тому, что /etc/resolv.conf, который является символьной ссылкой на /run/systemd/resolve/stub-resolv.conf, будет перезаписан.

Динамическая настройка IP-адреса (клиент DHCP). Чтобы настроить систему на использование протокола DHCP для динамической конфигурации IP сетевого адаптера, создайте конфигурацию Netplan в файле /etc/netplan/99_config.yaml. Следующий пример подразумевает, что вы сконфигурировали ваш первый Ethernet-интерфейс под именем enp3s0.

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

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

$ sudo netplan apply

Статическое назначение IP-адреса. Чтобы сконфигурировать вашу систему на использование статического адреса, создайте конфигурацию Netplan в файле /etc/netplan/99_config.yaml. Пример ниже подразумевает, что вы сконфигурировали ваш первый интерфейс Ethernet под именем eth0. Поменяйте в этом примере значения параметров адреса (addresses), маршруты (routes), сервера DNS (nameservers), чтобы они удовлетворяли требованиям вашей сети.

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      addresses:
        - 10.10.10.2/24
      routes:
        - to: default
          via: 10.10.10.1
      nameservers:
          search: [mydomain, otherdomain]
          addresses: [10.10.10.1, 1.1.1.1]

Конфигурация может быть затем применена командой netplan:

$ sudo netplan apply

Замечание: netplan в операционной системе Ubuntu Bionic 18.04 LTS не понимает синтаксис "to: default" для указания маршрута по умолчанию, и в этом случае должен использоваться ключ более старого синтаксиса gateway4: 10.10.10.1 вместо всего блока routes.

loopback. Виртуальный сетевой интерфейс замыкания на себя (loopback interface) носит в системе имя lo, и у него назначен IP-адрес по умолчанию 127.0.0.1. Это можно посмотреть командой ip:

$ ip address show lo
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

[Разрешение сетевых имен]

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

Конфигурация клиента DNS. Традиционно файл /etc/resolv.conf был файлом статической конфигурации, который редко нуждается в изменении, или он изменялся автоматически клиентом DHCP при физическом подключении интерфейса. Сервис systemd-resolved обрабатывает конфигурацию nameserver, и взаимодействовать с ним нужно через команду systemd-resolve. Netplan конфигурирует systemd-resolved для генерации списка серверов (nameservers) и доменов для помещения их в /etc/resolv.conf, который может быть символьной ссылкой:

/etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

Чтобы сконфигурировать разрешение сетевых имен, в конфигурационный файл netplan добавьте IP-адреса подходящих серверов DNS. Вы можете также добавить дополнительный DNS-суффикс списков поиска, соответствующих вашим сетевым доменным именам. Результат файла может выглядеть следующим образом:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      addresses:
        - 192.168.0.100/24
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
          search: [mydomain, otherdomain]
          addresses: [1.1.1.1, 8.8.8.8, 4.4.4.4]

Опция search также может использоваться с несколькими доменными именами, чтобы DNS-запросы добавлялись в порядке их ввода. Например, в вашей сети может быть несколько субдоменов для поиска; корневой родительский домен example.com, и два субдомена sales.example.com и dev.example.com. Если у вас есть несколько доменов, которые вы хотите искать, то конфигурация может выглядеть следующим образом:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s25:
      addresses:
        - 192.168.0.100/24
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
          search: [example.com, sales.example.com, dev.example.com]
          addresses: [1.1.1.1, 8.8.8.8, 4.4.4.4]

Если вы попытаетесь для этой конфигурации выполнить ping на хост с именем server1, то система будет автоматически посылать DNS-запросы в виде разрешения полных имен (Fully Qualified Domain Name, FQDN) в следующем порядке:

1. server1.example.com
2. server1.sales.example.com
3. server1.dev.example.com

Если ни одно совпадение имени не найдено, то сервер DNS выдаст результат notfound, и DNS-запрос на имя server1 потерпит неудачу.

Статические имена хостов (hostnames). Статические имена хостов определяются таблицей вида IP-имя в файле /etc/hosts. По умолчанию записи в файле hosts имеют приоритет над подсистемой DNS. Это означает, что если ваша система пытается разрешить имя хоста, и соответствующая этому имени запись присутствует в /etc/hosts, то не будет предпринята попытка выдать запрос DNS. В некоторых конфигурациях, особенно если не требуется доступ в Internet, серверы, которые обмениваются с ограниченным набором сетевых ресурсов, могут быть удобно настроены на использование статических имен хостов вместо использования DNS для разрешения имен.

Ниже показан пример файла hosts, где несколько локальных серверов идентифицируются по простым именам хостов, алиасов и их полных имен FQDN:

127.0.0.1   localhost
127.0.1.1   ubuntu-server
10.0.0.11   server1 server1.example.com vpn
10.0.0.12   server2 server2.example.com mail
10.0.0.13   server3 server3.example.com www
10.0.0.14   server4 server4.example.com file

Обратите внимание, что в этом примере каждый из серверов server1, server2, server3, server4 имеет присвоенный алиас вместе с полным именем FQDN. Хост server1 отображается на имя vpn, server2 на mail, server3 на www, и server4 на file.

Конфигурация Name Service Switch (NSS). Порядок, в котором ваша система выбирает метод разрешения имен хостов в IP-адреса, управляется конфигурацией Name Service Switch (NSS). Эта конфигурация находится в файле /etc/nsswitch.conf. Как упоминалось в предыдущей секции, обычно статические имена хостов определяются файлом /etc/hosts, который имеет приоритет над разрешением имен DNS. Ниже показан пример строки файла /etc/nsswitch.conf, отвечающий за этот порядок разрешения имен (hostname lookups).

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

files сначала делается попытка разрешить статические имена, определенные в /etc/hosts.
mdns4_minimal попытки разрешить имя с помощью Multicast DNS.
[NOTFOUND=return] означает, что любой ответ notfound предыдущего процесса mdns4_minimal должен считаться авторитарным, и система не должна продолжать пытаться искать ответ на запрос разрешения имени.
dns представляет традиционный однонаправленный запрос разрешения доменного имени (legacy unicast DNS query).
mdns4 представляет многонаправленный запрос разрешения имени (multicast DNS query).

Чтобы изменить порядок этих методов разрешения имени, вы можете просто поменять строку hosts: на выбранную настройку. Например, если вы предпочитаете использовать legacy unicast DNS вместо multicast DNS, то можно поменять строку hosts: файла /etc/nsswitch.conf, как показано ниже:

hosts:          files dns [NOTFOUND=return] mdns4_minimal mdns4

[Мостовое подключение нескольких интерфейсов]

Bridging (мостовое подключение) это более продвинутая конфигурация, которая может оказаться полезной в некоторых сценариях. Например, можно объединить в мост несколько сетевых интерфейсов, когда используется файервол для фильтрации трафика между двумя сегментами сети. Другой пример - использование моста на системе с одним интерфейсом, чтобы позволить виртуальным машинам получить доступ во внешнюю сеть. Следующий пример показывает реализацию последнего сценария. Здесь сконфигурирован мост путем редактирования конфигурации netplan в папке /etc/netplan/ вводом подходящих значений для вашего физического интерфейса и сети:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: no
  bridges:
    br0:
      dhcp4: yes
      interfaces:
        - enp3s0

Чтобы применить конфигурации и активировать мост, выполните команду:

$ sudo netplan apply

Новый интерфейс моста поднимется и запустится. Утилита brctl предоставляет полезную информацию о состоянии моста, управляет какие интерфейсы входят в мост. Для дополнительной информации см. документацию man brctl.

[networkd-dispatcher для скриптов]

Пользователи, знакомые с утилитой ifupdown, могут использовать hook-скрипты (например pre-up, post-up) в своих файлах интерфейсов. Конфигурация Netplan в настоящее время не поддерживает hook-скрипты в своих определениях.

Вместо этого, чтобы достичь такой функциональности с помощью networkd renderer, можно применить networkd-dispatcher. Этот пакет предоставляет необходимые средства перехвата состояний сети (hook points), чтобы система реагировала на различные сетевые события.

Замечание: если вы используете Desktop (не Ubuntu Server), то сеть управляется Network Manager - в этом случае вместо этого вам нужно использовать скрипты NM Dispatcher [6].

Netplan FAQ [7] содержит таблицу, сравнивающие тайминги событий ifupdown/systemd-networkd/network-manager. Также здесь вы найдете пример переделки старого ifupdown hook в конфигурацию networkd-dispatcher.

Важно иметь в виду, что эти обработчики (hooks) запускаются асинхронно, т. е. они не будут блокировать переход в другое состояние.

За дополнительной информацией обращайтесь к документации man networkd-dispatcher, а также man netplan и man systemd-resolved.

[Ссылки]

1. Ubuntu Configuring networks site:ubuntu.com.
2. Netplan network configuration abstraction renderer site:netplan.io.
3. YAML configuration site:readthedocs.io.
4. Netplan YAML Top-level configuration structure site:readthedocs.io.
5. Прямые и скрестные кабели Ethernet стандарта T568A.
6. NetworkManager manual site:networkmanager.dev.
7. Netplan frequently asked questions site:netplan.io.

 

Добавить комментарий


Защитный код
Обновить

Top of Page