Получение 2 IP-адресов на одной сетевой карте с использованием DHCP
Дано: компьютер под управлением Linux (CentOS 5.x), одна сетевая карта подключена к коммутатору локальной сети, вторая - к кабельному модему через перекрестный кабель. Этот компьютер действует как маршрутизатор / брандмауэр / формирователь трафика для локальной сети.
Компьютер получает свой публичный IP-адрес от интернет-провайдера через DHCP. Я знаю, что мой провайдер может предоставить 2 IP-адреса клиентам (когда кабельный модем подключен напрямую к концентратору и т. Д.). Я хотел бы получить 2 IP-адреса на одном компьютере, который подключен к провайдеру. Это упростит разделение трафика, NAT и формирование.
Я знаю, что, возможно, смогу "подделать" DHCP-запросы и объединить некоторые сценарии, которые это сделают, но мне интересно, если кто-нибудь знает более простой и правильный способ.
Вопрос: Как я могу заставить компьютер Linux запрашивать два IP-адреса через DHCP и назначать оба из них одной сетевой карте?
2 ответа
Поскольку ответ DHCP основан на MAC-адресе запрашивающего интерфейса, с одним физическим интерфейсом ответ "вы не можете". Единственный способ сделать это - использовать скрипт.
Возможно, что-то вроде (с подынтерфейсом, определенным на первичном):
- Основной интерфейс выдает DHCP и получает IP-адрес
- macchanger меняет MAC-адрес интерфейса
- Подинтерфейс выдает DHCP и получает IP-адрес
- Восстановить 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).
Как предположил @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)