Настройка сети в Debian и Ubuntu
Установка необходимых пакетов
sudo aptitude update
sudo install ethtool bridge-utils vlan ifenslave ifstat iptraf irerf mtr tcpdump nmap
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 — Анализ сетевого трафика
Содержание [Скрыть]
- 1 Поиск сетевых NIC интерфейсов.
- 2 Имена сетевых интерфейсов
- 3 Помигать индикатором сетевой карты
- 4 Тип и скорость соединения сетевой карты
- 5 Ifupdown
- 6 ifconfig / ip link set
- 7 Мониторинг пропускной способности сетевого интерфейса
- 8 DNS клиент
- 9 Jumbo Frame (Jumbo-кадр)
- 10 Виртуальный сетевой интерфейс dummy
- 11 Объединение сетевых интерфейсов или агрегирование (LAG & LACP IEEE 802.3ad)
- 12 Пример конфигурационного файла /etc/network/interfaces
Поиск сетевых 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
Подробная статистика работы сетевой карты NIC
В случае возникновения ошибок на сетевом интерфейсе, можно посмотреть подробную статистику.
ethtool -S em1
Драйвер сетевой карты должен поддерживать статистику, должно быть «supports-statistics: yes» в выводе ethtool -i, см. выше.
Тестирование сетевой карты NIC
Offline тест
ethtool -t em1 offline
Online тест
ethtool -t em1 online
Драйвер сетевой карты должен поддерживать само-тестирование, должно быть «supports-test: yes» в выводе ethtool -i, см. выше.
Имена сетевых интерфейсов
Привязка имени сетевого интерфейса 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
Принудительно выставить скорость соединения:
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
Комментарии
Отправить комментарий