Настройка интерфейса для IP
После установки аппаратных средств, как было объяснено в главе 4, Вы должны дать знать об этом сетевому программному обеспечению. Пара команд используется, чтобы конфигурировать сетевые интерфейсы и инициализировать таблицу маршрутизации. Эти задачи выполняются обычно в скрипте инициализации сети при загрузке системы. Эти команды называются ifconfig и route .
ifconfig interface ip-address
Эта команда связывает адрес ip-address с интерфейсом interface и активизирует его. Все остальные параметры устанавливаются по умолчанию. Например, маска подсети по умолчанию получена из сетевого класса IP-адреса ( 255.255.0.0 для класса B). ifconfig описан более подробно в конце этой главы.
route [add|del] [-net|-host] target [if]
Аргументы add и del определяют добавлять или удалять маршрут target . Аргументы -net и -host определяют тип маршрута: к сети или к компьютеру (второй вариант принимается по умолчанию). Аргумент if определяет, к какому сетевому интерфейсу относится команда.
Кольцевой интерфейс (Loopback)
# ifconfig lo 127.0.0.1
# Sample /etc/hosts entry for localhost localhost 127.0.0.1
$ ifconfig lo lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0
Как Вы можете видеть, интерфейс loopback получил сетевую маску 255.0.0.0 , так как адрес 127.0.0.1 принадлежит к классу A.
# route add 127.0.0.1
Здесь тоже можно использовать localhost вместо IP-адреса, если он задан в файле /etc/hosts .
Затем вы должны проверить правильность работы, например, используя ping. ping сетевой эквивалент звукового устройства и используется для проверки того, доступен ли IP-адрес и измерения интервала времени между посылкой пакета и получением ответа. Время, требуемое для этого, часто называется round-trip time:
# ping localhost PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.4 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.4 ms ^C --- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms
При вызове ping он будет испускать пакеты, пока пользователь его не остановит. ^C отмечает место, где я нажал Ctrl-C для прерывания.
Вышеупомянутый пример показывает, что пакеты доставлены к 127.0.0.1 , и ответ пришел к ping почти мгновенно. Это показывает, что вы преуспели во введении вашего первого сетевого интерфейса.
Если вывод который вы получаете от ping не походит на показанный выше, вы нарвались на неприятности. Проверьте ошибки в установочных файлах. Проверьте чтобы ifconfig и route, которые вы используете, были совместимы с ядром, которым Вы пользуетесь, и что ядро вообще компилировалось с разрешенной сетью (если сеть запрещена, вы увидите это по отсутствию каталога /proc/net ). Если Вы получаете сообщение об ошибке, «Network unreachable», значит вы неправильно использовали команду route. Удостоверьтесь, что используете тот же самый адрес, что дали ifconfig.
Описанных выше шагов достаточно, чтобы использовать сетевые приложения на автономном компьютере. После добавления вышеупомянутых строк к скрипту запуска, вы можете перезагрузить вашу машину и попытаться использовать различные приложения. Например, telnet localhost должен установить telnet-соединение с вашей машиной и вывести приглашение login: .
Однако, интерфейс loopback полезен не только как пример в книгах о сетях или как система отладки, он фактически используется некоторыми приложениями в течение нормальной работы. Поэтому вы всегда должны конфигурировать его независимо от того, присоединена ли ваша машина к сети или нет.
Интерфейсы Ethernet
Конфигурирование интерфейса Ethernet, идет почти также, как и интерфейса loopback, он только требует больше параметров когда вы используете подсети.
# ifconfig eth0 vstout netmask 255.255.255.0
# ifconfig eth0 eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42 inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0 UP BROADCAST RUNNING MTU 1500 Metric 1 RX packets 0 errors 0 dropped 0 overrun 0 TX packets 0 errors 0 dropped 0 overrun 0
Вы можете видеть, что ifconfig автоматически устанавливает широковещательный адрес (поле Bcast ), равный обычному значению, которое является номером сети с битами хоста, равными 1. Также размер передаваемых сообщений (для данного интерфейса устанавливается максимальный размер Ethernet-пакета) был установлен равным максимальному значению в 1500 байт. Все эти значения могут быть исправлены специальными опциями, которые описаны ниже.
# route add -net 172.16.1.0
Сначала это смотрится как волшебство, потому что, действительно, не очевидно, как route обнаруживает, какие сети с какими интерфейсами связаны. Однако, уловка довольно проста: ядро проверяет все интерфейсы, которые были отконфигурированы, и сравнивает адрес места назначения (в этом случае ( 172.16.1.0 ) с сетевой частью адреса интерфейса. Единственный интерфейс, который соответствует данному адресу, eth0 .
Теперь подумаем, что такое опция -net ? Она используется, потому что route может работать с маршрутами к сетям и с маршрутам к отдельным машинам (как вы видели в localhost ). Когда route получает адрес в стандарте с точками, он пытается предположить, принадлежит ли этот адрес сети или машине, проверяя биты части машины. Если эта часть адреса ноль, route предполагает, что он обозначает сеть, в противном случае, что адрес машины. Поэтому route решил бы, что 172.16.1.0 означает адрес машины: он не может знать, что мы используем подсети. Поэтому мы должны явно сообщить, что это адрес сети, что делается опцией -net .
# route add brew-net
# ping vlager PING vlager: 64 byte packets 64 bytes from 172.16.1.1: icmp_seq=0. time=11. ms 64 bytes from 172.16.1.1: icmp_seq=1. time=7. ms 64 bytes from 172.16.1.1: icmp_seq=2. time=12. ms 64 bytes from 172.16.1.1: icmp_seq=3. time=3. ms ^C ----vstout.vbrew.com PING Statistics---- 4 packets transmitted, 4 packets received, 0 round-trip (ms) min/avg/max = 3/8/12
# route -n Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.1 * 255.255.255.255 UH 1 0 112 lo 172.16.1.0 * 255.255.255.0 U 1 0 10 eth0
Детальное значение этих полей объясняется ниже. Колонка Flags содержит список флагов, устанавливаемых для каждого интерфейса. U всегда установлен для активных интерфейсов, а H сообщает, что адрес места назначения обозначает машину (хост). Если флаг H установлен для маршрута, который вы считаете сетевым маршрутом, тогда вы должны использовать опцию -net с командой route. Чтобы проверить, используется ли маршрут, который вы ввели, посмотрите на поле Use , которое находится между двумя сообщениями ping.
Маршрутизация через шлюз (Gateway)
В предыдущем разделе я рассмотрел только случай введения хоста с единственным Ethernet-интерфейсом. Достаточно часто приходится сталкиваться с сетями, соединенными с помощью gateway. Этот gateway может просто связывать два или больше Ethernet, а может обеспечивать связь с внешним миром (например, с Internet). Чтобы использовать сервис gateway, вы должны обеспечить сетевому уровню дополнительную информацию о маршрутизации.
Например, Ethernet-сети Virtual Brewery и Virtual Winery связаны через такой gateway, а именно хост vlager . Предположим, что vlager уже был отконфигурирован, и нам осталось только добавить новую запись в таблицу маршрутизации vstout , которая сообщает его ядру, что он может достичь всех хостов сети Winery через vlager . Соответствующее описание маршрута показано ниже. Ключевое слово gw сообщает, что следующий аргумент обозначает gateway:
# route add wine-net gw vlager
Конечно, любой хост в сети Winery, с которым вы желаете работать должен иметь соответствующую запись в таблице маршрутизации для сети Brewery, иначе вы сможете только послать данные, но ответа не получите.
# route add default gw vlager
Сетевое имя default (по умолчанию) связано с адресом 0.0.0.0 , что обозначает маршрут, установленный по умолчанию. Вы не должны добавлять это имя к /etc/networks , потому что это построено в route.
Если используя ping, вы обнаружили большой процент потерь пакетов при их проходе через несколько gateway, это может говорить об очень большой нагрузке на сеть. Потеря пакетов в основном происходит не из-за технических проблем, а скорее, благодаря временной избыточной нагрузке на направляющие хосты, которые из-за этого задерживают или даже выбрасывают поступающие пакеты.
Настройка шлюза
Отконфигурировать машину для передачи пакетов между двумя сетями Ethernet довольно просто. Вернемся к vlager , который оборудован двумя Ethernet-платами, каждая из них связана с одной из двух сетей. Все, что вы должны сделать, это сконфигурировать оба интерфейса отдельно, дав им их IP-адреса.
172.16.1.1 vlager.vbrew.com vlager vlager-if1 172.16.2.1 vlager-if2
#ifconfig eth0 vlager-if1#route add brew-net#ifconfig eth1 vlager-if2#route add wine-net
Если эта последовательность не работает, проверьте, включена ли в ядре поддержка IP forwarding. Для этого посмотрите первое число во второй строке файла /proc/net/snmp , оно должна быть 1 .
Интерфейс PLIP
При использовании PLIP-связи для соединения двух машин существуют лишь небольшие отличия от того, что вы должны сделать при использовании Ethernet. Вышеупомянутая связь называется point-to-point (точка с точкой), потому что она соединяет только два хоста («точки») в противоположность широковещательным (broadcast) сетям.
#ifconfig plip1 vlite pointopoint vlager#route add default gw vlager
# ifconfig plip1 vlager pointopoint vlite
Интересно, что интерфейс plip1 на vlager не обязан иметь отдельный IP-адрес, но если хочется, можете дать ему адрес 172.16.1.1 .
# route add vlite gw vlager
Гораздо лучше иметь дело с временными маршрутами, используя динамическую маршрутизацию. Один из способов сделать это состoит в запуске демона gated, который вы должны установить на каждом хосте в сети, чтобы он распространял информацию о маршрутах динамически. Самый легкий путь, однако, состoит в том, чтобы использовать proxy ARP. С proxy ARP vlager будет отвечать на любой ARP-запрос для vlite , посылая собственный Ethernet-адрес. Результат: все пакеты для vlite будут закачивать на vlager , который будет передавать их на laptop. Мы будем возвращаться к proxy ARP позже.
Текущие версии net-tools имеют утилиту plipconfig, которая позволяет настроить параметры PLIP timing. IRQ для порта принтера можно задать командой ifconfig.
Интерфейсы SLIP и PPP
Хотя SLIP и PPP всего лишь простые point-to-point связи, подобные PLIP-соединениям, о них есть дополнительная информация. Обычно при установке SLIP-соединения требуется дозвониться до удаленной машины через модем и отрегулировать последовательную линию для SLIP. PPP используется подобным образом. Инструменты, требуемые для создания SLIP или PPP-связи, будут описаны в главе 7 и главе 8.
Тупой (Dummy) интерфейс
Фиктивный интерфейс Dummy немного экзотический, но довольно полезный. Он наиболее удобен для автономных хостов и машин, которые связаны с сетью через модем. Фактически, последние большую часть времени также являются автономными хостами.
Проблема автономных хостов в том, что они имеют только одно активное сетевое устройство, loopback, которому обычно назначен адрес 127.0.0.1 . Но в некоторых случаях, вы должны послать данные к «официальному» IP-адресу локального хоста. Например, рассмотрим laptop vlite , который был отсоединен от сети. Приложение на vlite может понадобиться послать данные другому приложению на том же самом хосте. Поиск vlite в файле /etc/hosts выдает IP-адрес 172.16.1.65 , таким образом приложение пытается послать данные этому адресу. Поскольку интерфейс loopback в настоящее время единственный активный интерфейс на машине, ядро не имеет никаких идей относительно этого адреса! Как следствие, ядро отказывается от пакета и возвращает приложению ошибку.
#ifconfig dummy vlite#route add vlite
IP-псевдонимы (IP-Alias)
Новые ядра поддерживают свойство, которое может полностью заменить dummy-интерфейс, и имеет другие полезные функции. IP Alias позволяет конфигурировать много IP-адресов на одно физическое устройство. В самом простом случае Вы могли бы копировать функцию dummy-интерфейса, конфигурируя адрес как псевдоним для loopback, и полностью избежать применения интерфейса dummy. В более сложных случаях Вы могли бы конфигурировать ваш компьютер, чтобы он выглядел как несколько машин с разными IP-адресами. Эта конфигурация иногда называется «Virtual Hosting».
# ifconfig lo:0 172.16.1.1
Каждый псевдоним может обрабатываться как отдельное устройство, однако, оно будет совместно использовать аппаратные средства с другим интерфейсом.
| Назад | Глобальное оглавление | Вперед |
| Написание файлов hosts и networks | Локальное оглавление | Все про ifconfig |
Форум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.048 секунд. Запросов: 25.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Создание dummy интерфейсов в Linux
Приведу пример создания dummy интерфейсов в Linux.
На тесте использую Ubuntu Server 16.04.
Первый делом необходимо загрузить модуль «dummy», можно также добавить опцию «numdummies=2» чтобы сразу создалось два интерфейса dummyX:
sudo modprobe -v dummy numdummies=2
Посмотрим загрузился ли модуль:
lsmod | grep dummy
Посмотрим создались ли интерфейсы:
ifconfig -a | grep dummy
Добавить или удалить IP адрес например с интерфейса dummy0 можно так:
sudo ip addr add 192.168.1.150/24 dev dummy0 sudo ip addr del 192.168.1.150/24 dev dummy0
Изменить MAC адрес так:
sudo ip link set dummy0 address 00:00:00:11:11:11
Добавляются или удаляются интерфейсы так:
sudo ip link add dummy2 type dummy sudo ip link del dummy2 type dummy
Выгрузить модуль dummy можно так (dummy интерфейсы удалятся автоматически):
sudo rmmod dummy
Чтобы модуль автоматически запускался при старте системы, то добавим в файл /etc/modules (при запуске создастся один интерфейс dummy0):
dummy
Если нужно чтобы создалось например два интерфейса или больше, тогда добавим в /etc/rc.local строку:
modprobe -v dummy numdummies=2
Или создадим файл dummy.conf:
sudo -i echo "options dummy numdummies=2" > /etc/modprobe.d/dummy.conf
Чтобы при старте системы на dummy интерфейсе был IP адрес, откроем файл конфигурации:
sudo nano /etc/network/interfaces
И как обычно назначим статический IP адрес (аналогично для dummy1, dummy2 и т.д.):
auto dummy0 iface dummy0 inet static address 192.168.1.150 netmask 255.255.255.0
Смотрите чтобы назначенный IP адрес на dummy интерфейсе не совпал с сетью на физическом сетевой интерфейсе, иначе совпадут маршруты и сервер может быть не доступен по обеим IP адресам. Если нужно назначить несколько IP адресов из одной сети, то рекомендую воспользоваться алиасами.
- Нажмите, чтобы открыть на Facebook (Открывается в новом окне)
- Нажмите, чтобы поделиться на Twitter (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Pinterest (Открывается в новом окне)
- Нажмите, чтобы поделиться на LinkedIn (Открывается в новом окне)
- Нажмите, чтобы поделиться записями на Tumblr (Открывается в новом окне)
- Нажмите, чтобы поделиться в Telegram (Открывается в новом окне)
- Ещё
- Нажмите, чтобы поделиться записями на Pocket (Открывается в новом окне)
- Нажмите, чтобы поделиться на Reddit (Открывается в новом окне)
- Нажмите, чтобы поделиться в WhatsApp (Открывается в новом окне)
- Нажмите для печати (Открывается в новом окне)
dummy-интерфейс в Debian 10
Раньше, в дебианах до 9-го включительно dummy-интерфейс без назначенного ему IP-адреса «поднимался» вот такой директивой в «/etc/network/interfaces«.
Теперь же, в 10-м Debian-е (Buster) нужно уже вот так, с явными инструкциями по созданию линка посредством iproute2:
И пара слов о том, кому и зачем вообще нужен dummy-интерфейс в XXI веке. В основном — любителям виртуализации. Там, где коммуникации виртуальных машин с внешним миром происходят через Linux-овые мосты (bridge). В качестве примеров могу привести следующие случаи.
- Хочется, чтобы виртуалки могли общаться друг с другом и с хост-машиной, но не имели бы доступа во внешний мир.
- Хочется выпускать виртуалки внаружу через маршрутизацию (например, с NATом), а не через мосты (bridge).
- Гипервизор не позволяет создать мост без интерфейсов в его составе (этим грешили ранние версии ProxMox-а).
- Передача данных через мост упирается в скорость самого медленного его интерфейса. А хочется побыстрее.
- Есть какой-нибудь IPSec в транспортном режиме, но нужно уметь пинговать его «концы» изнутри. Обычно, конечно, для этого делают GRE, но.