txqueuelen 1000 ethernet что это

Большие потоки трафика и Linux: прерывания, маршрутизатор и NAT-сервер

В нашей городской сети более 30 тысяч абонентов. Суммарный объем внешних каналов — более 3 гигабит. А советы, данные в упомянутой статье, мы проходили еще несколько лет назад. Таким образом, я хочу шире раскрыть тему и поделиться с читателями своими наработками в рамках затрагиваемого вопроса.

В заметке описываются нюансы настройки/тюнинга маршрутизатора и NAT-сервера под управлением Linux, а также приведены некоторые уточнения по поводу распределения прерываний.

Прерывания

Раскидывание прерываний сетевых карт по разным ядрам — это самое первое, с чем сталкивается сисадмин при возрастании нагрузки на linux-маршрутизатор. В упомянутой статье тема освещена достаточно подробно — поэтому надолго останавливаться на этом вопросе мы не будем.

Хочу только отметить:

Маршрутизатор

В первоначальной статье есть фраза «если сервер работает только маршрутизатором, то тюнинг TCP стека особого значения не имеет». Это утверждение в корне неверно. Конечно, на небольших потоках тюнинг не играет большой роли. Однако, если у вас большая сеть и соответствующая нагрузка — то тюнингом сетевого стека вам придется заняться.

Прежде всего, если по вашей сети «гуляют» гигабиты, то имеет смысл обратить свое внимание на MTU на ваших серверах и коммутаторах. В двух словах, MTU — это объем пакета, который можно передать по сети, не прибегая к его фрагментации. Т.е. сколько информации ваш один маршрутизатор может передать другому без фрагментирования. При значительном увеличении объемов передаваемых по сети данных, гораздо эффективнее передавать пакеты большего объема реже, — чем часто-часто пересылать мелкие пакеты данных.

Увеличиваем MTU на linux

/sbin/ifconfig eth0 mtu 9000

Увеличиваем MTU на коммутаторах

На коммутационном оборудовании обычно это будет называться jumbo-frame. В частности, для Cisco Catalyst 3750

3750(config)# system mtu jumbo 9000
3750(config)# exit
3750# reload

Заметьте: коммутатор затем надо перезагрузить. Кстати, mtu jumbo касаются только гигабитных линков, — 100-мбит такая команда не затрагивает.

Увеличиваем очередь передачи на linux

/sbin/ifconfig eth0 txqueuelen 10000

По умолчанию значение стоит 1000. Для гигабитных линков рекомендуется ставить 10000. В двух словах, это размер буфера передачи. Когда буфер наполняется до этого граничного значения, данные передаются в сеть.

Имейте ввиду, что если вы меняете размер MTU на интерфейсе какой-то железки — вы должны сделать то же самое и на интерфейсе её «соседа». Т.е., если вы увеличили MTU до 9000 на интерфейсе linux-роутера, то вы должны включить jumbo-frame на порту коммутатора, в который данный роутер включен. В противном случае сеть работать будет, но очень плохо: пакеты ходить по сети будут «через одного».

Итоги

В результате всех этих изменений, в сети возрастут «пинги» — но общая пропускная способность заметно возрастет, а нагрузка на активное оборудование снизится.

Сервер NAT

Операция NAT (Network Address Translation) является одной из самых дорогостоящих (в смысле, ресурсоёмких). Поэтому, если у вас большая сеть, без тюнинга NAT-сервера вам не обойтись.

Увеличение кол-ва отслеживаемых соединений

Для осуществления своей задачи, NAT-серверу необходимо «помнить» обо всех соединениях, которые через него проходят. Будь то «пинг» или чья-то «аська» — все эти сессии NAT-сервер «помнит» и отслеживает у себя в памяти в специальной таблице. Когда сессия закрывается, информация о ней из таблицы удаляется. Размер этой таблицы фиксирован. Именно поэтому если трафика через сервер идет достаточно много, а размера таблицы нехватает, — то NAT-сервер начинает «дропать» пакеты, рвать сессии, интернет начинает работать с жуткими перебоями, а на сам NAT-сервер бывает даже попасть по SSH становится просто невозможно.

Чтобы таких ужасов не происходило, необходимо адекватно увеличивать размер таблицы — в соответствии с проходящим через NAT трафиком:

Настоятельно НЕ рекомендуется ставить такое большое значение, если у вас на NAT-сервере меньше 1 гигабайта оперативной памяти.

Посмотреть текущее значение можно вот так:

Посмотреть, насколько уже заполнена таблица отслеживания соединений, можно вот так:

Увеличение размера hash-таблицы

Пропорционально должная быть увеличена и хэш-таблица, в которой хранятся списки conntrack-записей.

echo 65536 > /sys/module/nf_conntrack/parameters/hashsize

Правило простое: hashsize = nf_conntrack_max / 8

Уменьшение значений time-out

Как вы помниите, NAT-сервер отслеживает только «живые» сессии, которые через него проходят. Когда сессия закрывается — информация о ней удаляется, дабы таблица не переполнялась. Информация о сессиях удаляется так же по тайм-ауту. Т.е., если втечение долгого времени в рамках соединения обмена траифка нет — оно закрывается и информация о нем так же удаляется из памяти NAT-а.

Однако, по умолчанию значения тайм-аутов стоят достаточно большие. Поэтому, при больших потоках трафика даже если вы растянете nf_conntrack_max до предела — вы все равно рискуете быстро столкнуться с переполнением таблицы и разрывами соединений.

Читайте также:  Что такое ключ в вышивке

Чтобы такого не произошло, необходимо грамотно выставить тайм-ауты отслеживания соединений на NAT-сервере.

Текущие значения можно посмотреть, например, так:

В результате вы увидите что-то подобное:

net.netfilter.nf_conntrack_generic_timeout = 600
net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
net.netfilter.nf_conntrack_tcp_timeout_established = 432000
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close = 10
net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
net.netfilter.nf_conntrack_udp_timeout = 30
net.netfilter.nf_conntrack_udp_timeout_stream = 180
net.netfilter.nf_conntrack_icmp_timeout = 30
net.netfilter.nf_conntrack_events_retry_timeout = 15

Это значения тайм-аутов в секундах. Как вы видите, значение net.netfilter.nf_conntrack_generic_timeout равно 600 (10 минут). Т.е. NAT-сервер будет держать в памяти информацию о сессии до тех пор, пока по ней будет «пробегать» хоть что-то хотя бы раз в 10 минут.

На первый взгляд, ничего страшного — но на самом деле это очень и очень много.

Если вы посмотрите на net.netfilter.nf_conntrack_tcp_timeout_established — то вы увидите там значение 432000. Другими словами, простую TCP-сессию ваш NAT-сервер будет отслеживать до тех пор, пока по ней не пробегает какой-нибудь пакетик хотя бы раз в 5 дней(!).

Говоря еще более простым языком, за-DDOS’ить такой NAT-сервер становится проще простого: его NAT-таблица (параметр nf_conntrack_max) переполняется «на ура» простейшим флудом — вследствие чего он будет рвать соединения и в худшем варианте быстро превратится в черную дыру.

Значения тайм-аутов рекомендуется ставить в пределах 30-120 секунд. Этого вполне достаточно для нормальной работы абонентов, и этого вполне хватит для своевременной очистки NAT-таблицы, исключающей её переполнение.

И не забудьте вписать соответствующие изменения в /etc/rc.local и /etc/sysctl.conf

Итоги

После тюнинга вы получите вполне жизнеспособный и производительный NAT-сервер. Конечно же, это только «базовый» тюнинг — мы не касались, например, тюнинга ядра и т.п. вещей. Однако, в большинстве случаев даже таких простых действий будет достаточно для нормальной работы достаточно большой сети. Как я уже говорил, в нашей сети более 30 тыс. абонентов, трафик которых обрабатывают 4 NAT-сервера.

Источник

15 полезных команд «ifconfig» для настройки сетевого интерфейса в Linux

ifconfig это сокращение от “interface configuration” (конфигурация интерфейса), утилита для системного/сетевого администрирования в операционных системах Unix/Linux для конфигурирования, управления и запроса параметров сетевого интерфейса через интерфейс командной строки или в скриптах конфигурации системы.

Команда «ifconfig» используется для отображения текущей информации о конфигурации сети, настройки ip-адреса, маски сети или широковещательного адреса для сетевого интерфейса, создания алиаса для сетевого интерфейса, настройки аппаратного адреса, а также включения или отключения сетевых интерфейсов.

В этой статье мы рассмотрим «15 полезных команд «ifconfig»» с их практическими примерами, которые могут быть очень полезны при управлении и настройке сетевых интерфейсов в системах Linux.

Важно: сетевая команда ifconfig устарела и заменена командой ip в большинстве дистрибутивов Linux.

1. Просмотр всех настроек сетевого интерфейса

Команда «ifconfig» без аргументов отобразит подробную информацию обо всех активных интерфейсах. Команда ifconfig также используется для проверки IP-адреса сервера.

2. Отображение информации обо всех сетевых интерфейсах

Следующая команда ifconfig с аргументом -a отобразит информацию обо всех активных или неактивных сетевых интерфейсах на сервере. Она отображает результаты для eth0, lo, sit0 и tun0.

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

Using interface name (eth0) as an argument with the “ifconfig” command will display details of the specific network interface.

Использование имени интерфейса (eth0) в качестве аргумента в команде «ifconfig» отобразит подробную информацию о данном сетевом интерфейсе.

4. Как включить сетевой интерфейс

Флаг «up» или «ifup» с именем интерфейса (eth0) активирует сетевой интерфейс, если он не находится в неактивном состоянии и позволяет отправлять и получать информацию. Например, «ifconfig eth0 up» или «ifup eth0» активирует интерфейс eth0.

5. Как отключить сетевой интерфейс

Флаг «down» или «ifdown» с именем интерфейса (eth0) выключает указанный сетевой интерфейс. Например, команда «ifconfig eth0 down» или «ifdown eth0» деактивирует интерфейс eth0, если он находится в активном состоянии.

6. Как назначить IP-адрес сетевому интерфейсу

Чтобы назначить IP-адрес определенному интерфейсу, используйте следующую команду с именем интерфейса (eth0) и ip-адресом, который вы хотите установить. Например, «ifconfig eth0 172.16.25.125» назначит IP-адрес интерфейсу eth0.

7. Как назначить маску сети для сетевого интерфейса?

Использование команды «ifconfig» с аргументом «netmask» и именем интерфейса в виде (eth0) позволяет задать маску сети для данного интерфейса. Например, «ifconfig eth0 netmask 255.255.255.224» установит сетевую маску для данного интерфейса eth0.

Читайте также:  sodium bicarbonate в зубной пасте что это

8. Как назначить широковещательный адрес на сетевом интерфейсе?

Использование аргумента «broadcast» с именем интерфейса установит широковещательный адрес для данного интерфейса. Например, команда «ifconfig eth0 broadcast 172.16.25.63» устанавливает широковещательный адрес для интерфейса eth0.

9. Как назначить сетевому интерфейсу IP, маску подсети и широковещательный адрес?

Чтобы назначить IP-адрес, адрес подсети и широковещательный адрес одновременно, используйте команду «ifconfig» со всеми аргументами, приведенными ниже.

10. Как изменить MTU для сетевого интерфейса?

Аргумент «mtu» задает максимальный блок передачи для интерфейса. MTU позволяет установить предельный размер пакетов, передаваемых на интерфейсе. MTU способен обрабатывать максимальное количество октетов на интерфейсе за одну операцию.

Например, «ifconfig eth0 mtu 1000» установит максимальную единицу передачи на заданный набор (т.е. 1000). Не все сетевые интерфейсы поддерживают настройки MTU.

11. Как включить режим Promiscuous?

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

Современные сетевые инструменты используют режим promiscuous для захвата и анализа пакетов, проходящих через сетевой интерфейс. Чтобы установить режим promiscuous, используйте следующую команду.

12. Как отключить режим Promiscuous Mode?

Чтобы отключить режим promiscuous, используйте аргумент «-promisc«, который возвращает сетевой интерфейс в обычный режим.

13. Как добавить алиас в сетевой интерфейс?

The ifconfig utility allows you to configure additional network interfaces using the alias feature. To add the alias network interface of eth0, use the following command. Please note that the alias network address is in the same subnet mask. For example, if your eth0 network ip address is 172.16.25.125, then the alias ip address must be 172.16.25.127.

Утилита ifconfig позволяет настраивать дополнительные сетевые интерфейсы с помощью функции alias. Чтобы добавить alias сетевого интерфейса eth0, используйте следующую команду. Обратите внимание, что сетевой адрес псевдонима находится в той же маске подсети. Например, если ip-адрес сети eth0172.16.25.125, то ip-адрес псевдонима должен быть 172.16.25.127.

Затем проверьте только что созданный alias сетевого интерфейса, используя команду «ifconfig eth0:0«.

14. Как удалить алиас для сетевого интерфейса?

Если вам больше не нужен alias или вы неправильно его настроили, вы можете удалить его с помощью следующей команды.

15. Как изменить MAC-адрес сетевого интерфейса?

Чтобы изменить MAC-адрес (Media Access Control) сетевого интерфейса eth0, используйте следующую команду с аргументом «hw ether«. Пример, см. ниже.

Это наиболее полезные команды для конфигурирования сетевых интерфейсов в Linux, для получения дополнительной информации об использования команды ifconfig используйте manpages, набрав «man ifconfig» в терминале.

Источник

Настройка сети в Linux

Введение

Настройка сети это одно из самых частых действий администратора Linux

Это статья общего характера. Смотрите также статьи

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

Изучить файл с перечнем задействованных интерфейсов можно с помощью команды

Далее настройка зависит от версии Linux, которую Вы используете.

Если Вам нужно настроить сеть на старой версии Debian с помощью утилит ifconfig пролистайте страницу вниз или перейдите по ссылке

Настройка сети с помощью Iproute2

Актуально для Debian 9 и выше.

Чтобы получить список интерфейсов нужно воспользоваться командой

На выходе будет что-то похожее на

1: lo : 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: enp3s0 :
mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 30:f9:ed:d9:ea:d3 brd ff:ff:ff:ff:ff:ff inet 192.0.2.131/24 brd 192.0.2.255 scope global enp3s0 valid_lft forever preferred_lft forever inet6 fe80::32f9:edff:fed9:ead3/64 scope link valid_lft forever preferred_lft forever 3: wlp1s0 :
mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether b8:76:3f:f5:c4:1f brd ff:ff:ff:ff:ff:ff inet 192.168.43.4/24 brd 192.168.43.255 scope global dynamic noprefixroute wlp1s0 valid_lft 2800sec preferred_lft 2800sec inet6 fe80::ba76:3fff:fef5:c41f/64 scope link noprefixroute valid_lft forever preferred_lft forever

1: Первый интерфейс это lo он направлен на локальную машину и имеет IP 127.0.0.1/8

2: Второй интерфейс enp3s0 это моё поключение к по Ethernet к другому ПК.

В этом примере компьютер с Debian (1) соединён с компьютером с Windows (2) напрямую через Ethernet кабель

Через это подключение я захожу на комп номер 1 по SSH.

Как настроить этот IP читайте дальше

3: Третий интефейс wlp1s0 это подключение к местному Wi-Fi от мобильного телефона. IP получен динамически 192.168.43.4/24

Читайте также:  адмиралтейские верфи что это

Как установить статический IP

Чтобы подлкючиться к другому компьютеру через Ethernet нужно в Windows выставить параметры адаптера через контольную панель. То же самое нужно было сделать и в Linux.

Для этого нужно выполнить команду

sudo vi /etc/network/interfaces

auto enp3s0 iface enp3s0 inet static address 192.0.2.131 netmask 255.255.255.0 dns-nameservers 8.8.8.8,8.8.4.4 auto wlp1s0 iface wlp1s0 inet dhcp

Обратите внимание, что gateway не указан.

И перезапустить сеть

sudo service networking restart

Второй вариант проще запомнить, но, чтобы он заработал нужно наличие service

Теперь если у Вас установлен SSH можно зайти на компьютер с Linux по ssh с помощью Putty или MobaXterm

Если нужно установить SSH выполните

sudo apt install openssh-server

sudo apt-get install openssh-client

Включить / Выключить сетевой интерфейс

ВКЛЮЧИТЬ интерфейс enp0s25:

ip link set dev enp0s25 up

ВЫКЛЮЧИТЬ интерфейс enp0s25:

ip link set dev enp0s25 down

Изменить Gateway

Удаление старого gateway

route delete default

Добавление нового gateway

route add default gw IP_Address

Если старых gateway много, то нужно указать какой конкретно IP с какого интерфейса удалить

route delete default gw 10.0.0.1 eth0

Для создания тоже можно указать конкретные данные

route add default gw 192.168.0.1 eth0

Изменить netmask

Что такое netmask или маска подсети вы можете узнать в статье «Компьютерные сети»

default via 10.6.0.1 dev eth0
10.6.0.0/8 dev eth0 src 10.6.1.68

ip address del 10.6.1.100/8 dev eth0

ip address add 10.6.1.68/22 dev eth0

Прослушиваемые порты

Утилита lsof позволяет посмотреть все открытые в системе соединения.

Чтобы изучить именно сетевые соединения воспользуйтесь опцией i

Чтобы отображались именно порты, а не названия сетевых служб примените опцию P

На вопрос как посмотреть список открытых портов также может ответить утилита ss

Если нужно проверить используется ли определённый порт, например 5000

Если вывод пуст, значит порт не используется

Чтобы узнать какая программа слушает определённый порт нужно предварительно установить один из инструментов:

netstat, fuser или lsof

Netstat

sudo apt install net-tools

С помощью команды netstat можно посмотреть список активных соединений по сети

Обычно netstat используют с набором опций tulpn который и позволяет понять какая программа слушает какой порт.

Настройка сети с помощью ifconfig

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

iface eth0 inet dhcp

Если нужно задать статический ip

iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0

Чтобы изменения пришли в силу нужно выполнить

ifconfig wlan0 down

ifconfig eth0 up/down

Перезапустить/остановить/запустить сетевые службы

Настроить DNS можно через файл /etc/resolv.conf

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

В старых версиях Dbian это было просто, они назывались eth0, eth1 и так далее.

Поэтому для включения сетевого интерфейса, в приведённой выше команде нужно менять 0 на 1 и т.д.

В новых версиях Debian и в других Unix-подобных дистрибутивах, например OpenBSD сетевые интерфейсы называются более разнообразно (msk0, sk0 и др.)

Включить автоматическое получение ip

Выключить автоматическое получение ip можно вытащив сетевой шнур и вставив обратно. Говорят, что должно сброситься.

iftop

Мониторить объём входящего и исходящего траффика на определённом интерфейсе можно командой

Источник

Команда ifconfig — синтаксис и примеры

Для обмена данными между хостами от одного компьютера к другому используется технология, которая называется ethernet. Чтобы обмен данными стал возможен, как минимум необходимо настроить сеть между двумя устройствами.

Установка

Сейчас все больше дистрибутивов linux отказываются от установки утилиты ifconfig по умолчанию. Поэтому чтобы ее использовать нужно предварительно установить. Это связано с тем что вышла более новая команда «ip» и ifconfig считается устаревшей утилитой, однако пользователи линукс уже привыкли использовать ее и выучили некоторые параметры этой команды.

Чтобы определить установлена ли сетевая утилита достаточно ввести ее название без аргументов.

Утилита не установлена, если оболочка командной строки выдаст одно из сообщений:

Сама утилита входит в пакет «net-tools», поэтому устанавливать нужно этот пакет.

ВАЖНО! Не надо писать apt «install ifconfig» программа не установится.

Установка на Centos:
yum install net-tools

На Ubuntu:
apt install net-tools

apt install net-tools

Синтаксис

ifconfig ключи interface параметры команда

Под интерфейсом понимается его название. Например eth0, eth1, eth2, eth3.

Примеры

Запустим команду без параметров.

Как видно на скриншоте выше команда без ключей покажет информацию о всех включенных интерфейсах.

Выключим interface lo.

Чтобы включить обратно lo выполним:

Покажем конфигурацию только интерфейса eth0.

Чтобы назначить сетевому адаптеру IP-адрес 192.168.20.2, необходимо написать название команды, interface и сам IP.

Источник

Информ портал о технике и не только