Отримання 2 IP-адреси на одній мережевій карті за допомогою DHCP


7

Дано: Комп’ютер під управлінням Linux (CentOS 5.x), одна мережева карта, підключена до локального комутатора, друга - до кабельного модему через кросовер-кабель. Цей комп'ютер працює як маршрутизатор / брандмауер / формувач руху для локальної мережі.

Комп'ютер отримує свою загальнодоступну IP-адресу від провайдера через DHCP. Я знаю, що мій провайдер може надавати клієнтам 2 IP-адреси (коли кабельний модем підключений безпосередньо до концентратора тощо). Я хотів би отримати 2 IP-адреси на одному комп’ютері, підключеному до провайдера. Це спростить сегрегацію трафіку, NAT та формування.

Я знаю, що, ймовірно, я можу "підробити" запити DHCP і з'єднати деякі сценарії, які будуть це робити, але мені цікаво, чи хтось знає простіший і правильний спосіб.

Питання: Як я можу зробити так, щоб комп'ютер Linux запитував два IP-адреси через DHCP і призначав їх обох на одну мережеву карту?

Відповіді:


7

Оскільки відповідь DHCP базується на MAC-адреси запитувального інтерфейсу, з єдиним фізичним інтерфейсом відповідь - "ви не можете". Єдиний спосіб зробити це було б за допомогою сценарію.

Можливо, щось на кшталт (із підінтерфейсом, визначеним на первинному):

  1. Первинний інтерфейс видає DHCP і отримує IP-адресу
  2. macchanger змінює MAC-адресу інтерфейсу
  3. Sub інтерфейс видає DHCP і отримує IP-адресу
  4. Поверніть mac-адресу за допомогою macchanger

Убийте клієнт dhcp, щоб він не запускався автоматично пізніше. Визначте час оренди вказаної вами IP-адреси та заплануйте запустити цей сценарій ще до того, як термін оренди закінчиться.

Оновлення

Для цього вам знадобиться iproute2 встановлений. Наступна команда додає віртуальний інтерфейс, пов'язаний з існуючим інтерфейсом eth0:

ip link add link eth0 address 00:11:22:33:44:55 virtual0 type macvlan

Замініть ім'я інтерфейсу mac та "virtual0" на те, що вам подобається. Увімкніть його:

ip link set virtual0 up

Потім налаштуйте, використовуючи dhcpd або dhclient або ifconfig, якщо потрібно. Я перевірив це на Debian стисках - у вашому дистрибутиві може бути не включено все необхідне в ядрі (особливо macvlan).


Дякую за вашу відповідь. Ніщо не заважає мені перевести інтерфейс у розрядний режим і надіслати DHCP-запит із "підробленою" MAC-адресою. Я отримаю відповідь, тому що інтерфейс знаходиться в безладному режимі, і призначу IP-адресу підінтерфейсу. Але це тендітно і багато роботи, я сподівався на щось більш надійне та просте та стандартне (підінтерфейс із власною MAC? "Віртуальною" мережевою картою?)
haimg

1
Так, я додав можливе рішення до своєї первісної відповіді
Павло

Дякую! Це те, що я шукав. Хоча він не працює на CentOS 5.5, він повинен працювати на CentOS 6.x (час на оновлення).
haimg

2
re: відповідь DHCP базується на MAC-адресі - насправді це BOOTP (попередник DHCP), який строго базується на MAC. DHCP має поле параметра клієнтського ідентифікатора, яке повинно використовуватись замість цього. Якщо ідентифікатора клієнта немає, DHCP використовує MAC самостійно. Отже, теоретично можна створити DHCP-запити з тим самим MAC, але різним ідентифікатором клієнта, щоб отримати 2 IP від ​​одного сервера DHCP. - Я насправді цього не пробував, просто читав специфікацію DHCP.
Джессі Чісгольм

@JesseChisholm: так, це працює для використання ідентифікатора клієнта. Я можу отримати дві IP-адреси за допомогою DHCP для свого eth0. Приклад для OpenWRT: # udhcpc -i eth0: 1 -x 0x3d: 0100BEEFC0FFEE (-x 0x3d: 0100BEEFC0FFEE - варіант 61 (ідентифікатор клієнта))
Пітер Сенна

6

Як запропонував @JesseChisholm, набагато простіше запитати правильну річ на сервері DHCP, а не робити складні мережеві настройки.

Для OpenWRT я міг просто запустити:

 # udhcpc -i eth0:1 -x 0x3d:0100BEEFC0FFEE

Це призвело до отримання двох ip-адрес з одного сервера dhcp.

0x36 - це варіант 61, який є ідентифікатором клієнта. Після: є опція шістнадцяткових байтів. Це з’явилося з довідкового варіанту udhcpc:

 # udhcp --help
 BusyBox v1.22.1 (2014-10-08 16:34:50 HKT) multi-call binary.

 Usage: udhcpc [-fbqRB] [-t N] [-T SEC] [-A SEC/-n]
 [-i IFACE] [-s PROG] [-p PIDFILE]
 [-oC] [-r IP] [-V VENDOR] [-F NAME] [-x OPT:VAL]... [-O OPT]...

 ...
 -x OPT:VAL     Include option OPT in sent packets (cumulative)
                Examples of string, numeric, and hex byte opts:
                -x hostname:bbox - option 12
                -x lease:3600 - option 51 (lease time)
                -x 0x3d:0100BEEFC0FFEE - option 61 (client id)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.