Возможно ли сконфигурировать более одного ip адреса на интерфейсе линукс

Обновлено: 03.07.2024

Есть концепция, которая позволяет настроить несколько IP-адресов на одном сетевом интерфейсе, и называется она IP-aliasing, если переводить дословно, то это IP-псевдонимы. Подобные вещи используются для создания нескольких виртуальных сайтов на Apache, посредством одного сетевого интерфейса и разных IP-адресов в одной подсети.
Преимущество возможности использования псевдонимов IP адресов в том, что нет необходимости использования физических адаптеров к каждому IP. Вместо этого вы создаете несколько виртуальных интерфейсов, которые будут действовать на одной физической сетевой карте, это довольно удобно.

Примеры, опубликованные здесь актуальны для дистрибутивов Red Hat, Fedora и CentOS. Мы рассмотрим несколько способов конфигурирования сетевых интерфейсов, и IP адреса у нас будут использованы из локальной сети. Вам же будет необходимо поменять значения адресов на свои.

Создание виртуальных интерфейсов, а так же использование нескольких IP адресов.
В нашем примере мы используем интерфейс «ifcfg-eth0», в качестве интерфейса по умолчанию. Если вы хотите добавить второй Ethernet интерфейс, то вам следует создать файл конфигурации с именем «ifcfg-eth1». Файлы конфигурации сетевых интерфейсов размещаются по пути /etc/sysconfig/network-script/. Давайте пройдем в данную директорию, и просмотрим список файлов.

Здесь всё просто, мы проходим с помощью команды cd в указанную директорию, затем просматриваем содержимое с помощью команды «ls -l».

В результате, если всё сделано правильно, мы получаем вывод примерно такого содержания:

Предположим нам необходимо добавить к существующему IP адресу, ещё три дополнительных, пусть это будет 172.16.16.126, 172.16.16.127 и 172.16.16.128. Для этого нам нужно добавить дополнительные файлы конфигурации по каждому на каждый виртуальный интерфейс. Таким образом, файл «ifcfg-eth0» будет файлом конфигурации для основного IP-адреса. Для IP-адресов псевдонимов мы создаем дополнительные файлы, выглядеть это будет так:

Значение «:N» обозначает номер интерфейса созданного нами интерфейса алиаса, к интерфейсу eth0. Нумерацию интерфейсов следует сделать последовательной, т.е. получается ifcfg-eth0:0, ifcfg-eth0:1, ifcfg-eth0:2. Сделать это просто, посредством копирования из основного конфигурационного файла.

Если мы откроем файл «ifcfg-eth0» то увидим следующее содержимое

Здесь нас интересуют два параметра DIVECE и IPADDR. Таким образом, откройте каждый из файлов конфигурации (сделать это можно через редактор VI), и отредактируйте эти параметры. DEVICE – имя устройства, задайте его уникальным, у каждого интерфейса он будет свой. IPADDR – IP адрес интерфейса. В конечном итоге, файлы конфигурации будут выглядеть таким образом:

Ifcfg-eth0:0

Ifcfg-eth0:1

Ifcfg-eth0:2

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

После перезапуска сетевого интерфейса мы можем проверить применение новых параметров, посредством команды «ifconfig». С другой машин вы так же можете проверить работы посредством утилиты Ping (о ней наверняка вы уже знаете).
Использование диапазона IP адресов
Еще один не менее полезный способ конфигурации виртуального интерфейса – это если вы используете диапазон IP адресов. В этом случае вам не придется плодить файлы конфигурации на каждый виртуальный интерфейс по отдельности, а достаточно создать один дополнительный, задав ему имя как «ifcfg-eth0-range0». Для его быстрого создания вы так же можете скопировать файл конфигурации основного интерфейса «ifcfg-eth0».

В новом файле конфигурации «ifcfg-eth0-range0» нам потребуется задать два параметра, «IPADDR_START» и «IPADDR_END». Как вы уже наверное догадались это начало и конец диапазон адресов, кроме того в файле конфигурации необходимо закомментировать параметры DEVICE, BOOTPROTO, и т.д. см. ниже.

Как и в предыдущем примере перезапускаем конфигурацию после внесений изменений.

Осталось проверить, всё ли сделано правильно, опять же смотрим ifconfig а так же пробуем пинговать с других машин. На это всё, успехов!


Создание вторичного суб-интерфейса или IP-адреса на Debian/Ubuntu/Linux Mint

Решил написать статью о том как можно создать вторичный суб-интерфейс или ИП- адрес на Debian/Ubuntu/Linux Mint. Это нужно для того чтобы на одном интерфейсе было несколько глобальных IP, довольно удобно и не нужно ставить дополнительную сетевую карту. Приведу примеры на которых очень наглядно будет видно что и как нужно будет делать чтобы настроить все это. Я приведу 2 варианта как это можно сделать.

Вариант 1.

Создание под-интерфейса на Debian/Ubuntu/Linux Mint без перезапуска сетевого сервиса.

Этот способ работает, но у него есть минус. Интерфейс, который мы создадим будет работать только до перезагрузки нашей ОС.

Шаг 1: Проверить реальный IP-адрес на eth0:

смотрим какой у нас ИП с помощью ip addr

смотрим какой у нас ИП с помощью ip addr

Шаг 2: Настройка второго IP адреса на под-интерфейсе

вывод полученной конфигурации второго глобального IP

вывод полученной конфигурации второго глобального IP

На рисунке видно что мы установили дополнительный 2-й интерфейс.

Вариант 2.

Создание под-интерфейса на Debian/Ubuntu/Linux Mint на постоянной основе.

Шаг 1: Нужно добавить интерфейс eth0: 0 в файл конфигурации интерфейсов:

вводим конфигурацию для второго суб-интерфейса

вводим конфигурацию для второго суб-интерфейса

Шаг 2: Перезагружаем сетевую службу

Потом выполняем команду чтобы посмотреть работает ли у нас все:

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

Ну а сейчас нужно перезапустить интерфейс:

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

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

New member

Да нет ничего проще : алиасные IP
Только вам нужно отслеживать и контролировать таблицу роутинга.

bobrov

New member

/etc/network/interfaces я открыл, адрес шлюз прописал, ctrl+x, y - отказано в доступе, как получить права?

New member

/etc/network/interfaces я открыл, адрес шлюз прописал, ctrl+x, y - отказано в доступе, как получить права?

А не надо ничего вообще "прописывать".
А права root получаются по команде с sudo, вообще-то говоря.

New member

Вообще то, изначально как оно задумано разработчиками Astra Linux, сетевые интерфейсы у вас подымаются под управлением NetworkManager :

Это если вы туда руками не лазили!
Ручное конфигурирование сетевых интерфейсов и NetworkManager несовместимы. И всё что вы пропишете в /etc/network/interfaces и /etc/resolv.conf и др. - не будет иметь силы и будет NetworkManager переписываться.
Нужно использовать что-то одно, или а). NetworkManager, или б). вы так хорошо понимаете функционирование IP сети, что интерфейсы, таблицу роутинга, DNS и всё-всё-всё управляете вручную сами.

New member

Во всех задачах конфигурирования всех подсистем Linux всегда решается 2 задачи:
1. какими командами и какими опциями добиться желаемого результата?
2. каким способом закрепить результат так, чтобы он сохранялся при перезагрузке?
2-ю задачу в Linux решают 55-ю разными способами.
И решать 1) и 2) лучше раздельно, последовательно.

bobrov

New member

Вообщем, если я правильно понял, вариант с редактированием файла etc/network/interfaces для astra linux не подходит. но нужно заставить сетевую карту иметь доступ в две сети, какой вариант настройки подойдёт для человека, не так давно начавшим более углубленное знакомство с администрированием этой системы? чтобы и работал и сохранялся=)

bobrov

New member

bobrov

New member
New member

вариант с редактированием файла etc/network/interfaces для astra linux не подходит

Подходит. Только для этого нужно остановить всё что связано с NetworkManager и настраивать всё вручную.
К статическим/динамическим (через DHCP) IP адресам это не имеет никакого отношения, это другое.

но нужно заставить сетевую карту иметь доступ в две сети

Присвойте своему сетевому интерфейсу алиасный IP из другой подсети. По ссылке показанной выше всё с примерами расписано.

Разделите эти 2 задачи:
- сначала настройте и тщательно проверьте чтобы работало.
- а затем будете думать над тем, как сделать так, чтобы эти нужные действия выполнялись при загрузке (на это есть множество способов).

AFilippov

New member

Ручное конфигурирование сетевых интерфейсов и NetworkManager несовместимы. И всё что вы пропишете в /etc/network/interfaces и /etc/resolv.conf и др. - не будет иметь силы и будет NetworkManager переписываться.

Так, может, там ни DE, ни NetworkManager-а нет, а сетью systemd рулит. ТС про это не пишет.
Вообще, интересная постановка вопроса. Как изолирована сеть? Не в хабе же они все торчат, с разными подсетями. А если есть маршрутизатор, то и данная проблема должна решаться с его стороны, а не на клиенте. ИМХО, конечно.

New member

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

AFilippov

New member

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

New member

Понятно?
Вот вам 2 независимые подсети с масками 255.255.255.0 с одного физического интерфейса с MAC 08:00:27:09:8e:39

Montfer

New member

Могу ошибаться, но в 1.5 либо дибильный network manager, либо он совсем отсутствует. Пытался настроить сеть через графическую утилиту, но не смог. Лучше руками прописать

AFilippov

New member

Могу ошибаться, но в 1.5 либо дибильный network manager, либо он совсем отсутствует. Пытался настроить сеть через графическую утилиту, но не смог. Лучше руками прописать

Wicd тама. Вроде, как альтернатива NetworkManager-у была.

Montfer

New member

Wicd тама. Вроде, как альтернатива NetworkManager-у была.

Один фиг то еще уг, когда сетку настраивал, удалял это

New member

От того, какими делами подымается сеть, вопрос 2-х подсетей, что интересовало ТС, никоим образом не зависит.

Montfer

New member

От того, какими делами подымается сеть, вопрос 2-х подсетей, что интересовало ТС, никоим образом не зависит.

Наверно и так. Вклинился в тему только ради того, чтоб сказать про network manager, которого в 1.5 еще не добавили

AFilippov

New member

Вклинился в тему только ради того, чтоб сказать про network manager, которого в 1.5 еще не добавили

Куда ж он денется? Вот он родной в Смоленск 1.5:
smol@smolensk15:

$ apt-cache search network-manager
network-manager - network management framework (daemon and userspace tools)
network-manager-dev - network management framework (development files)
Wicd тогда модно было, или баг в nm какой не исправленный был.

Недавно я столкнулся с ситуацией, когда мне потребовалось два IP-адреса в одной подсети, назначенных одному хосту Linux, чтобы мы могли запустить два сайта SSL / TLS. Мой первый подход состоял в том, чтобы использовать псевдонимы IP, например, используя eth0: 0, eth0: 1 и т. Д., Но у наших сетевых администраторов есть довольно строгие настройки для безопасности, которые подорвали эту идею:

  1. Они используют отслеживание DHCP и обычно не допускают статические IP-адреса. Статическая адресация выполняется с использованием статических записей DHCP, поэтому один и тот же MAC-адрес всегда получает одно и то же назначение IP. Эта функция может быть отключена для каждого порта коммутатора, если вы спросите, и у вас есть причина для этого (к счастью, у меня хорошие отношения с сетевиками, и это не сложно сделать).
  2. С отключенным отслеживанием DHCP на порту коммутатора им пришлось включить в коммутатор правило, согласно которому MAC-адресу X разрешено иметь IP-адрес Y. К сожалению, это побочный эффект также сказало, что MAC-адресу X разрешено иметь ТОЛЬКО IP-адрес Y. Для IP-псевдонимов необходимо, чтобы MAC-адресу X было присвоено два IP-адреса, поэтому это не сработало.

Возможно, эти проблемы были решены в конфигурации коммутатора, но, пытаясь сохранить хорошие отношения с сетевыми администраторами, я попытался найти другой путь. Наличие двух сетевых интерфейсов казалось следующим логическим шагом. К счастью, эта система Linux представляет собой виртуальную машину, поэтому я смог легко добавить второй сетевой интерфейс (без перезагрузки, я мог бы добавить - довольно круто). Спустя несколько нажатий клавиш у меня было два сетевых интерфейса, и оба извлекали IP-адреса из DHCP.

Но затем возникла проблема: сетевые администраторы могли видеть (на коммутаторе) запись ARP для обоих интерфейсов, но только первый сетевой интерфейс, который я вызывал, отвечал на эхо-запросы или любой вид трафика TCP или UDP.

После многих копаний и тычков, вот что я придумал. Кажется, что это работает, но также кажется, что много работы для чего-то, что кажется простым. Есть альтернативные идеи?

Шаг 1: Включите фильтрацию ARP на всех интерфейсах:

Из файла network / ip-sysctl.txt в документации по ядру Linux:

Шаг 2: Реализация маршрутизации на основе источника

Предположим, что подсеть - 10.0.0.0/24, шлюз - 10.0.0.1, IP-адрес для eth0 - 10.0.0.100, а IP-адрес для eth1 - 10.0.0.101.

Определите две новые таблицы маршрутизации с именами eth0 и eth1 в / etc / iproute2 / rt_tables:

Определите маршруты для этих двух таблиц:

Определите правила, когда следует использовать новые таблицы маршрутизации:

Об основной таблице маршрутизации уже позаботился DHCP (и даже не ясно, что это строго необходимо в этом случае), но это в основном соответствует этому:

И вуаля! Кажется, все работает просто отлично. Отправка пингов на оба IP-адреса работает нормально. Отправка ping из этой системы в другие системы и принудительное использование ping для использования определенного интерфейса работает нормально ( ping -I eth0 10.0.0.1 , ping -I eth1 10.0.0.1 ). И самое главное, весь трафик TCP и UDP с / с любого IP-адреса работает должным образом.

Итак, еще раз, мой вопрос: есть ли лучший способ сделать это? Это кажется большой работой для, казалось бы, простой проблемы.

Обновление: решение, приведенное выше, оказалось неполным. Все работало нормально, если трафик оставался в той же подсети, но связь с другими подсетями через 2-й интерфейс не будет работать должным образом. Вместо того, чтобы вырыть большую дыру, я в итоге поговорил с сетевыми администраторами и заставил их разрешить несколько IP-адресов для одного интерфейса и использовал псевдонимы IP (например, eth0 и eth0: 0).

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