Loopback linux что это

Обновлено: 05.07.2024

Если взять кусок патч-корда и воткнуть оба хвоста в один коммутатор, то получится петля. И в целом петля на порте коммутатора или сетевой карты — зло. Но если постараться, то и этому явлению можно найти полезное применение, например сделать сигнализацию с тревожной кнопкой.

  • Rx и Tx — обозначения Receive и Transmit на схемах (приём и передача).
  • Loop — англ. петля, контур, шлейф, виток, спираль.

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

Коммутаторы являются основными компонентами большинства проводных сетей. Управляемые коммутаторы делят сеть на отдельные логические подсети, ограничивают доступ из одной подсети в другую и устраняют ошибки в сети (коллизии).

Петли, штормы и порты — это не только морские термины. Петлей называют ситуацию, когда устройство получает тот же самый сигнал, который отправляет. Представь, что устройство «кричит» себе в порт: «Я здесь!» — слушает и получает в ответ: «Я здесь!». Оно по-детски наивно радуется: есть соседи! Потом оно кричит: «Привет! Лови пакет данных!» — «Поймал?» — «Поймал!» — «И ты лови пакет данных! Поймал?» — «Конечно, дружище!»

Вот такой сумасшедший разговор с самим собой может начаться из-за петли на порте коммутатора.

Такого быть не должно, но на практике петли по ошибке или недосмотру возникают сплошь и рядом, особенно при построении крупных сетей. Кто-нибудь неверно прописал марштуры и хосты на соседних коммутаторах, и вот уже пакет вернулся обратно и зациклил устройство. Все коммутаторы в сети, через которые летают пакеты данных, начинает штормить. Такое явление называется широковещательным штормом (broadcast storm).

Меня удивил случай, когда установщик цифрового телевидения вот так подсоединил патч-корд (рис. 1). «Куда-то же он должен быть воткнут. » — беспомощно лепетал он.

Рис. 1. Синий свитч с петлей на борту

Рис. 1. Синий свитч с петлей на борту

Однако не всё так страшно. Почти в каждом приличном коммутаторе есть функция loop_detection, которая защищает устройство и его порт от перегрузок в случае возникновения петли.

Настраиваем коммутаторы

Перед тем как начинать настройку, необходимо установить физическое соединение между коммутатором и рабочей станцией.

Существует два типа кабельных соединений для управления коммутатором: соединение через консольный порт (если он имеется у устройства) и через порт Ethernet (по протоколу Telnet или через web-интерфейс). Консольный порт используется для первоначального конфигурирования коммутатора и обычно не требует настройки. Для того чтобы получить доступ к коммутатору через порт Ethernet, устройству необходимо назначить IP-адрес.

Настройка DLink DES-3200

Для того чтобы подключиться к НТТР-серверу, необходимо выполнить перечисленные ниже действия с использованием интерфейса командной строки.

    Назначить коммутатору IP-адрес из диапазона адресов твоей сети с помощью следующей команды:

Управляемые коммутаторы D-Link имеют консольный порт, который с помощью кабеля RS-232, входящего в комплект поставки, подключается к последовательному порту компьютера. Подключение по консоли иногда называют подключением Out-of-Band. Его можно использовать для установки коммутатора и управления им, даже если нет подключения к сети.

После подключения к консольному порту следует запустить эмулятор терминала (например, программу HyperTerminal в Windows). В программе необходимо задать следующие параметры:

При соединении коммутатора с консолью появится окно командной строки. Если оно не появилось, нажми Ctrl+r , чтобы обновить окно.

Например, если надо узнать синтаксис команды config, введи в командной строке:

Далее можно ввести «?» или нажать кнопку Enter. На экране появится список всех возможных способов завершения команды. Лично я для вывода этого списка на экран пользуюсь клавишей TAB.

Базовая конфигурация коммутатора

При создании конфигурации коммутатора прежде всего необходимо обеспечить защиту от доступа к нему неавторизованных пользователей. Самый простой способ обеспечения безопасности — создание учетных записей для пользователей с соответствующими правами. Для учетной записи пользователя можно задать один из двух уровней привилегий: Admin или User. Учетная запись Admin имеет наивысший уровень привилегий. Создать учетную запись пользователя можно с помощью следующих команд CLI:

После этого на экране появится приглашение для ввода пароля и его подтверждения: «Enter a case-sensitive new password». Максимальная длина имени пользователя и пароля составляет 15 символов. После успешного создания учетной записи на экране появится слово Success. Ниже приведен пример создания учетной записи с уровнем привилегий Admin:

Шаг второй. Чтобы коммутатором можно было удаленно управлять через web-интерфейс или Telnet, коммутатору необходимо назначить IP-адрес из адресного пространства сети, в которой планируется использовать устройство. IP-адрес задается автоматически с помощью протоколов DHCP или BOOTP или статически с помощью следующих команд CLI:

Здесь xxx.xxx.xxx.xxx — IP-адрес, yyy.yyy.yyy.yyy. — маска подсети, System — имя управляющего интерфейса коммутатора.

Шаг третий. Теперь нужно настроить параметры портов коммутатора. По умолчанию порты всех коммутаторов D-Link поддерживают автоматическое определение скорости и режима работы (дуплекса). Но иногда автоопределение производится некорректно, в результате чего требуется устанавливать скорость и режим вручную.

Для установки параметров портов на коммутаторе D-Link служит команда config ports. Ниже я привел пример, в котором показано, как установить скорость 10 Мбит/с, дуплексный режим работы и состояние для портов коммутатора 1–3 и перевести их в режим обучения.

Команда show ports <список портов> выводит на экран информацию о настройках портов коммутатора.

Шаг четвертый. Сохранение текущей конфигурации коммутатора в энергонезависимой памяти NVRAM. Для этого необходимо выполнить команду save:

Шаг пятый. Перезагрузка коммутатора с помощью команды reboot:

Будь внимателен! Восстановление заводских настроек коммутатора выполняется с помощью команды reset.

А то я знал одного горе-админа, который перезагружал коммутаторы командой reset, тем самым стирая все настройки.

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

Но сегодня мы хотим применить loopback во благо. У такого включения есть замечательное свойство. Если на порте коммутатора имеется петля, устройство считает, что к нему что-то подключено, и переходит в UP-состояние, или, как еще говорят, «порт поднимается». Вот эта-то фишка нам с тобой и нужна.

Loopback

Loop — это аппаратный или программный метод, который позволяет направлять полученный сигнал или данные обратно отправителю. На этом методе основан тест, который называется loopback-тест. Для его выполнения необходимо соединить выход устройства с его же входом. Смотри фото «loopback-тест». Если устройство получает свой собственный сигнал обратно, это означает, что цепь функционирует, то есть приемник, передатчик и линия связи исправны.

Устраиваем аппаратную петлю

Устроить обратную связь очень просто: соединяется канал приема и передачи, вход с выходом (Rx и Tx).

Таблица 1. Распиновка RJ45

Таблица 1. Распиновка RJ45

Обожми один конец кабеля стандартно, а при обжиме второго замкни жилы 2 и 6, а также 1 и 3. Если жилы имеют стандартную расцветку, надо замкнуть оранжевую с зеленой, а бело-оранжевую с бело-зеленой. Смотри рис. 3.

Нумерация контактов RJ-45

Нумерация контактов RJ-45

Теперь, если воткнешь такой «хвостик» в порт коммутатора или в свою же сетевую карту, загорится зелёненький сигнал link. Ура! Порт определил наше «устройство»!

Красная кнопка, или Hello world

Ну куда же без Hello world? Каждый должен хоть раз в жизни вывести эти слова на экран монитора! Сейчас мы с тобой напишем простейший обработчик событий, который будет срабатывать при замыкании красной кнопки. Для этого нам понадобятся только кнопка с двумя парами контактов, работающих на замыкание, витая пара и коннектор. На всякий случай приведу схему красной кнопки (рис. 4).

Схема красной кнопки

Схема красной кнопки

Паяльник в руках держать умеешь? Соединяем так, чтобы одна пара контактов замыкала оранжевую жилу с зеленой, а другая — бело-оранжевую с бело-зеленой. На всяких случай прозвони соединение мультиметром.

Все, теперь можно тестировать. Вставь обжатую часть в порт сетевой карты или в порт коммутатора. Ничего не произошло? Хорошо. Нажми кнопку. Линк поднялся? Замечательно!

Сама красная кнопка

Сама красная кнопка

Вот листинг простейшего обработчика Hello World на Cshell:

Скрипт запускается с помощью следующей строки:

Сигнализация обрыва витой пары

Я решил собрать аппаратную петлю после того, как в моей локальной сети украли несколько мешков витой пары. Встал серьезный вопрос: как мониторить витую пару?

Идея проста: надо проложить витую пару от коммутатора до подъезда и на конце замкнуть её в петлю. Это будет «растяжка», при обрыве которой исчезнет линк на порте коммутатора. Останется написать обработчик, который бы «трубил во все трубы», что линк исчез, то есть витую пару кто-то разрезал.

Чуть не забыл! В конфигурации коммутатора необходимо снять защиту loop_detection с порта, на котором установлена «растяжка».

Создавать сетевые интерфейсы в linux нам позволяют различные модули ядра. Но там, где для реальных железных сетевых карт эти модули ядра, или как их еще называют - драйверы, обеспечивают прием данных от стека TCP/IP и их формирование уже в виде электрического сигнала на сетевой карте, драйверы виртуальных сетевых интерфейсов (loopback) могут лишь, приняв эти данные, отдать их какому-нибудь приложению для дальнейшей обработки. Такая функциональность может быть востребована, если на вашем сервере установлены программы, использующие стек TCP/IP для обмена данными и, понятно, не нуждающиеся в выводе этих данных в реальную сеть. Пример: веб-сайт на drupal связывается с базой данных, установленной на этом же сервере:


Другим распростаренным примером использования виртуальных сетевых интерфейсов (loopback) в linux может быть их использование для целей построения виртуальных частных сетей - VPN. Вы наверняка слышали о таких технологиях как OpenVPN, GRE, WireGuard и т.д. Каждый из этих демонов создает виртуальный сетевой интерфейс который служит для прозрачной маршрутизации данных между узлами, находящимися на удалении друг от друга и не имеющих возможности прямого взаимодействия. Рассмотрим общую сетевую топологию на примере OpenVPN:


От используемого драйвера зависит тип интерфейса, его скорость, допустимый размер MTU и т. д. Совсем даже не обязательно, что загружать драйвер в ядро вам придется самостоятельно. Скорее всего, создавая интерфейс нужного типа, система сама подберет и загрузит требуемый драйвер. Вам лишь останется сконфигурировать уже работающий loopback интерфейс. В данной статье мы рассмотрим 3 возможных на конец 2016 года типа виртуальных интерфейсов в linux: tun, tap и dummy. Отличие интерфейсов tun и tap заключается в том, что tap старается больше походить на реальный сетевой интерфейс, а именно он позволяет себе принимать и отправлять ARP запросы, обладает MAC адресом и может являться одним из интерфейсов сетевого моста, так как он обладает полной поддержкой ethernet - протокола канального уровня (уровень 2). Интерфейс tun этой поддержки лишен, поэтому он может принимать и отправлять только IP пакеты и никак не ethernet кадры. Он не обладает MAC-адресом и не может быть добавлен в бридж. Зато он более легкий и быстрый за счет отсутствия дополнительной инкапсуляции и прекрасно подходит для тестирования сетевого стека или построения виртуальных частных сетей (VPN). Виртуальный интерфейс типа dummy очень похож на tap, разница лишь в том, что он реализуется другим модулем ядра.

Создаем виртуальный интерфейс в linux вручную

Создавать и удалять интерфейсы, назначать IP и MAC адреса, изменять MTU и многое другое нам помогает утилита ip. Пользоваться ip удобно и легко, но помните, что произведенные изменения будут потеряны после перезагрузки компьютера. Используйте ip в целях тестирования.

Создаем интерфейс типа tun

ip tuntap add dev tun0 mode tun
ip address add 192.168.99.1/30 dev tun0
ip address show tun0
2: tun0: <POINTOPOINT,MULTICAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 500
link/none
inet 192.168.99.1/30 scope global tun0
valid_lft forever preferred_lft forever

Как видим у нас теперь есть виртуальный интерфейс с именем "tun0", у него есть IP-адрес, и ни слова о MAC-адресе - всё, как мы и рассчитывали. Его уже можно пинговать, и на нем уже можно запускать слушающие сервисы. Но что будет, если мы попытаемся добавить этот интерфейс в бридж?

ip link set dev tun0 master br0
RTNETLINK answers: Invalid argument

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

Создаем интерфейс типа tap

ip tuntap add dev tap0 mode tap
ip address add 192.168.99.5/30 dev tap0
ip address show tap0
3: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether d6:1c:67:cd:6f:80 brd ff:ff:ff:ff:ff:ff
inet 192.168.99.5/30 scope global tap0
valid_lft forever preferred_lft forever

У нас теперь появился новый виртуальный интерфейс с именем "tap0", у него есть как IP-адрес, так и MAC-адреса. Его также можно пинговать, и на нем также можно запускать слушающие сервисы. Команда, добавляющая интерфейс в бридж уже не выдаст ошибку, потому что это интерфейс, обладающий поддержкой ethernet:

ip link set dev tap0 master br0

Создаем интерфейс типа dummy

ip link add dev dum0 type dummy
ip address add 192.168.99.9/30 dev dum0
ip address show dum0
4: dum0: <BROADCAST,NOARP> mtu 1500 qdisc noop master br0 state DOWN group default qlen 1000
link/ether 1a:37:3b:0f:da:be brd ff:ff:ff:ff:ff:ff
inet 192.168.99.9/30 scope global dum0
valid_lft forever preferred_lft forever

Вы наверняка заметили, что команда для добавления интерфейса изменилась. Ничего необычного. Так написана утилита "ip". Ну и конечно, виртуальный интерфейс типа dummy можно легко добавить в бридж:

ip link set dev dum0 master br0

Создаем виртуальный интерфейс в linux с помощью systemd-networkd

В systemd-networkd за создание интерфейсов отвечают одни конфигурационные файлы, имеющие суффикс ".netdev", а за их настройку другие, имеющие суффикс ".network". Соответственно нам понадобиться в /etc/systemd/network создать по паре конфигурационных файлов для каждого из исследуемых типов интерфейсов

Создаем интерфейс типа tun

[NetDev]
Name=tun0
Kind=tun

Создаем интерфейс типа tap

[NetDev]
Name=tap0
Kind=tap

Создаем интерфейс типа dummy

[NetDev]
Name=dum0
Kind=dummy

Стоит отметить, что если вы планируете маршрутизировать траффик через виртуальные интерфейсы ( а, используя их для цели создания виртуальных частных сетей (VPN), вы точно этого хотите), то в конфигурационный файл в секии "Network" следует добавить диррективу "IPForward=yes".

Собственно как создать 2 loopback интерфейса? алиасы (lo:1) не предлагать. Дистрибутивы debian centos ubuntu.



в линуксе емнип никак


человеки подсказали копать в направлении dummy интерфейса. Пока результата у меня никакого


я года два или около того назад занимался этим вопросом, и емнип там даже в сорцах такого не предусмотрено



спасибо, tun/tap как и алиасы на loopback являются выходом. Но хочу создать loopbackи


я попробую. Если что путное получится - напишу тут.

Поясните, вам для чего? Вообще-то tap0 это более интерфейс чем алиас к лупбаку, по меньшей мере у него свой MAC.

копать в направлении dummy интерфейса. Пока результата у меня никакого

modprobe dummy
ifconfig dummy0 127.0.0.2


1) Алиасы на loopback через ifconfig
2) Алиасы на loopback через iproute2(новый интерфейс создан при этом не будет)
3) dummy-интерфейс
4) tun-интерфейс
5) veth-интерфейс

Есть еще MACVLAN/MACVTAP, но я с ними сам не работал, поэтому х его з, да и они для другого.

Pinkbyte ★★★★★ ( 14.08.12 11:06:01 )
Последнее исправление: Pinkbyte 14.08.12 11:06:17 (всего исправлений: 1)


В общем я не нашел как сделать несколько loopback интерфейсов ни в centos, ни в debian ни в ubuntu. Вроде действительно нельзя.


Спасибо, но это не то. Интересовали именно loopback интерфейсы. Если что, то dummy интерфейсов можно сделать много, например для 40 (modprobe dummy numdummies=40)


Спасибо. У меня есть богатый выбор виртуальных интерфейсов. Но создать 2 loopback интерфейса все-таки в linux на ядре 2.6.32 наверное нельзя.


Например, возможность использовать нестандартный широковещательный адрес IPv4 sudo ip addr add 192.0.2.1/24 broadcast 192.0.2.2 dev eth0 . Технически ни один RFC этого не запрещает. Я этой возможностью не воспользовался ни разу, но почти уверен, что кто-то нашел ей осмысленное применение.

Dummy interfaces

В отличие от Cisco IOS и систем семейства BSD, в Linux может быть только один loopback interface, который всегда называется lo и несет на себе тот самый адрес 127.0.0.1/8. Если нужно просто несколько адресов для разных демонов, можно присвоить их на тот же интерфейс lo .

Но что делать, если нужно несколько независимых локальных интерфейсов?

Кто-то советует решать эту проблему использованием не по назначению интерфейсов других типов, вроде мостов. Не верь им. Правильное решение — использовать интерфейсы типа dummy, которые аналогичны loopback во всем, кроме названия. Исторически так сложилось, что loopback — это уникальный интерфейс lo , и для совместимости сделали отдельный тип.

А зачем мне несколько интерфейсов loopback?

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

Гораздо чаще эта возможность применяется на маршрутизаторах. У каждого маршрутизатора обычно несколько адресов, в связи с чем возникает проблема выбора основного адреса для управления и для сессий протоколов вроде BGP, которые не используют multicast.

Какой выбрать? Любой интерфейс маршрутизатора потенциально может уйти в down, но сессии BGP и SSH должны работать. Поскольку loopback или dummy самопроизвольно не уйдет в down никогда, можно присвоить ему отдельный адрес и анонсировать его остальной сети через протокол OSPF (Open Shortest Path First), который использует multicast и не зависит от конкретных адресов интерфейсов. В этом случае адрес на loopback останется доступным, если у маршрутизатора есть хотя бы один живой канал в остальную сеть.

MACVLAN

У любого интерфейса L2 может быть один и только один MAC-адрес. Что делать, если хочется отправлять кадры с разным MAC-адресом с одного физического интерфейса?

У ядра Linux на это есть ответ, и тип таких интерфейсов называется macvlan . Создать и поднять его можно следующими командами:

В опции link мы указываем родительский физический интерфейс. По умолчанию используется случайный MAC-адрес, но ничто не мешает присвоить любой другой командой ip link set dev macvlan0 address <some MAC> .

Посмотрим на статус нового интерфейса:

Если присвоить нашему виртуальному интерфейсу адрес из сети 203.0.113.0/24, можно увидеть, что весь трафик в эту сеть отправляется с MAC-адреса от macvlan0, а не родительского eth0.

$ ip address add 203.0.113.90/25 dev macvlan0
$ tcpdump -eni eth0 dst 203.0.113.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
20:49:21.988045 8a:01:12:8f:1f:7c > Broadcast, ethertype ARP (0x0806), length 42: Request who-has 203.0.113.1 tell 203.0.113.90, length 28

Зеркалирование трафика

Зеркалирование и перенаправление обычно организуют на коммутаторах. Но если нужно сделать это на сервере или маршрутизаторе с Linux, никто не запретит.

Правила зеркалирования создаются с помощью tc . Мы рассмотрим только простейший случай: готовый рецепт для зеркалирования с dum0 на dum1 (интерфейсы можно подставить любые):

Опция mirred позволяет как копировать, так и перенаправлять пакеты с одного интерфейса на другой. В сочетании с классификаторами трафика из tc можно настроить самые разные сценарии, от зеркалирования только определенного трафика до отправки трафика сверх определенной полосы пропускания на другой интерфейс.

Продолжение доступно только участникам

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Читайте также: