7

Дано: компьютер под управлением Linux (CentOS 5.x), одна сетевая карта подключена к коммутатору локальной сети, вторая - к кабельному модему через перекрестный кабель. Этот компьютер действует как маршрутизатор / брандмауэр / формирователь трафика для локальной сети.

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

Я знаю, что, возможно, смогу "подделать" DHCP-запросы и объединить некоторые сценарии, которые это сделают, но мне интересно, знает ли кто-нибудь более простой и правильный способ.

Вопрос: Как я могу заставить компьютер Linux запрашивать два IP-адреса через DHCP и назначать оба из них одной сетевой карте?

2 ответа2

6

Поскольку ответ DHCP основан на MAC-адресе запрашивающего интерфейса, с одним физическим интерфейсом ответ «вы не можете». Единственный способ сделать это - использовать скрипт.

Возможно, что-то вроде (с подынтерфейсом, определенным на основной)

  1. Основной интерфейс выдает DHCP и получает IP-адрес
  2. macchanger меняет MAC-адрес интерфейса
  3. Подинтерфейс выдает 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 squeeze - в вашем дистрибутиве может не быть включено все необходимое в ядре (особенно в macvlan).

4

Как предположил @JesseChisholm, гораздо проще задать правильный запрос DHCP-серверу, чем выполнять сложные сетевые настройки.

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

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

Это привело к получению двух IP-адресов с одного и того же сервера DHCP.

0x36 - это опция 61, которая является опцией id клиента. После: есть шестнадцатеричный байт. Это пришло из опции помощи 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)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .