01.04.2020

Ubuntu управление сетевыми интерфейсами

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

Настройку сети можно разделить на два вида:

Постоянные настройки - задаются через конфигурационные файлы и сохраняются после перезагрузки.

Временные настройки - задаются через командную строку, сбрасываются после перезагрузки системы или сервиса отвечающего за работу сети.

На текущий момент, наиболее часто используются Ubuntu 16.04 и Ubuntu 18.04, которые отличаются в настройке сети. Так в OC Ubuntu 16.04 использовалась утилита ifupdown, которую заменили netplan.

1. Просмотр доступных сетевых интерфейсов

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

С помощью утилиты lshw, которая выводит информацию о всех компонентах компьютера. Для получения информации о сетевых картах выполняем ее с ключом -C и указываем интересующий класс network. Пример вывода:

$ sudo lshw -C network

*-network

description: Ethernet interface

product: RTL-8100/8101L/8139 PCI Fast Ethernet Adapter

vendor: Realtek Semiconductor Co., Ltd.

physical ID: 7

bus info: pci@0000:08:07.0

logical name: enp8s7

version: 10

serial: 00:1d:60:bc:40:98

size: 100Mbit/s

capacity: 100Mbit/s

width: 32 bits

clock: 33MHz

capabilities: pm bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation

configuration: autonegotiation=on broadcast=yes driver=8139too driverversion=0.9.28 duplex=full ip=10.254.253.1 latency=64 link=yes maxlatency=64 mingnt=32 multicast=yes port=MII speed=100Mbit/s

Для дальнейшей настройки нас будут интересовать следующие значения:

  • logical name - логическое имя сетевого адаптера
  • serial - MAC-адрес сетевой карты
  • link - указывает наличие подключения

При помощи утилиты lshw Вы сможете получить информацию только о физических сетевых интерфейсах, информации о логических, например, VLAN Вы не получите.

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

$ ip address

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

link/ether 00:1d:60:bc:40:98 brd ff:ff:ff:ff:ff:ff

inet 10.254.253.1/24 brd 10.254.253.255 scope global enp8s7

valid_lft forever preferred_lft forever

inet6 fe80::21d:60ff:febc:4098/64 scope link

valid_lft forever preferred_lft forever

Где lo - петля, enp8s7 - интерфейс сетевой карты.

Для меня в работе более привычно использование утилиты ifconfig, поэтому все дальнейшие действия я буду описывать, используя ее.

Пример вывода информации о сетевых интерфейсах используя ifconfig:

$ ifconfig

enp8s7: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 10.10.10.1 netmask 255.255.255.0 broadcast 10.10.10.255 # Информация о настройке сетевого интерфейса

inet6 fe80::21d:60ff:febc:4098 prefixlen 64 scopeid 0x20<link>

ether 00:1d:60:bc:40:98 txqueuelen 1000 (Ethernet) # MAC-адрес сетевой карты

RX packets 2473367 bytes 1178806843 (1.1 GB) 

RX errors 0 dropped 0 overruns 0 frame 0 

TX packets 3706512 bytes 2647126986 (2.6 GB)

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 (Локальная петля (Loopback))

RX packets 43756 bytes 4844250 (4.8 MB)

RX errors 0 dropped 0 overruns 0 frame 0

TX packets 43756 bytes 4844250 (4.8 MB)

TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

2. Настройка сети

Настройку сетевых интерфейсов в данной статье буду рассматривать на примере проводной сети.

Настройка для Ubuntu 16.04 и ранее

Настройки происходят посредством редактирования конфигурационного файла /etc/network/interfaces

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

# This file describes the network interfaces available on your system

#

# and how to activate them. For more information, see interfaces(5).


#

# The loopback network interface

auto lo

iface lo inet loopback


# My Net

iface inet static 

address 10.10.10.1 

netmask 255.255.255.0 

gateway 10.10.10.2 

dns-nameservers 8.8.8.8 8.8.4.4

auto enp8s7

В данном файле всегда должен быть описан сетевой интерфейс lo и секции настройки наших сетевых интерфейсов. Пояснения по параметрам конфигурации:

  • auto enp8s7 - указывает, что сетевой интерфейс "поднимать" при загрузке системы
  • iface enp8s7 inet static - указываем, что для сетевого интерфейса enp8s7 используем статический IP-адрес, если вместо параметра static указать dhcp - сетевой адрес будет получен по протоколу dhcp и остальные параметры конфигурации не нужны
  • address 10.10.10.1 - указывает IP-адрес сетевого интерфейса
  • netmask 255.255.255.0 -маска подсети
  • gateway 10.10.10.2 - основной шлюз
  • dns-nameservers 8.8.8.8 8.8.4.4 - перечень DNS-серверов через пробел

Для применения настроек необходимо перезагрузить систему или службу, отвечающую за работу сети

sudo service networking reload

Настройка для Ubuntu 18.04 и более поздние

Начиная с Ubuntu 18.04, для настройки сети используется Netplan, который для хранения конфигурации использует формат YAML. Файлы конфигурации хранятся в директории /etc/netplan/ при установке системы создается файл 50-cloud-init.yaml В него будем вносить все изменения

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

Error while loading /etc/netplan/50-cloud-init.yaml, aborting. - в файле для отступов используются знаки табуляции

An error occured: the configuration could not be generated или Error in network definition: expected mapping (check indentation) - в случае не соблюдения количества отступов также будет указана строка с ошибкой.

Структура конфигурационного файла:

network:

ethernets: - объявляем блок с конфигурацией сетевых интерфейсов, далее идут блоки конфигураций для каждого интерфейса. Отступ 2 пробела

enp8s7: - имя первого сетевого интерфейса. Отступ 4 пробела

addresses: [10.10.10.1/24] - IP-адрес и маска подсети, в случае использования нескольких IP-адресов на одном интерфейсе, перечисляем через запятую, например, [10.10.10.1/24,10.10.20.1/24] IPv6 выделяется кавычками. Отступ 6 пробелов

gateway4: 10.10.10.2 - основной шлюз. Отступ 6 пробелов

nameservers: - блок конфигурации DNS-серверов. Отступ 6 пробелов

addresses: [8.8.8.8] - перечень IP-адресов DNS-серверов, допускается использование нескольких, указываются через запятую. Отступ 8 пробелов

dhcp4: false - указывает использовать статические параметры или получать по DHCP. Допустимые значения true/false. Если значение "true", будет прочитан только блок с настройками DNS-серверов. Отступ 6 пробелов

enp0s25: - имя второго сетевого интерфейса

dhcp4: true

version: 2

Пример конфигурации:

# This file is generated from information provided by

# the datasource. Changes to it will not persist across an instance.

# To disable cloud-init's network configuration capabilities, write a file

# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:

# network: {config: disabled}

network:

  ethernets:

    enp8s7:

      addresses: [10.10.10.1/24]

      gateway4: 10.10.10.2

      nameservers:

        addresses: [8.8.8.8]

      dhcp4: false

    enp0s25:

      dhcp4: true

  version: 2

Для проверки файла конфигурации и применения изменений используем команду

sudo netplan try

Обратите внимание, что необходимо нажать Enter для применения или по истечению 2-х минут ожидания применение прервется и изменения не будут применены.

Конфигурация сетевых интерфейсов через командную строку

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

Для присвоения IP-адреса сетевому интерфейсу используем команду:

sudo ifconfig enp8s7 10.10.10.1 netmask 255.255.255.0

Где:

  • enp8s7 - имя сетевого интерфейса
  • 10.10.10.1 - IP-адрес
  • 255.255.255.0 - маска подсети

Так как через утилиту ifconfig не указывается основной шлюз и DNS-сервера, это необходимо сделать отдельно

Указываем основной шлюз

sudo route add default gw 10.10.10.2

Для временного указания DNS-сервера необходимо добавить в файл /etc/resolv.conf строку

nameserver 8.8.8.8

Где 8.8.8.8 - IP-адрес DNS-сервера

Для получения IP-адреса через DHCP используем команду

sudo dhclient enp8s7

Где enp8s7 - имя сетевого интерфейса

3. Управление таблицей маршрутизации.

Для просмотра таблицы маршрутизации используются команды: netstat -rn или route -n

Если у Вас нет отдельно созданных маршрутов, вывод результата будет похож на следующий

$ netstat -rn

Destination Gateway Genmask Flags MSS Window irtt Iface

0.0.0.0 10.10.10.2 0.0.0.0 UG 0 0 0 enp8s7

10.10.10.0 0.0.0.0 255.255.255.0 U 0 0 0 enp8s7

Добавление статических маршрутов

Добавление статического маршрута в Ubuntu 16.04

Для добавления статического маршрута необходимо добавить строку конфигурации в файл /etc/network/interfaces в секцию конфигурации соответствующего сетевого интерфейса. Пример строки конфигурации

up route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.10.10.3

Где

  • 192.168.0.0 - указание подсети
  • 255.255.0.0 - маска подсети
  • 10.10.10.3 - шлюз

При добавлении такого маршрута конфигурационный файл будет иметь следующий вид

# This file describes the network interfaces available on your system

#

# and how to activate them. For more information, see interfaces(5).


#

# The loopback network interface

auto lo

iface lo inet loopback


# My Net

iface inet static

address 10.10.10.1

netmask 255.255.255.0

gateway 10.10.10.2

dns-nameservers 8.8.8.8 8.8.4.4

up route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.10.10.3

auto enp8s7

Добавление статического маршрута в Ubuntu 18.04

Для добавления статических маршрутов через netplan необходимо добавить секцию routes: в конфигурацию сетевого интерфейса

Пример конфигурации сетевого интерфейса с указанием статических маршрутов

    enp8s7:

      addresses: [10.10.10.1/24]

      gateway4: 10.10.10.2

      nameservers:

        addresses: [8.8.8.8]

      dhcp4: false

      routes:

        - to: 10.10.20.0/24

          via: 10.10.10.3

          metric: 100

        - to: 10.10.30.0/24

          via: 10.10.10.4

          metric: 100

Конфигурация маршрутов через командную строку

При конфигурации маршрутов через командную строку все изменения сохраняются до перезагрузки.

Управление маршрутами происходит при помощи утилиты route. Для добавления маршрута выполняем команду

sudo route add -net 10.10.20.0/24 gw 10.10.10.3

Удаление маршрута

sudo route delete -net 10.10.20.0/24

Заключение

В заметке не затрагивались настройки wi-fi адаптеров и виртуальных интерфейсов. Это будет описано отдельно. При возникновении вопросов задавайте их в комментариях.

Использованные материалы:

https://help.ubuntu.ru/wiki/%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%81%D0%B5%D1%82%D0%B8_%D0%B2%D1%80%D1%83%D1%87%D0%BD%D1%83%D1%8E

http://manpages.ubuntu.com/manpages/trusty/man8/route.8.html

https://netplan.io/

Комментариев нет:

Отправить комментарий