|
Bog BOS: Настройка TCP/IP в Linux
|
Последнее изменение файла: 2024.11.06
Скопировано с www.bog.pp.ru: 2024.11.11
Bog BOS: Настройка TCP/IP в Linux
В статье описываются средства настройки TCP/IP в Linux для "старой" реализации
(NET-3/4, ядро 2.0/2.2) и "новой" (iproute2, ядро 2.4/2.6).
В частности, приводятся команды управления интерфейсами
(NET-4, iproute2),
адресами (iproute2),
маршрутизацией (NET-4, iproute2),
правилами маршрутизации, туннелями,
утилиты,
параметры ядра (NET-4, iproute2), примеры настройки
(назначение нескольких адресов на интерфейс в ядре 2.2;
2 канала выхода в Интернет).
Управление таблицами разрешения адресов вынесено в отдельную статью об ARP.
Команды управления сетью "в старом стиле" (до ядра 2.4) содержатся в пакете net-tools:
ifconfig (управление интерфейсами), route (управление маршрутами),
arp (управление таблицей соседей),
netstat (получение статистики и информации
о состоянии интерфейсов, маршрутов, соединений),
hostname (установить или вывести DNS имя узла - gethostname(2), читается при загрузке из
/etc/hostname или устанавливается dhcp клиентом),
dnsdomainname (установить или вывести DNS имя узла - getdomainname(2),
определяется DNS клиентом; внимание: domainname выдаёт имя NIS домена!).
Каждое физическое соединение компьютера рассматривается как сетевой интерфейс.
Обычно интерфейсы ethernet именуются как eth0, eth1 и т.д., модемные интерфейсы - ppp0,
локальный интерфейс - lo (127.0.0.1), тунель в светлое будущее (IP6) - sit0, FDDI - fddi0,
безпроводная сеть - wlan0, некоторые изготовители хотят видеть свои имена устройств.
Имена интерфейсов не имеют прямого соответствия с именами устройств в /dev.
Управление физическим уровнем смотри в статьях: Ethernet.
Каждый ethernet интерфейс имеет один MAC адрес и не менее одного IP адреса (а вместе с ним
сетевую маску, широковещательный адрес и множество параметров).
Программа ifconfig без параметров выводит список активных интерфейсов и их параметры
(MAC адрес, номер прерывания, адрес памяти, IP адрес, сетевую маску, широковещательный адрес,
активность, обслуживаются ли широковещательные и групповые пакеты, MTU, метрика),
статистику полученных (общее количество, ошибочных, брошенных из-за недостатка места в ОЗУ,
брошенных из-за недостатка времени на обработку прерывания, ошибки в формате кадра)
и переданных (общее количество, ошибочных, брошенных из-за недостатка места в ОЗУ,
брошенных из-за недостатка времени на обработку прерывания, ошибки несущей) пакетах,
количество коллизий, размер очереди передачи, количество полученных и переданных байт.
Ключ -a позволяет получить информацию обо всех интерфейсах
Настройка интерфейса: ifconfig имя-интерфейса [inet] параметры-через-пробел. Параметры:
- up
- down (автоматически удаляются все привязанные к этому интерфейсу маршруты!)
- [-]arp (использовать ли ARP)
- [-]promisc (принимать ли "чужие" пакеты; появился в RH 5.0)
- [-]allmulti (принимать ли любые групповые пакеты; появился в RH 5.0)
- metric метрика-соединения (используется при определение кратчайшего маршрута)
- mtu число (для ethernet - 1500)
- netmask маска-сети
- [-]broadcast [широковещательный-адрес]
- [-]pointopoint [адрес-второго-конца]
- hw ether MAC-адрес
- media { 10base2 | 10baseT | AUI | auto} (появился в RH 5.0;
рекомендуется ethtool или mii-tool)
- multicast
- txqueuelen длины-выходной-очереди (появился в RH 5.0)
- IP-адрес-интерфейса (обязательный параметр)
Программа route без параметров выводит список маршрутов (аналогично netstat --route):
сеть назначения, шлюз, маска сети, флаги (U - up, H - Host, G - шлюз, D - установлен ICMP Redirect,
M - изменён ICMP Redirect, ! - сеть заблокирована, C - кеш, A - addrconf?), метрика, зависимых маршрутов,
использований (кеш сокетов не учитывается), интерфейс. Параметры:
- -n (не преобразовывать адреса в имена)
- -e (в формате netstat)
- -ee (выводить оба набора параметров)
- -C (показать кеш таблиц маршрутизации ядра; появился в RH 5.0)
- -F (показывать таблицу FIB - Forwarding Information Base)
Добавление маршрута в таблицу: route add [-net | -host] [ адрес-сети | default]
параметры-через-пробел. Параметры:
- netmask маска-сети
- gw адрес-шлюза (можно указывать IP-адрес локального интерфейса;
шлюз к этому моменту д.б. доступен)
- metric метрика (используется при определение кратчайшего маршрута)
- mss число (536; TCP Maximum Segment Size)
- window размер-TCP-окна
- irtt милисекунд (300; initial round trip time)
- reject (блокировать доступ к сети)
- [dev] имя-интерфейса (вручную привязать маршрут к интерфейсу; обычно определяется
автоматически по списку всех активных интерфейсов)
Удаление маршрута из таблицы: route del [-net | -host] [ адрес-сети | default]
параметры-через-пробел. Параметры:
- netmask маска-сети
- gw адрес-шлюза (можно указывать IP-адрес локального интерфейса;
шлюз к этому моменту д.б. доступен)
- metric метрика (используется при определение кратчайшего маршрута)
- [dev] имя-интерфейса (вручную привязать маршрут к интерфейсу)
При наличии нескольких подходящих маршрутов выбирается маршрут с самой длинной маской сети.
Сообщение ICMP Network Redirect в Linux интерпретируется как Host Redirect
(имеет смысл запретить его совсем).
Получение информации (имя, MTU, статистика переданных и принятых пакетов с ошибками и без, флаги)
об активных интерфейсах с помощью netstat (обо всех: -a): netstat -i.
Получение списка активных соединений (получение дополнительной информации о владельце: -e;
не преобразовывать адреса в имена: -n; выдавать "слушающие" соединения: -a;
состояние таймеров: -o):
netstat [--ip] [--unix] [--raw] [--tcp] [--udp] [--netlink]
(протокол, пакетов во входной и выходной очередях, местный и другой адреса и порты, состояние).
lsof с ключом -i позволяет увидеть установленные соединения с привязкой
к владельцу и программе (порты, не привязанные к процессам, не показываются - nfs, lockd).
Управление параметрами стека TCP/IP в ядре осуществляется через файлы каталога
/proc/sys/net/ipv4 (посмотреть - cat имя; изменить - echo параметр... > имя).
Смысл имен описан в ip-sysctl.txt.
В частности, для старых дистрибутивов необходимо сделать следующее
(для установки во время загрузки надо поменять /etc/rc.d/init.d/network)
- изменить ip_local_port_range с "1024 4999" на "32768 61000"
(echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range);
из этого интервала берутся номера локальных портов для соединения с удаленными серверами;
так как мой сетевой экран глушит все соединения идущие снаружи на внутреннюю
сеть и направленные на порты до 32768, считая их привилегированными, то
надо вывести их выше
- включить ip forwarding (необходим для transparent proxy, сбрасывает остальные
параметры стека в соответствии с RFC 1122 для хостов и RFC 1812 для маршрутизаторов):
echo 1 > /proc/sys/net/ipv4/ip_forward (во время загрузки
устанавливается в зависимости от значения переменной FORWARD_IPV4 в /etc/sysconfig/network);
проверить можно посмотрев содержимое файла /proc/net/snmp
- включить обязательную дефрагментацию для пресечения обхода сетевого экрана:
echo 1 > /proc/sys/net/ipv4/ip_always_defrag # в ядре 2.2.12 указывается
во время конфигурации ядра
В RH 6.2 для управления параметрами стека (и любыми другими переменными
из /proc/sys) используется
sysctl -p /etc/sysctl.conf
в котором записаны операторы присваивания соответствующим переменным
(имена переменных совпадают с именами файлов из /proc/sys с заменой
слешей на точки):
- net.ipv4.ip_local_port_range = "32768 61000"
- net.ipv4.ip_forward = 1
- net.ipv4.ip_always_defrag = 1
- net.ipv4.conf.all.rp_filter = 1
- net.ipv4.conf.all.log_martians = 1 (сбрасывать пакеты с невозможными адресами в журнал)
- net.ipv4.conf.all.accept_source_route = 0 (запретить source route)
Однако похоже, что sysctl не работает с двумя параметрами
(ip_local_port_range), так что этот параметр приходится устанавливать руками
В новых версиях ядра именно такие значения устанавливаются по умолчанию,
если имеется более 128 МБ оперативной памяти.
- ядро 2.2 должно быть собрано с поддержкой alias (CONFIG_IP_ALIAS=y, /proc/net/ip_alias)
- после конфигурации основного адреса на интерфейсе в /etc/rc.d/init.d/network (пусть eth0):
ifconfig eth0:0 дополнительный-адрес netmask маска-дополнительной-сетки up
- в документации предлагается определить маршрут для этой сетки
route add -net дополнительная-сетка netmask маска-дополнительной-сетки eth0:0
но он устанавливается сам собой
В системах с новым ядром (2.4/2.6) следует отдавать предпочтение команде ip вместо устаревших
ifconfig, route, arp (сравните вывод route и ip route list table all)
и ss вместо netstat. Для работы требует наличия netlink в ядре, RTNETLINK и CONFIG_IP_ADVANCED_ROUTER,
CONFIG_IP_MULTIPLE_TABLE и CONFIG_IP_ROUTE_FWMARK для работы с правилами.
Старые команды (ifconfig, arp, route) по-прежнему находятся в пакете net-tools,
однако являются лишь надстройкой над новой системой, находящейся в пакете iproute.
Команда ip позволяет управлять интерфейсами (link),
адресами (address),
таблицей соседей (neighbour),
маршрутами (route),
правилами маршрутизации (rule),
групповыми адресами (maddress),
групповой маршрутизацией (mroute),
и тунелями (tunnel) в зависимости от указанного в команде
типа объекта управления.
Формат параметров: ip ключи тип-объекта команда аргументы.
Общеупотребительные ключи:
- -Version (-V)
- -statistics (-stats, -s; увеличить количество выдаваемой информации)
- -family {inet | inet6 | link} (-f, -4 вместо -family inet, -6 вместо -family inet6,
-0 вместо -family link)
- -oneline (-o; выдавать информацию о каждом объекте одной строкой)
- -resolve (-r, преобразовать адреса в имена)
Для любого типа объектов реализована команда help.
Имена типов, команд, параметров можно сокращать.
Ядро использует несколько таблиц маршрутизации с номера от 1 до 255
(соответствие номеров именам таблиц находится в файле /etc/iproute2/rt_tables).
По умолчанию, используется таблица main (254). Также ядро самостоятельно ведёт
таблицу local (255) для локальных и широковещательных адресов.
Ключом доступа в таблице является адрес сети, длина маски сети и TOS.
Поиск в таблице считается успешным, если старшие биты адреса назначения совпадают с префиксом
маршрута не менее длины маски сети и TOS маршрута равен нулю или TOS пакета.
Если нашлось несколько подходящих маршрутов, то выбираются маршруты с максимальным префиксом,
из них выбираются маршруты с подходящим TOS, из них выбираются маршруты с наибольшим
приоритетом, из оставшихся маршрутов выбирается первый в таблице.
Типы маршрутов:
- unicast (обычный маршрут, определяет интерфейс и адрес следующего хопа для подсети назначения)
- unreachable (пакет выбрасывается и посылается ICMP сообщение "host unreachable")
- blackhole (пакет просто выбрасывается)
- prohibit (пакет выбрасывается и посылается ICMP сообщение "administratively prohobited")
- local (loopback, lo)
- broadcast (пакет пересылается в виде широковещательного сообщения канального уровня)
- throw (управляющий маршрут, используется совместно с
правилами маршрутизации;
при отсутствии правила маршрутизации пакет выбрасывается и
посылается ICMP сообщение "net unreachable")
- nat (адреса сети назначения преобразуются в соответствии с параметром via;
маршрутизатор также обслуживает ARP запросы для этой сети;
не предназначен для сжатия адресного пространства или разделения нагрузки;
в частности, не хранит таблицу соединений и не заглядывает внутрь пакета;
можно использовать при перенумерации сети;
для обратного преобразования необходимо задать дополнительное правило маршрутизации
"ip rule add from реальный-адрес nat виртуальный-адрес")
- anycast (локальные адреса, которые нельзя использовать в качестве адресов источника)
- multicast
Выбор маршрута прохождения пакета (следующий хоп, интерфейс,
обратный адрес) может определяться не только по адресу назначения, но и по
другим атрибутам пакета (исходный адрес, адрес назначения, TOS, протокол, порт, входящий интерфейс).
С помощью средств разметки iptables для выбора можно использовать
тип протокола, номер порта и т.д:
iptables -A PREROUTING -t mangle селектор -j MARK --set-mark маркер
Для принятия решения используется RPDB (Routing Policy Data Base), состоящая из списка правил
(rules), упорядоченных в соответствии с заданными администратором приоритетами (0 - высший,
каждое правило должно иметь уникальный приоритет).
Каждое правило состоит из "селектора" и "действия". Селектор используется для
проверки необходимости применения действия из данного правила.
Действие может завершить процесс выбора выдав маршрут или сообщение об ошибке.
Типы действий:
- unicast (lookup) - просмотр указанной таблицы маршрутизации
- blackhole - молча выбросить пакет
- unreachable - выбросить пакет и вернуть сообщение ICMP о недоступности сети
- prohibit - выбросить пакет и вернуть сообщение ICMP о запрещении доступа
- nat - правило преобразования адресов (см. пример выше)
При инициализации создаются 3 правила:
- приоритет - 0, селектор - всё, действие - искать в таблице local (255);
это правило нельзя удалить или заменить
- приоритет - 32766, селектор - всё, действие - искать в таблице main (254)
- приоритет - 32767, селектор - всё, действие - искать в таблице default (253);
таблица default пуста
Определение обратного адреса при отправке пакета:
- адрес задан явно с помощью bind(2)
- таблица маршрутизации может содержать "подсказку" для определения обратного адреса
для указанного адреса назначения (параметр src команды ip route)
- ядро просматривает список адресов интерфейса, через который будет послан пакет;
для IPv4 ищется первый подходящий адрес с областью действия
(параметр scope команды ip address) шире, чем область
действия адреса назначения (параметр scope команды ip route),
но предпочтительно в той же подсети, что и следующий узел на маршруте
- если область действия адреса назначения link или host, то 0.0.0.0
- просматриваются все интерфейсы, начиная с lo, в поисках адреса с подходящей областью
действия
Тунели позволяют встраивать пакеты внутрь IPv4 пакетов.
Поддерживаются режимы ipip (IP в IP, позволяет соединить между собой 2 сетки IPv4,
не передаются широковещательные пакеты, нет защиты от прослушивания и изменения),
sit (инкапсуляция IPv6 в IPv4) и gre (протокол Cisco, позволяет встроить IPv4 и IPv6,
включая широковещательные пакеты, имеется возможность шифрования и защиты от изменения).
Подробнее в ip-tunnels.ps.
Область (realm) используется для объединения адресов в группы
для учёта (rtacct), администрирования, шейпинга трафика (tc). Определяются отдельные
области происхождения и назначения.
Управление интерфейсами в iproute2 |
Тип объекта - link.
Каждый интерфейс имеет уникальный индекс, который можно узнать по команде "ip link show dev имя",
и имя, которое можно изменить командой "ip link set dev старое-имя name новое-имя".
Интерфейс может быть привязан к другому интерфейсу (к имени добавляется
"@имя-головного-интерфейса"), пакеты посылаемые по этому интерфейсу инкапсулируются
в пакеты головного интерфейса.
Для каждого интерфейса действует определённый алгоритм обработки очереди (qdisc):
pfifo_fast, noqueue (отсутствие очереди), noop (интерфейс является "чёрной дырой").
Можно установить (команда set) параметры интерфейса
(сетевого устройства) или посмотреть текущие настройки (команда show, list, ls, l).
ip link set аргументы:
- [dev] имя-интерфейса
- up
- down
- arp { on | off } (использовать ли ARP; только для неработающего интерфейса)
- multicast { on | off } (обрабатывать ли групповые запросы)
- dynamic { on | off } (?)
- name новое-имя (изменить имя интерфейса; только для неработающего интерфейса)
- txqueuelen размер-выходной-очереди (в пакетах)
- mtu число
- address MAC-адрес
- broadcast MAC-адрес (MAC адрес для широковещательных запросов или MAC адрес соседа для
соединений точка-точка)
ip [-statistics] [-statistics] link show аргументы:
- [[dev] имя-интерфейса] (по умолчанию - для всех интерфейсов)
- up (показать настройки только работающих интерфейсов)
Флаги:
- UP (устройство готово принимать и передавать пакеты)
- LOOPBACK (все пакеты, которые передаются на устройство, немедленно показываются на входе)
- BROADCAST (устройство умеет посылать широковещательные пакеты)
- POINTOPOINT
- MULTICAST (это намёк, а не обязательство)
- PROMISC (в режиме прослушивания; в отличие от ifconfig показывается текущее состояние)
- ALLMULTI (устройство принимает все групповые пакеты; текущее состояние)
- NOARP (драйвер или устройство знают как посылать пакеты, не прибегая к помощи ARP)
- DYNAMIC (?)
- SLAVE/MASTER (интерфейс входит в группу - trunk)
- AUTOMEDIA (?)
- PORTSEL (?)
Тип объекта - address.
Каждый интерфейс должен иметь по крайней мере один IP адрес. Все адреса интерфейса равнозначны.
Добавление адреса - команда add, параметры:
- dev имя-интерфейса
- [local] адрес[/длина-сетевого-префикса] (адрес интерфейса)
- peer адрес[/длина-сетевого-префикса] (адрес соседа по интерфейсу типа pointopoint)
- broadcast [адрес | + | - ] (необходимо устанавливать вручную;
адрес для широковещательных запросов; "+" означает получить
широковещательный адрес установкой всех битов хостовой части адреса; "-" - их сбросом)
- label имя (для совместимости со скриптами рекомендуется использовать имена вида eth0
или eth0:1)
- scope область-действия (используется при выборе обратного адреса при отправке пакетов;
список имён областей лежит в файле /etc/iproute2/rt_scopes:
- global
- site (для IPv6)
- link (действует только в рамках устройства)
- host (действует только в рамках хоста; например, lo)
- nowhere
Удаление адреса - команда delete. Параметры те же, что для
команды add. Указание имени интерфейса обязательно. Если остальные аргументы не указаны,
то удаляется первый попавшийся адрес. Смотри ниже про удаление primary адреса.
Вывод списка адресов и их свойств - команда show (sh, list, ls, l).
Параметры:
- [dev] имя-интерфейса
- scope область-действия
- to префикс (показывать только адреса, соответствующие префиксу)
- label шаблон (показывать только адреса, метка которых соответсвует шаблону)
- primary (имеется другой адрес с тем же самым префиксом, этот адрес выбирается как обратный;
если такой адрес удалить, то все secondary адреса удалятся вместе с ним)
- secondary (имеется другой адрес с тем же самым префиксом и он выбирается как обратный)
Удаление группы адресов - команда flush (f). Параметры те же, что для
команды show. С ключом -statistics выводит число удалённых адресов.
Двойное использование ключа -statistics выводит список удалённых адресов.
Например, удаление всех адресов IPv6:
ip -6 addr flush dev eth0
Тип объекта - route. Управляет таблицами маршрутизации ядра (пути доступа
к другим узлам сети).
Добавление, изменение, замена маршрута:
ip [общие-опции] route {add | change | replace | append | prepend} параметры
- [to] [тип-маршрута] префикс-сети (специальный префикс "default" равен 0/0)
- {tos | dsfield} идентификатор (таблица идентификаторов TOS в файле /etc/iproute2/rt_dsfield)
- {metric | preference} приоритет
- table имя-таблицы (по умолчанию, маршруты типа local, broadcast и nat добавляются в таблицу
local, остальные - в таблицу main)
- dev имя-интерфейса
- via IP-адрес-следующего-узла
- src предпочтительный-исходящий-адрес
- realm область
- mtu число (может быть изменено с помощью Path MTU Discovery)
- mtu lock число (пакеты посылаются со сброшенным битом DF)
- window размер-нашего-окна-TCP
- rtt число (начальное значение RTT)
- rttvar число (RTT variance)
- ssthresh число (значение "slow start threshold" для начала)
- cwnd число (только для mtu lock; clamp for congestion window)
- advmss число (наше значение для MSS - Maximal Segment Size)
- reordering число (/proc/sys/net/ipv4/tcp_reordering)
- nexthop via IP-адрес dev имя-интерфейса weight вес (описание многонитевого маршрута;
вес отражает толщину или качество канала)
- scope область-действия
(по умолчанию, link для прямых unicast и broadcast маршрутов,
global для прочих unicast маршрутов, host для локальных маршрутов)
- protocol имя-протокола (имена протоколов в файле /etc/iproute2/rt_protos):
- redirect (маршрут добавлен после получения ICMP redirect)
- kernel (маршрут автоматически добавлен ядром при автонастройке)
- boot (маршрут добавлен при загрузке; по умолчанию)
- static (маршрут добавлен администратором)
- ra (маршрут добавлен по RDP - Router Discovery Protocol)
- onlink (указание о том, что следующий хоп подключён напрямую, хотя его адрес не соответствует
префиксу сети)
- equalize (распределять пакеты случайным образом по ниткам многонитевого маршрута)
Удаление маршрута:
ip [общие-опции] route delete параметры
- [to] [тип-маршрута] [префикс-сети] (срециальный префикс "default" равен 0/0)
- {tos | dsfield} идентификатор (таблица идентификаторов TOS в файле /etc/iproute2/rt_dsfield)
- {metric | preference} приоритет
- table имя-таблицы (по умолчанию, маршруты типа local, broadcast и nat добавляются в таблицу
local, остальные - в таблицу main)
Вывод списка маршрутов и их свойств - команда show (sh, list, ls, l).
Параметры:
- [to] [root | match | exact] префикс-сети
- {tos | dsfield} идентификатор (таблица идентификаторов TOS в файле /etc/iproute2/rt_dsfield)
- table {имя-таблицы | all | cache} (по умолчанию - main)
- cloned | cached (маршруты, клонированные ядром из других маршрутов в связи с различием параметров;
результат не отличим от "table cache")
- from [root | match | exact] исходящий-адрес (для клонированных маршрутов)
- protocol имя-протокола
- scope область-действия
- type тип-маршрута
- dev имя-интерфейса
- via IP-адрес-следующего-узла
- src предпочтительный-исходящий-адрес
- realm область
- realms исх-область/рез-область
Для маршрутов из кеша выдаётся также предполагаемый входной
интерфейс, число текущих пользователей, число использований и время последнего использования
(с опцией -statistics), а также атрибуты (в угловых скобках):
- local (для интерфейса lo, широковещательных и групповых)
- reject (плохой маршрут)
- mc (групповой маршрут)
- brd (широковещательный маршрут)
- src-direct (источник подключён непосредственно)
- redirected (маршрут создан по ICMP redirect)
- redirect (при прохождении пакета по этому маршрута будет послан ICMP redirect)
- fastroute (маршрут подходит для fastroute - ?)
- equalize (пакеты случайным образом распределяются по ниткам многонитевого маршрута)
- dst-nat (адрес назначения требует преобразования)
- src-nat (исходящий адрес требует преобразования)
Сброс группы маршрутов производится командой flush, имеющей те же
параметры, что и команда show. С ключом -statistics выводит число удалённых маршрутов.
Двойное использование ключа -statistics выводит список удалённых маршрутов.
Тестирование маршрута прохождения пакета:
ip route get параметры
- [to] адрес-назначения
- from исходящий-адрес (требуется задать iif)
- {tos | dsfield} идентификатор
- iif имя-входного-интерфейса (требуется задать from)
- oif имя-исходящего-интерфейса
- connected (если from не было задано, то после первого прохода повторить поиск
с исходящим адресом, определённым на первом проходе)
Тип объекта - rule. Управляет правилами маршрутизации (выбор таблиц
маршрутизации в зависимости от параметров).
Добавление, удаление правила (после внесения изменений требуется сбросить
кеш маршрутов - "ip route flush cache"):
ip [общие-опции] rule {add | delete} параметры
- [type] тип-правила
- from исходный-IP-адрес
- to IP-адрес-назначения
- iif имя-входного-интерфейса
- {tos | dsfield} идентификатор
- fwmark метка-iptables
- priority приоритет-правила
- table имя-таблицы-маршрутов
- realms исх-область/рез-область (область устанавливается
после нахождения маршрута в таблице; область адреса назначения устанавливается,
если она не задана в маршруте)
- nat начало-виртуального-блока адресов
Вывод списка правил и их свойств - команда show (sh, list, ls, l).
Тип объекта - maddress. Управляет групповыми адресами (только адрес канального уровня,
добавлять и удалять группы нельзя).
Вывод списка групповых адресов и их свойств - команда show (sh, list, ls, l).
Параметр: имя интерфейса.
Добавление, удаление группового адреса:
ip [общие-опции] maddress {add | delete} параметры
- [address] MAC-адрес
- dev имя-интерфейса
Тип объекта - mroute. Позволяет посмотреть кеш групповых маршрутов:
ip [общие-опции] mroute show параметры
- [to] сетевой-префикс
- from сетевой-префикс
- iif имя-входного-интерфейса
Тип объекта - tunnel. Управляет тунелями.
Добавление, изменение, удаление туннеля (удалить sit0 не удалось):
ip [общие-опции] tunnel {add | change | delete} параметры
- [name] имя-интерфейса-туннеля
- mode { ipip | sit | gre }
- remote IP-адрес
- local IP-адрес (должен принадлежать другому интерфейсу данного компьютера)
- ttl {inherit | число}
- {tos | dsfield} {inherit | идентификатор}
- dev имя-интерфейса (привязать туннель к исходящему интерфейсу)
- nopmtudisc (запретить Path MTU Discovery)
- key ключ (ключ шифрования GRE )
- ikey ключ (ключ шифрования ввода GRE)
- okey ключ (ключ шифрования вывода GRE)
- csum (создавать/проверять контрольные суммы в GRE)
- icsum (создавать контрольные суммы в GRE)
- ocsum (проверять контрольные суммы в GRE)
Вывод списка туннелей и их свойств - команда show (sh, list, ls, l).
Параметр: имя интерфейса.
Тип объекта - netns. Управляет пространствами имён сети (работа с именованными пространствами):
- ip netns list # вывод списка именованных пространств имён сети (просто читает [/var]/run/netns/)
- ip netns add имя-пространства # создание именованного пространства имён сети, добавляет в [/var]/run/netns/,
также делается "mount --bind [/var]/run/netns/имя"?
- ip [-all] netns del [имя-пространства] # удаление
- ip netns set имя-пространства {auto|идентификатор-пространства} # назначить идентификатор пространству имён сети на том конце туннеля;
действует только в текущем пространстве имён сети; при необходимости ядро сделает это само; средств изменения нет
- ip netns attach имя-пространства идентификатор-процесса # перенос процесса в пространство имён сети
- ip netns identify [идентификатор-процесса] # определение имени пространства сети по идентификатору процесса;
ищет в [/var]/run/netns, которого нет для docker
- ip netns pids имя-пространства # вывод списка процессов пространства имён сети
- ip [-all] netns exec [имя-пространства] команда ... # выполнение команды в пространстве имён сети;
должен биндить файлы с настройками (например, resolv.conf) из /etc/netns/имя-пространства-имён-сети в /etc, не заметил
- ip netns monitor # отслеживает добавление и удаление пространств имён сети
- ip netns list-id [target-nsid натуральное] [nsid натуральное] # выводит идентификаторы и имена (если есть) пространств имён сети
Перевод интерфейса в пространство имён сети осуществляется командой
ip link set имя-интерфейса netns {имя-пространства|идентификатор-процесса}.
Идентификатор пространства имён сети другого конца туннеля veth (link-netnsid) можно узнать командой
ip -d link show имя-интерфейса
Индекс интерфейса другого конца туннеля veth можно узнать командой
ethtool -S имя-интерфейса | fgrep peer_ifindex
Команда monitor позволяет вести непрерывное слежение за изменениями
в состоянии устройств, адресов и маршрутов (файл создаётся утилитой rtmon):
ip monitor [file имя-файла] [all | link | address | route]
Управление трафиком - задание полосы пропускания для определённого вида
исходящего трафика (shaping, задержка пакетов), планирование (scheduling, переупорядочивание)
передачи пакетов, обрезание как исходящего, так и входящего трафика (policing).
Очередь характеризуется максимальной длиной и дисциплиной (методом, алгоритмом)
обработки пакетов перед отправкой. Дисциплина может разбивать трафик на классы
с помощью классификатора (classifier), в простом случае с помощью фильтров, и распределять
полосу пропускания между классами. Фильтры tc позволяют классифицировать по TOS, IP адресу,
типу протокола, номеру порта или маркеру iptables
(очень удобно, чтобы не изучать новый синтаксис; таблица mangle, цепочка PREROUTING).
Для каждого класса задаётся отдельная дисциплина обработки
(может в свою очередь производить классификацию),
Дисциплина, применяемая к устройству целиком, называется корневой.
Дисциплины обработки очереди (qdisc) отправления (egress) и получения (ingress,
входящая дисциплина):
- pfifo_fast (3 встроенных приоритета; пакеты с приоритетом 0 отправляются в первую очередь,
затем с приоритетом 1, в последнюю очередь - пакеты с приоритетом 2;
приоритеты назначаются в соответствии с битами TOS (таблица преобразования жёстко задана))
- TBF (Token Bucket Filter; ограничение полосы пропускания с возможностью коротких всплесков)
- SFQ (Stochastic Fairness Queueing; предоставляет кадждому потоку (сеансу) равную полосу)
- PRIO (классификация пакетов с помощью предоставленных администратором фильтров;
каждому классу приписывается приоритет и своя дисциплина обработки (по-умолчанию FIFO),
которая вызывается если нет пакетов с высшим приоритетом)
- CBQ (Class Based Queueing; совмещение классификации и шейпинга, распределение полосы по весам
классов с возможностью заимствования чужой простаивающей полосы; сложна для настройки)
- HTB (Hierarchical Token Bucket; выполняет аналогичные функции, чуть проще в настройке)
- RED (Random Early Detection/Drop; позволяет сглаживать пики перегрузки за счёт предварительного
выбрасывания пакетов)
IMQ (Intermediate queueing device) - псевдоустройство, на которое можно
"ответвить" часть входящего или исходящего трафика, чтобы использовать дисциплину обработки
очереди для входящего потока и/или нескольких реальных устройств:
ip link set imq0 up
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0
tc qdisc add dev imq0 root ...
...
ip link set imq1 up
iptables -t mangle -A POSTROUTING -o eth1 -j IMQ -todev 0
iptables -t mangle -A POSTROUTING -o eth2 -j IMQ -todev 0
tc qdisc add dev imq1 root ...
...
TEQL (True/Trivial link Equalizer) - псевдоустройство, которое позволяет
распределять исходящий трафик между двумя компьютерами по нескольким каналам
(не забыть прописать маршруты, отключить /proc/sys/net/ipv4/conf/eth1/rp_filter):
tc qdisc add dev eth1 root teql0
tc qdisc add dev eth2 root teql0
ip link set dev teql0 up
Подробности смотри в tc(8) и далее, lartc содержит примеры использования.
Итак. Имеется внешний маршрутизатор, сделанный на базе Linux, ядро 2.4 или 2.6.
Интерфейс eth0 обслуживает локальную сеть 192.168.0.0/24
(параметры описаны в ifcfg-eth0, собственный адрес - 192.168.0.1, static, onboot),
интерфейс eth1 - первый канал в Интернет 193.232.1.0
(параметры описаны в ifcfg-eth1, собственный адрес - 193.232.1.34,
адрес шлюза - 193.232.1.33, static, onboot).
Сетка описана в /etc/sysconfig/network:
NETWORKING=yes
HOSTNAME=имя-хоста
GATEWAY=193.232.1.33
GATEWAYDEV=eth1
Добавляем настройки ethernet для второго канала
(собственный адрес - 193.232.2.50, адрес шлюза - 193.232.2.49).
Провайдер поставил ненормальный
медиаконвертор ,
который не умеет делать автосогласование, но работает в режиме полного дуплекса,
так что предварительно необходимо настроить модуль сетевой карты на 10FD:
alias eth2 tulip
options tulip options=10
При использовании любого дистрибутива предпочтительно использовать
принятые в нём традиции, в данном случае настраивать сеть, создав файл
/etc/sysconfig/network-scripts/ifcfg-eth2 и выполнив "ifup eth2" (явное задание MAC адреса
может пригодиться, если ядро поименует интерфейсы в неправильном порядке):
DEVICE=eth2
BOOTPROTO=static
IPADDR=193.232.2.50
NETMASK=255.255.255.240
NETWORK=193.232.2.48
ONBOOT=no
#HWADDR=00:0E:0C:XX:XX:XX
Создаём таблицу маршрутизации ISP2 для использования второго канала:
echo "200 ISP2" >> /etc/iproute2/rt_tables
ip route add default via 193.232.2.49 dev eth2 table ISP2
Добавляем правила для использования этой таблицы для трафика
с одного из компьютеров локальной сети и собственного интерфейса eth2
(для более интересных случаев необходимо использовать маркировку пакетов средствами
iptables):
ip rule add from 193.232.2.50 table ISP2
ip rule add from 192.168.0.3 table ISP2
ip route flush cache
Симметричный вариант. Создаём таблицы маршрутизации для обоих каналов:
echo "100 ISP1" >> /etc/iproute2/rt_tables
ip route add 193.232.1.32/30 dev eth1 src 193.232.1.34 table ISP1
ip route add default via 193.232.1.33 dev eth1 table ISP1
ip route add 127.0.0.0/8 dev lo table ISP1
ip route add 192.168.0.0/24 dev eth0 table ISP1
echo "200 ISP2" >> /etc/iproute2/rt_tables
ip route add 193.232.2.48/28 dev eth1 src 193.232.2.50 table ISP2
ip route add default via 193.232.2.49 dev eth2 table ISP2
ip route add 127.0.0.0/8 dev lo table ISP2
ip route add 192.168.0.0/24 dev eth0 table ISP2
Правила выбора нужной таблицы и задание исходящих адресов
ip rule add from 193.232.1.34 table ISP1
ip route change 193.232.1.32/30 dev eth1 src 193.232.1.34
ip rule add from 193.232.2.50 table ISP2
ip route change 193.232.2.48/28 dev eth2 src 193.232.2.50
ip rule add from 192.168.0.3 table ISP2
ip route flush cache
Для распределения нагрузки между каналами надо заменить маршрут
по умолчанию в главной таблице (балансируются маршруты, а не байты!):
ip route add default scope global nexthop via 193.232.1.33 dev eth1 weight 1 \
nexthop via 193.232.2.49 dev eth2 weight 5
Включение /proc/sys/net/ipv4/conf/имя-интерфейса/rp_filter (в RH включён)
позволяет ядру проверять входящие пакеты на правильность исходящего адреса (ответ на пакет
должен посылаться на тот же самый интерфейс), так что правила сетевого экрана на подделку
локальных адресов в приходящих из Интернет пакетов не нужны. В сложных случаях (ассиметричная
маршрутизация, балансировка каналов) необходимо отключить (если отключение не помогло, то отключить и в all).
Параметр /proc/sys/net/ipv4/conf/имя-интерфейса/log_martians задаёт
необходимость записи в журнал сообщений об отброшенных пакетах.
Дополнительную информацию (довольно старую) можно получить в
документации по ядру (например, ip-sysctl.txt и proc.txt) или
ipsysctl tutorial (2003),
перевод компиляции ip-sysctl.txt и ipsysctl tutorial:
- /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
- /proc/sys/net/ipv4/ip_default_ttl (64)
- /proc/sys/net/ipv4/ip_forward (включение маршрутизации)
- /proc/sys/net/ipv4/ip_local_port_range (при размере ОЗУ более 128 МБ - "32768 61000")
- /proc/sys/net/ipv4/ip_nonlocal_bind (локальные программы могут прослушивать нелокальный трафик)
- /proc/sys/net/ipv4/tcp_sack (Selective Acknowledgements)
- /proc/sys/net/ipv4/conf/имя-интерфейса/accept_redirects (принимать ICMP redirect, на внешних
интерфейсах лучше отключить)
- /proc/sys/net/ipv4/conf/имя-интерфейса/accept_source_route (принимать маршрутизацию от источника,
выключить обязательно)
- /proc/sys/net/ipv4/conf/имя-интерфейса/forwarding (отключение маршрутизации для отдельных
интерфейсов)
- /proc/sys/net/ipv4/conf/имя-интерфейса/mc_forwarding (маршрутизация групповых рассылок)
- /proc/sys/net/ipv4/conf/имя-интерфейса/proxy_arp (маршрутизатор отвечает на ARP запросы
на этом интерфейсе от имени хоста из другой сети)
- /proc/sys/net/ipv4/conf/имя-интерфейса/secure_redirects (принимать ICMP redirect только от шлюза
по умолчанию; проверить подлинность IP адреса отправителя невозможно)
- /proc/sys/net/ipv4/conf/имя-интерфейса/send_redirects
- /proc/sys/net/ipv4/conf/имя-интерфейса/shared_media (несколько IP сетей в одной физической сети)
- /proc/sys/net/ipv4/route/max_size (размер кеша маршрутов)
Разработчики так гордятся реализацией IPv6, что от неё нелегко избавиться.
Попытки вставить NETWORKING_IPV6=no в /etc/sysconfig/network и IPV6INIT=no
(IPV6TO4INIT=no) в /etc/sysconfig/network-scripts/ifcfg-eth0 не помогают.
Частично помогает команда "ip -6 addr flush dev eth0" в /etc/rc.local
("install ipv6 /bin/false" в /etc/modprobe.conf?).
Более тщательный способ.
Виртуальный ethernet интерфейс veth позволяет реализовать туннели
между пространствами имён сети и мосты с физическими интерфейсами в другом пространстве имён.
veth создаются в виде пары интерфейсов (точек входа):
# ip link add точка1 type veth peer name точка2
# ethtool -i точка1
driver: veth
# ethtool -S точка1
NIC statistics:
peer_ifindex: индекс-интерфейса-партнёра
Пакеты, передаваемые в одну точку пары, немедленно появляются из второй.
При отключении одного из интерфейсов соединение опускается.
Основным применением является размещение точек в разных пространствах имён сети для обеспечения связи между ними:
# ip link set точка2 netns имя-пространства-имён-сети2
После настройки интерфейсов, адресов и маршрутов между ними можно обмениваться пакетами.
Мост (bridge) соединяет 2 и более сегмента Ethernet
на канальном уровне, т.е. обработка пакетов (кадров) происходит на основе MAC адресов.
Можно сказать наоборот, что мост делит логическую сеть на сегменты, основываясь на
аппаратных (MAC) адресах, но оставляет один сегмент с точки зрения
широковещательных рассылок. То есть пакет, адресованный на индивидуальный адрес,
получит только этот узел, но широковещательные пакеты будут распространяться
по всей сети.
Мост (IEEE 802.1d) называется прозрачным, т.к. он работает
незаметно для сетевых адаптеров, строя адресную таблицу исходя из пассивного
наблюдения трафика. Порт моста не имеет собственного MAC адреса (интерфейсы имеют MAC адреса) и буферизует
все пакеты, приходящие на его порты. MAC адрес источника записывается в адресную
таблицу. Если MAC адрес получателя присутствует в таблице, то пакет передается
в нужный сегмент через соответствующий порт (forwarding) с подделкой (spoofing) MAC адреса отправителя.
Если при этом MAC адрес получателя приписан к тому же
порту, что и MAC адрес отправителя, то пакет фильтруется (filtering).
Если MAC адрес получателя отсутствует в таблице или он групповой или широковещательный, то пакет
рассылается по всем сегментам, кроме исходного (flooding).
Динамические элементы имеют ограниченный срок жизни, чтобы коммутатор мог
отслеживать перемещения компьютеров.
Мост можно рассматривать как виртуальный интерфейс - контейнер,
объединяющий другие интерфейсы: ethernet,
Wi-Fi, PPP, veth, VPN, VLAN и т.д.
Все интерфейсы должны иметь одинаковый MTU. Интерфейс должен иметь 6-байтный MAC адрес.
Интерфейсы переводятся в неразборчивый (promiscuous) режим.
Перед включением в мост интерфейс необходимо положить. Интерфейс может входить только в 1 мост.
В ядре 2.6 был частично реализован стандарт IEEE 802.1d в виде модуля bridge (требует модули stp, llc),
параметры отсутствуют. Поддерживается STP, не поддерживается RSTP и выше.
Поддерживаются IGMPv2 и MLDv1 (multicast). IGMPv3 и MLDPv2 поддерживаются начиная с ядра 5.10.
Мост на базе Linux используется для реализации программного коммутатора, соединяющего сегменты сети,
и для соединения виртуальных машин и контейнеров между собой и с реальной сетью.
Мост на базе Linux позволяет использовать netfilter фильтрацию пакетов iptables/arptables и кадров ebtables.
Настройки: /proc/sys/net/bridge/{bridge-nf-call-arptables,bridge-nf-call-ip6tables,bridge-nf-call-iptables,bridge-nf-filter-pppoe-tagged,bridge-nf-filter-vlan-tagged,bridge-nf-pass-vlan-input-dev}.
Управление осуществляется с помощью утилиты brctl (пакет bridge-utils) или bridge (пакет iproute).
Настройку и подъём сетевых интерфейсов необходимо делать после настройки моста.
Утилита brctl (устарело), команды:
- brctl addbr имя-интерфейса-моста # создать интерфейс типа мост (br0);
мост может иметь IP адрес для доступа к хосту: ifconfig имя-интерфейса-моста IP-адрес ... # мост поднимается
- brctl addif имя-интерфейса-моста имя-интерфейса # добавить интерфейс в качестве порта моста;
интерфейс не должен иметь IP адрес: ifconfig имя-интерфейса 0.0.0.0
- brctl delif имя-интерфейса-моста имя-интерфейса # удалить интерфейс из списка портов
- brctl delbr имя-интерфейса # удалить интерфейс типа мост; д.б. опущен
- brctl show [имя-интерфейса-моста] # показать имеющиеся интерфейсы типа мост и входящие в них интерфейсы,
идентификатор моста (минимальный MAC адрес), наличие STP
- brctl showmacs имя-интерфейса-моста # показать таблицу MAC адресов моста: номер порта, MAC адрес, локальность, время появления в таблице
- brctl setageing имя-интерфейса-моста секунд # задать время хранения MAC адресов в таблице
- brctl setgcint имя-интерфейса-моста секунд # задать интервал сбора мусора для таблицы MAC адресов
- brctl stp имя-интерфейса-моста {on|off} # выключить работу STP
- brctl setbridgeprio имя-интерфейса-моста приоритет # приоритет STP - число от 0 до 65535;
мост с минимальным приоритетом будет выбран главным
- brctl setfd имя-интерфейса-моста секунд # STP: задержка перехода моста из состояния Listening/Learning в Forwarding
по умолчанию 30 секунд, что может мешать работе DHCP
- brctl sethello имя-интерфейса-моста секунд # STP: интервал между HELLO
- brctl setmaxage имя-интерфейса-моста секунд # STP: максимальное время жизни сообщения HELLO
- brctl setpathcost имя-интерфейса-моста номер-порта стоимость # STP: стоимость прохождения через порт (определяется пропускной способностью - скоростью линии)
- brctl setportprio имя-интерфейса-моста номер-порта приоритет # STP, от 0 до 255
- brctl showstp имя-интерфейса-моста # показать состояние STP, здесь же можно увидеть соответствие имён интерфейсов и номеров портов
Убедиться, что интерфейс является мостом можно с помощью ethtool:
# ethtool -i имя-интерфейса
driver: bridge
Пример использования nmcli (интерфейс-моста br0):
nmcli connection add con-name br0 type bridge ifname br0 \
ipv4.addresses IP-адрес-хоста/24 ipv4.gateway IP-адрес-шлюза ipv4.dns IP-адрес-DNS ipv4.method manual \
autoconnect yes ipv6.method ignore
nmcli connection add type ethernet con-name имя-интерфейса-ethernet ifname имя-интерфейса-ethernet \
ipv4.addresses 0.0.0.0/24 ipv4.method manual \
autoconnect yes ipv6.method ignore
brctl addif br0 имя-интерфейса-ethernet
Пример использования /etc/sysconfig/network-scripts/ifcfg-br0 и /etc/sysconfig/network-scripts/ifcfg-имя-интерфейса-ethernet
DEVICE="br0"
BOOTPROTO="dhcp"
ONBOOT="yes"
TYPE="Bridge"
NM_CONTROLLED="no"
DEVICE=имя-интерфейса-ethernet
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
Управление интерфейсом моста через команду "ip link" (fdb - Forwarding Database; mdb - Multicast group database):
- ip link add [link интерфейс] [ name ] имя-интерфейса-моста type bridge # создание моста, опциональные параметры:
- txqueuelen пакетов
- address MAC-адрес
- broadcast MAC-адрес
- mtu байт
- index индекс-интерфейса
- numtxqueues количество-очередей
- numrxqueues количество-очередей
- netns {идентификатор-процесса | пространство-имён-сети} # пространство-имён-сети по имени или pid
- ageing_time секунд # время хранения MAC адресов в таблице
- group_fwd_mask маска # пересылать кадры с локальными адресами вида 01:80:C2:00:00:0X
- group_address MAC-адрес # локальный адрес для STP (01:80:C2:00:00:0X)
- forward_delay секунд # STP: задержка перехода моста из состояния Listening/Learning в Forwarding
- hello_time секунд # STP: интервал между HELLO
- max_age секунд # STP: максимальное время жизни сообщения HELLO
- stp_state число # состояние STP; 0 - выключено, 1 - слушает, 2 - изучает, 3 - передаёт, 4 - блокировано
- priority приоритет # приоритет STP - число от 0 до 65535;
мост с минимальным приоритетом будет выбран главным
- no_linklocal_learn число # 0 - помещать в таблицу MAC адресов из локальных (link-local) кадров
- vlan_filtering число # 0 - выключить фильтр VLAN
- vlan_protocol { 802.1Q | 802.1ad } # VLAN протокол при фильтрации
- vlan_default_pvid число # PVID по умолчанию
- vlan_stats_enabled число # 1 - статистика собирается в разрезе VLAN
- vlan_stats_per_port число # 1 - статистика собирается в разрезе портов (присоединённых интерфейсов), можно менять пока их нет
- множество параметров mcast*
- nf_call_iptables число # 1 - использовать iptables
- nf_call_ip6tables число # 1 - использовать ip6tables
- nf_call_arptables число # 1 - использовать arptables
- ip link delete dev имя-интерфейса-моста type bridge # удаление моста
- ip [-detail] [-stats [-stats]] link show [dev имя-интерфейса-моста] [up] type bridge [nomaster]
# вывести информацию о интерфейсе моста
- ip [-detail] [-stats [-stats]] link show master имя-интерфейса-моста # вывести информацию об интерфейсах, входящих в мост
- ip link set [dev] имя-интерфейса-моста type {bridge|bridge_slave} # установить опциональные параметры:
- {up | down}
- arp {on | off}
- dynamic {on | off} # не реализовано
- multicast { on | off }
- allmulticast { on | off } # извлекать все multicast пакеты для дальнейшей разборки
- promisc { on | off } # прослушивать все пакеты
- protodown { on | off } # ошибки протокола, драйвер должен отключить порт
- protodown_reason причина { on | off } # имена бит в /etc/iproute2/protodown_reasons.d/ (отсутствуют)
- trailers { on | off } # не реализовано
- txqueuelen пакетов # размер очереди
- name новое-имя-интерфейса-моста # не рекомендуется, если уже сконфигурировано
- address MAC-адрес
- broadcast MAC-адрес
- mtu байт
- netns {идентификатор-процесса | пространство-имён-сети} # пространство-имён-сети по имени или pid;
запрещено менять для моста (он всегда local)
- link-netnsid индекс-пространства-имён-сети # не для моста
- alias имя-интерфейса-моста # дополнительное имя интерфейса
- master имя-интерфейса-моста # для bridge_slave
- nomaster # освободить устройство
- macaddr # не для моста
- fdb_flush # для bridge_slave; сбросить таблицу адресов fdb
- state число # для bridge_slave; STP: состояние: 0 - отключено, 1 - слушает, 2 - изучает, 3 - передаёт, 4 - блокировано
- priority число # для bridge_slave; STP: число от 0 до 63;
будет выбран порт с минимальным приоритетом
- cost число # для bridge_slave; STP: стоимость порта; будет выбран с минимальной стоимостью
- guard { on | off } # для bridge_slave; STP: блокировать BPDU
- hairpin { on | off } # для bridge_slave; пакет с этого порта м.б. отражён обратно
- root_block { on | off } # для bridge_slave; STP: порт не может быть корневым
- learning { on | off } # для bridge_slave; MAC адреса с этого порта можно помещать в таблицу адресов fdb
- flood { on | off } # для bridge_slave; пересылать сюда все нормальные пакеты, для которых нет записи в FDB; несовместимо с proxy_arp
- proxy_arp { on | off } # для bridge_slave;
- proxy_arp_wifi { on | off } # для bridge_slave; proxy ARP для 802.11 и Hotspot 2.0
- mcast_router число # для bridge_slave; 0 - нет, 1 - определять наличие автоматически (по умолчанию),
2 - весь multicast сюда, 3 - временно весь multicast сюда
- mcast_fast_leave { on | off } # для bridge_slave; multicast
- bcast_flood { on | off } # для bridge_slave; весь широковещательный трафик сюда
- mcast_flood { on | off } # для bridge_slave; передавать весь multicast, для которого нет записи в MDB
- mcast_to_unicast { off | on } # для bridge_slave; преобразовывать multicast траффик в обычный
- group_fwd_mask маска # для bridge_slave; по умолчанию 0; какой локальный (01:80:C2:00:00:0X) трафик передавать
- neigh_suppress { off | on } # для bridge_slave; давить ARP proxy
- vlan_tunnel { off | on } # для bridge_slave; преобразование VLAN в туннель
- locked { off | on } # для bridge_slave; входящий трафик, для которого нет записи в FDB, выбрасывается
- mab { off | on } # для bridge_slave; MAC Authentication Bypass (MAB);
- backup_port интерфейс # для bridge_slave
- nobackup_port # для bridge_slave
- ip link xstats type bridge # статистика о multicast и IGMP
Утилита bridge, общие ключи:
Утилита bridge, команды (fdb - Forwarding Database; mdb - Multicast group database;
имя-интерфейса-моста нигде не упоминается; документация местами отсутствует, а местами забегает вперёд):
- bridge link set dev интерфейс # настройка портов моста (аналог "ip link set dev имя-интерфейса-моста type bridge_slave"), описание ключей см. там:
- master # настраиваем програмный мост (по умолчанию)
- self # настраиваем физический интерфейс (порт моста)
- learning_sync { on | off } # синхронизовать MAC адреса, полученные портом, с FDB моста
- hwmode {vepa|veb} # аппаратная реализация моста
- isolated { off | on } # изолированный порт может общаться только с неизолированными портами
- priority число
- cost число
- state число
- guard { on | off }
- hairpin { on | off }
- mcast_fast_leave { on | off }
- root_block { on | off }
- learning { on | off }
- flood { on | off }
- bcast_flood { on | off }
- mcast_flood { on | off }
- mcast_router число
- mcast_to_unicast { off | on }
- neigh_suppress { off | on }
- vlan_tunnel { off | on }
- locked { off | on }
- mab { off | on }
- backup_port интерфейс
- nobackup_port
- bridge link [ show ] # вывести настройки/состояние портов всех мостов;
вывод портов конкретного моста: ip link show master интерфейс-моста (заодно выводит link-netnsid)
- bridge fdb add MAC-адрес dev интерфейс-моста # добавить интерфейс с указанным MAC-адресом к указанному мосту, ключи
- local | permanent # добавить MAC адрес самого моста
- static # добавляется навсегда
- dynamic # добавляется временно как при обычном обучении
- self # настройки самого порта (интерфейса), мост не оповещается
- master # настройки моста, порт может также быть извещён
- use # адрес кем-то используется
- extern_learn # адрес быт получен внешними средствами (например, аппаратно), устаревание не работает
- sticky # адрес останется привязан к порту, несмотря на дальнейшее обучение
- настройки VXLAN
- bridge fdb append MAC-адрес dev интерфейс-моста # добавить в FDB запись с ранее известным адресом; multicast; ключи как для add
- bridge fdb delete MAC-адрес dev интерфейс-моста # удалить запись из FDB; ключи как для add
- bridge fdb replace MAC-адрес dev интерфейс-моста # заменить запись в FDB; если соответствие не найдено, то создать; ключи как для add
- bridge fdb show [br интерфейс-моста] [brport интерфейс] [vlan номер] [state состояние] # вывести таблицу FDB в соответствии с фильтром
- bridge fdb get [to] MAC-адрес [br интерфейс-моста] [{brport|dev} интерфейс] [vlan номер] # найти запись в FDB по MAC адресу и фильтру; ключи:
- self # адрес порта
- master # адрес моста
- dynamic
- bridge fdb flush dev интерфейс-моста # очистка [части] FDB, ключи:
- brport интерфейс
- vlan номер
- self # мост не оповещается
- master # мост ищется по интерфейсу порта
- [no]permanent
- [no]static
- [no]dynamic
- [no]added_by_user
- [no]extern_learn
- [no]sticky
- [no]offloaded
- bridge mdb show [ dev интерфейс-моста ] # показать таблицу MDB
- bridge mdb { add | del } dev интерфейс-моста port PORT grp GROUP {permanent | temp} # добавить или удалить адрес в MDB
- bridge vlan ... # работа с VLAN фильтрами; везде VLAN 1 PVID Egress Untagged
- bridge vni ... # работа с VXLAN
- bridge monitor [ all | neigh | link | mdb | vlan ]
/etc/NetworkManager/NetworkManager.conf
- Linux Networking concepts HOWTO (объяснение терминов)
- Linux Advanced Routing & Traffic Control (lartc, описание iproute2 и netfilter, встроенная в 2.6 реализация IPSEC; пакет ipsec-tools)
- перевод lartc
- документация из пакета iproute (ip-cref.ps, ip-tunnels.ps и др.)
- Ethernet HOWTO
- The Linux Networking Overview (2000)
- NET3-4-HOWTO (ядро 2.2, 1999)
- Network Adiministrators Guide (редакция 2) (NET-4, ядро 2.2, RH7.0, 2001)
- Network Adiministrators Guide
(NET-2/NET-3, ядро 1.0/1.2/2.0, 1996)
- TCP Tuning Guide
- Использование iproute2 при настройке Linux маршрутизатора (iproute и tc, русский)
- Объединение интерфейсов в Linux через teql
- Проблемы с очередью TIME_WAIT (net.ipv4.tcp_tw_reuse и net.ipv4.tcp_tw_recycle (сломан в 4.10 и удалён в 4.12))
- TCP TIME-WAIT state on busy Linux servers
- Mads Johannessen. Masters Thesis Autumn 2015. Investigate reordering in Linux TCP
- Прокачиваем сетевой стек для iSCSI (net.core.somaxconn, net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_reordering, net.ipv4.tcp_rmem, net.ipv4.tcp_wmem, net.ipv4.tcp_mem, net.ipv4.tcp_window_scaling, net.ipv4.tcp_sack, net.ipv4.tcp_fack, net.ipv4.tcp_timestamps, net.ipv4.tcp_low_latency)
- NetworkManager Documentation for administrators
- An introduction to Linux bridging commands and features
|
Bog BOS: Настройка TCP/IP в Linux
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru