Настройка сети в Debian и Ubuntu

Общая настройка сетевых интерфейсов, 802.1Q VLAN, Jumbo Frame, LAG & LACP (Aggregation) и др. под катом.
Установка необходимых пакетов
sudo aptitude update
sudo install ethtool bridge-utils vlan ifenslave ifstat iptraf irerf mtr tcpdump nmap
  • ethtool — просмотр и настройка параметров устройств Ethernet;
  • bridge-utils — Сетевой мост (бридж);
  • vlan — IEEE 802.1Q (tagged VLAN);
  • ifenslave — LAG, LACP IEEE 802.3ad (Агрегирование/объединение сетевых интерфейсов);
  • ifstat, iptraf — Мониторинг сетевых интерфейсов;
  • irerf — Тестирование пропускной способности;
  • mtr — Трассировка
  • tcpdump — Анализ сетевого трафика

Поиск сетевых NIC интерфейсов.

Показать список PCI устройств, среди которых есть и сетевые карты.
lspci
или более подробнее:
lspci -vvv
Показать список сетевого оборудования с логическими именами.
lshw -class network
Показать все доступные сетевые интерфейсы в системе
ifconfig -a
или
cat /proc/net/dev
или
ip link show
или
ip address
Показать все поднятые сетевые интерфейсы в системе
ip link show up

Информация о драйвере сетевой карты NIC

Информация о драйвере сетевой карты, поддержки режима само-тестирования, вывода подробной статистики работы и др.
ethtool -i eth0
Пример вывода
ethtool -i eth0
driver: ax88179_178a
version:
firmware-version:
bus-info: 4-5:1.0
supports-statistics: no
supports-test: no
supports-eeprom-access: yes
supports-register-dump: no
supports-priv-flags: no
ax88179_178a не поддерживает само-тестирование и вывод подробной статистики работы.
ethtool -i em1
driver: e1000e
version: 2.3.2-k
firmware-version: 0.13-4
bus-info: 0000:00:19.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: no
e1000e предоставляет больший функционал. Конечно, это же Intel.

Подробная статистика работы сетевой карты NIC

В случае возникновения ошибок на сетевом интерфейсе, можно посмотреть подробную статистику.
ethtool -S em1
Драйвер сетевой карты должен поддерживать статистику, должно быть «supports-statistics: yes» в выводе ethtool -i, см. выше.
Пример вывода
ethtool -S em1
NIC statistics:
     rx_packets: 110772498
     tx_packets: 76860132
     rx_bytes: 80837490044
     tx_bytes: 43268190108
     rx_broadcast: 418329
     tx_broadcast: 10098
     rx_multicast: 7601
     tx_multicast: 8
     rx_errors: 105
     tx_errors: 0
     tx_dropped: 0
     multicast: 7601
     collisions: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_crc_errors: 105
     rx_frame_errors: 0
     rx_no_buffer_count: 0
     rx_missed_errors: 0
     tx_aborted_errors: 0
     tx_carrier_errors: 0
     tx_fifo_errors: 0
     tx_heartbeat_errors: 0
     tx_window_errors: 0
     tx_abort_late_coll: 0
     tx_deferred_ok: 0
     tx_single_coll_ok: 0
     tx_multi_coll_ok: 0
     tx_timeout_count: 0
     tx_restart_queue: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     tx_tcp_seg_good: 9978
     tx_tcp_seg_failed: 0
     rx_flow_control_xon: 0
     rx_flow_control_xoff: 0
     tx_flow_control_xon: 0
     tx_flow_control_xoff: 0
     rx_csum_offload_good: 110093756
     rx_csum_offload_errors: 0
     rx_header_split: 0
     alloc_rx_buff_failed: 0
     tx_smbus: 0
     rx_smbus: 0
     dropped_smbus: 0
     rx_dma_failed: 0
     tx_dma_failed: 0
     rx_hwtstamp_cleared: 0
     uncorr_ecc_errors: 0
     corr_ecc_errors: 0
     tx_hwtstamp_timeouts: 0
  • em1 — это название сетевого интерфейса.

Тестирование сетевой карты NIC

Offline тест
ethtool -t em1 offline
Online тест
ethtool -t em1 online
Драйвер сетевой карты должен поддерживать само-тестирование, должно быть «supports-test: yes» в выводе ethtool -i, см. выше.
Пример вывода
The test result is PASS
The test extra info:
Register test  (offline)  0
Eeprom test    (offline)  0
Interrupt test (offline)  0
Loopback test  (offline)  0
Link test   (on/offline)  0

Имена сетевых интерфейсов

Привязка имени сетевого интерфейса mac-адресу сетевой карты задается в файле /etc/udev/rules.d/70-persistent-net.rules
sudo  cat /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:aa:01:5a:fe", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
Eсли  заменить сетевую карту, то новой карте уже присвоится новое имя (например если имя интерфейса для старой карты было eth0, то новой будет назначено eth1, а имя eth0 будет ассоциировано с MAC адресом старой сетевой карты), это можно исправить отредактировав фай /etc/udev/rules.d/70-persistent-net.rules.

Помигать индикатором сетевой карты

Если в сервере больше одной сетевой карты, да и когда имена сетевых карт например em1, p3p1, eth0 сложно определить какая из них какая. С помощью ethtool можно заставить сетевую карту мигать индикатором.
ethtool -p em1 10
  • em1 — имя сетевого интерфейса;
  • 10 — время в секундах, в течении которого будет мигать светодиод.
К сожалению не все драйвера сетевых карт поддерживаю данную функцию.

Тип и скорость соединения сетевой карты

Чтобы посмотреть тип и скорость соединения на интерфейсе eth0, наберем в консоли:
sudo ethtool eth0
Пример вывода
Settings for eth0:
 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
 Advertised link modes:  10baseT/Half 10baseT/Full
                         100baseT/Half 100baseT/Full
                         1000baseT/Full
 Advertised pause frame use: Symmetric
 Advertised auto-negotiation: Yes
 Link partner advertised link modes:  10baseT/Half 10baseT/Full
                                      100baseT/Half 100baseT/Full
 Link partner advertised pause frame use: No
 Link partner advertised auto-negotiation: Yes
 Speed: 100Mb/s
 Duplex: Full
 Port: MII
 PHYAD: 3
 Transceiver: internal
 Auto-negotiation: on
 Supports Wake-on: pg
 Wake-on: g
 Current message level: 0x00000007 (7)
          drv probe link
 Link detected: yes
Принудительно выставить скорость соединения:
sudo ethtool -s eth0 duplex full speed 1000 autoneg off
Чтобы жестко задать скорость порта сетевой карты нужно прописать действие up в /etc/network/interfaces, например:
auto eth0
iface eth0 inet manual
up /sbin/ethtool -s eth0 duplex full speed 1000 autoneg off

Ifupdown

Пакет ifupdown является стандартным для конфигурирования сети в Debian и Ubuntu. Этот пакет использует конфигурационный файл: “/etc/network/interfaces” и содержит две команды “ifup” и “ifdown“.
Поднять сетевой интерфейс eth0:
sudo ifup eth0
Отключить сетевой интерфейс eth0:
sudo ifdown eth0
Также можно управлять ppp соединениями, если они прописаны в /etc/network/interfaces.

ifconfig / ip link set

Для задания временных/оперативных настроек сетевых интерфейсов без сохранения в конфига /etc/network/interfaces можно использовать команды ifconfig или ip link set, причем ifconfig считается устаревшей.
Поднять сетевой интерфейс eth0.
ifconfig eth0 up
или
ip link set eth0 up
Опустить сетевой интерфейс eth0.
ifconfig eth0 down
или
ip link set eth0 down

Мониторинг пропускной способности сетевого интерфейса

iptraf

Iptraf по умолчанию не распознает экзотические сетевые интерфейсы с именами emX, pXpX, некоторые VPN соединения, но ключ -u решает эту проблему.
iptraf -u

ifstat

ifstat в отличие от iptraf выводит данные в текстовом виде и её вывод можно использовать в скриптах.
Отобразить нагрузку на трех сетевых интерфейсах:
ifstat -ltbS -i eth0,em1,p3p1

DNS клиент

В новых версиях Debian и Ubuntu по умолчанию установлен пакет resolvconf, который автоматически добавляет используемые DNS сервера в файл /etc/resolv.conf. Это нужно для автоматического изменения используемых DNS при получении DNS по DHCP и VPN. Если нужно автоматическое изменение DNS, но при этом нужно указать DNS так-же вручную, то в файле /etc/network/interfaces нужно добавить параметр dns-nameservers на любой интерфейс.
dns-nameservers 8.8.8.8
Если запущен демон resolvconfd редактировать файл /etc/resolv.conf нельзя, все внесенные изменения будут потеряны.
На сервере лучше не использовать resolvconf, а вручную прописать необходимые DNS в /etc/resolv.conf, для этого сначала нужно удалить пакет resolvconf:
aptitude purge resolvconf
Отредактируем resolv.conf
sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf
sudo echo "nameserver 8.8.4.4" >> /etc/resolv.conf
Для надежности заблокируем файл resolv.conf на редактирование
sudo chattr +i /etc/resovl.conf

Jumbo Frame (Jumbo-кадр)

Джамбо-кадры (англ. Jumbo Frame) — это сверхдлинные (огромные) Ethernet-кадры, которые используются в высокопроизводительных сетях для увеличения производительности на длинных расстояниях, а также уменьшения нагрузки на центральный процессор. Jumbo-кадры имеют размер  размер MTU до 65535 байт, что соответствует максимальному размеру TCP/IP пакета 64Kib. Как правило 9000 байт (аппаратное ограничение на коммутаторах).
Используемые коммутаторы и сетевые карты должны поддерживать технологию Jumbo Frame.
  • vnet поддержимавает максимальный размер MTU 65521.
  • Qualcomm Atheros Gigabit NIC (точно для AR8161) имеют физическое ограничение на максимальный размер MTU 9194;
  • Intel Gigabit NIC (точно для I217-V) имеют физическое ограничение на максимальный размер MTU 8996;
  • ASIX Gigabit NIC (точно для ax88179_178a) имеют физическое ограничение на максимальный размер MTU 4088.
Для использования Jumbo Frame достаточно назначить необходимый размер MTU на сетевом интерфейсе, см. конфигурационный файл ниже или выполнить:
ifconfig eth0 mtu 9000

Проверка прохождения Jumbo Frame

Для тестирования Jumbo Frame достаточно утилиты ping.
Linux:
ping -M do -s 8972 [destinationIP]
Mac OS:
ping -D -s 8972 [destinationIP]
Windows:
ping -f -l 8972 [destinationIP]

Виртуальный сетевой интерфейс dummy

В Debian модуль виртуального сетевого интерфейса грузится по умолчанию. В Ubuntu нужно загрузить модуль dummy.
sudo modprobe -v dummy numdummies=5
  • numdummies=5
    Указываем необходимое кол-во виртуальных интейфейсов, в данном случае мы сможем поднять 5 интерфейсов: dummy0, dummy1 … dummy4.
Для загрузки модуля dummy при загрузке системы нужно отредактировать файл /etc/modules
sudo echo "dummy numdummies=5" >> /etc/modules
Проверим загрузился ли модуль
lsmod | grep dummy
dummy   12960  0
Если понадобится выгрузить модуль dummy, то нужно выполнить команду:
sudo rmmod dummy
Проверим, доступность интерфейса/ов dummy
sudo ip link show | grep dummy
или
sudo cat /proc/net/dev |grep dummy

Объединение сетевых интерфейсов или агрегирование (LAG & LACP IEEE 802.3ad)

Объединения сетевых интерфейсов Link Aggregation (LAG) и использованию протокола LACP (Link Aggregation Control Protocol) IEEE 802.3ad.
Загрузка модуля bonding
sudo modprobe -v bonding mode=0 downdelay=100 updelay=100 miimon=50 max_bonds=4 xmit_hash_policy=layer2+3
Для загрузки модуля bounding при загрузке системы нужно отредактировать файл /etc/modules
sudo echo "bonding mode=0 downdelay=100 updelay=100 miimon=50 max_bonds=5 xmit_hash_policy=layer2+3" >> /etc/modules
  • xmit_hash_policy=layer2+3
    Алгоритм по которому Linux будет распределять трафик по сетевым интерфейсам, бывает три варианта: layer2 – по MAC, layer2+3 – по MAC и IP; layer3+4 – по IP и порту. Алгоритм layer2+3 полезен для случая когда между сервером и клиентами установлен роутер, если роутера нет, то вполне можно использовать layer2.
  • downdelay=100
    Устанавливает время в 200 миллисекунд ожидания, прежде чем отключить slave в случае отказа соединения. Эта опция действует только на bond-miimon
  • updelay=100
    Устанавливает время в 100 миллисекунд ожидания, прежде чем включить slave после восстановления соединения. Эта опция действует только на bond-miimon
  • miimon=50
    Установка MII link частоты наблюдения в 50 миллисекунд. Это значение определяет как часто будет проверяться состояние соединения на каждом из интерфейсов. Необходима аппаратная поддержка сетевыми картами.Проверка поддержки сетевыми интерфейсами, которые мы будем объединять, мониторинга подключения кабеля:
    sudo ethtool eth0 | grep "Link detected:"
            Link detected: yes
    Если видим «Link detected: yes» значит все хорошо и мы сможем использовать параметр miimon.
  • max_bonds=5
    Указываем необходимое кол-во агрегированных интерфейсов, в данном случае мы сможем поднять 5 интерфейсов: dummy0, dummy1 … dummy4.
  • mode=0 (balance-rr)
    Последовательно кидает пакеты, с первого по последний интерфейс.
  • mode=1 (active-backup)
    Один из интерфейсов активен. Если активный интерфейс выходит из строя (link down и т.д.), другой интерфейс заменяет активный. Не требует дополнительной настройки коммутатора
  • mode=2 (balance-xor)
    Передачи распределяются между интерфейсами на основе формулы ((MAC-адрес источника) XOR (MAC-адрес получателя)) % число интерфейсов. Один и тот же интерфейс работает с определённым получателем. Режим даёт балансировку нагрузки и отказоустойчивость.
  • mode=3 (broadcast)
    Все пакеты на все интерфейсы
  • mode=4 (802.3ad)
    Link Agregation — IEEE 802.3ad, требует от коммутатора настройки.
  • mode=5 (balance-tlb)
    Входящие пакеты принимаются только активным сетевым интерфейсом, исходящий распределяется в зависимости от текущей загрузки каждого интерфейса. Не требует настройки коммутатора.
  • mode=6 (balance-alb)
    Тоже самое что 5, только входящий трафик тоже распределяется между интерфейсами. Не требует настройки коммутатора, но интерфейсы должны уметь изменять MAC.
Проверим загрузился ли модуль bondind
lsmod | grep bondind
bonding   140730  0
Если понадобится выгрузить модуль bondind, то нужно выполнить команду:
sudo rmmod bondind
Проверим, доступность интерфейса/ов bond
sudo ip link show | grep bond
или
sudo cat /proc/net/dev |grep bond
Посмотреть состояние агрегированного интерфейса можно в /proc/net/bonding
sudo cat /proc/net/bonding/bond0
Пример вывода:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 50
Up Delay (ms): 100
Down Delay (ms): 100

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:ed:1a:11
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 52:54:00:ed:1a:12
Slave queue ID: 0
Настройку интерфейса/ов bond см. в примере конфигурационного файла /etc/network/interfaces ниже.
После завершения настройки агрегированного интерфейса обязательно необходимо произвести тестирование пропускной способности, например с помощью iperf, что бы на 100% убедится в правильности конфигурации. Подробнее о использовании iperf см. здесь.

Пример конфигурационного файла /etc/network/interfaces

auto lo
iface lo inet loopback
# Только, если используется resolvconf 
#dns-nameservers 8.8.8.8

# Qualcomm Atheros AR8161 Gigabit Ethernet
# Internet (PPPOE MTS)
auto p3p1
iface p3p1 inet manual
up ifconfig p3p1 hw ether 00:11:22:22:00:AA
#post-up mii-tool -F 100baseTx-FD p3p1
up /sbin/ethtool -s p3p1 duplex full speed 1000 autoneg off
auto em1
iface em1 inet static
 address 192.168.100.1
 netmask 24
 up ifconfig em1 hw ether 00:11:22:22:00:BB

auto em1:1
iface em1:1 inet static
 address 192.168.99.1
 netmask 24

# VLAN 802.1Q
#auto em1.234
#iface em1:234 inet static
address 192.168.99.1
netmask 24

auto dummy0
iface dummy0 inet static
 address 192.168.10.1
 netmask 24
#Jumbo Frame
 mtu 9000
 up ifconfig dummy0 hw ether 00:11:22:33:44:01

auto dummy0:1
iface dummy0:1 inet static
 address 192.168.20.1
 netmask 32

auto dummy0:2
iface dummy0:2 inet static
 address 192.168.20.2
 netmask 32

#auto dummy1
#iface dummy1 inet manual
# mtu 9000
# up ifconfig dummy1 hw ether 00:11:22:33:44:02

auto dummy2
iface dummy2 inet manual
# Jumbo Frame
 mtu 9000
 up ifconfig dummy2 hw ether 00:11:22:33:44:02

auto dummy3
iface dummy3 inet manual
# Jumbo Frame
 mtu 9000
 up ifconfig dummy3 hw ether 00:11:22:33:44:03

auto dummy4
iface dummy4 inet manual
# Jumbo Frame
 mtu 9000
 up ifconfig dummy4 hw ether 00:11:22:33:44:04

# Обязательно в составе бриджа должен быть как минмум один интерфейс для инициилизации стартовыми скриптами
# MAC address и MTU присваиваются с dummy

auto nemo
iface nemo inet static
    address 192.168.70.1
    netmask 24
    bridge_ports dummy2
    bridge_stp off
    bridge_maxwait 0
    bridge_fd 0
    bridge_hello 0

auto baracuda
iface baracuda inet static
    address 192.168.80.1
    netmask 24
    bridge_ports dummy3
    bridge_stp off
    bridge_maxwait 0
    bridge_fd 0
    bridge_hello 0


# Wi-Fi
# Atheros
#iface ath1 inet static
address 192.168.2.13
netmask 255.255.255.0
wireless-essid  home
wireless-nick Notebook
wireless-channel 1
wireless-ap 00:14:86:AC:5A:FA
wireless-rate 54M

# PPP interface (Internet PPPOE MTS)
auto mts-pppoe
iface mts-pppoe inet ppp
    pre-up /bin/sleep 3
    provider mts

# LACP
#auto bond0
#iface bond0 inet static
#    address 192.168.80.1
#    netmask 24
##    network 192.168.80.0
##    broadcast 192.168.80.255
##    gateway 192.168.1.1
# Jumbo Frame
# mtu 9000
# up /sbin/ifenslave bond0 eth0 eth1
# down /sbin/ifenslave -d bond0 eth0 eth1

Основные параметры используемые в /etc/network/interfaces

показать

auto <interface_name>” – поднимает интерфейс с именем interface_name во время загрузки системы
allow-auto <interface_name> – синоним “auto”
allow-hotplug <interface_name> –  стартует интерфейс с именем interface_names, когда ядро обнаруживает hutplug событие от устройства. Используется для метода dhcp.
Книгурация сетевого интерфейса:
iface <config_name>  <address_family> <method_name> 
<option1> <value1>
<option2> <value2>
где
  • <config_name> — имя конфигурации (например eth0-config);
  • <address_family> – семейстов адресов (inet – для IPv4, inet6 – для IPv6);
  • <method_name> – метод настройки;
  • <option1> <value1> – опция и её значение.
Методы для семейства адресов inet (IPv4): 
  • loopback – метод для определения интерфейса замыкания на себя (для этого метода нет опций);
  • static – метод используется для настройки интерфейса при статическом IP (Опции: addressnetmaskbroadcastnetworkmetricgatewaypointopointmediahwaddressmtu);
  • manual – метод для настройки интерфейсов, конфигурация которых не заданна. Интерфейсы настраиваются вручную во время команд up / down или с помощью скриптов в /etc/network/if-*.d;
  • dhcp – метод получения настройки сети через DHCP сервер (Опции: hostnameleasehoursleasetimevendorclienthwaddress);
  • bootp – метод получения настройки сети через протокол BOOTP (Опции: bootfileserverhwaddr);
  • ppp – метод использует pon/poff для конфигурации интерфейса (Опции: provider);
  • wvdial – метод использует wvdial для настройки интерфейса (Опции: provider).
Методы для семейства адресов inet6 (IPv6):
  • loopback – метод для определения интерфейса замыкания на имеющего адрес IPv6 (для этого метода нет опций);
  • static – метод используется для настройки интерфейса при статическом IPv6 (Опции: addressnetmaskgatewaymediahwaddressmtu);
  • manual – аналог метода manual для IPv4, только используется для IPv6 (для этого метода нет опций);
  • v4tunnel – метод для настройки тунеля IPv6 поверх IPv4 , необходима команда ip из пакета iproute (Опции: addressnetmaskendpointlocalgatewayttl).

Комментарии

Популярные сообщения из этого блога

Права на папки и файлы (unix/chmod)

Автоматическое монтирование дисков и разделов в Linux или что такое fstab? Проблема Debian

Подключение USB флешки к Debian