Прежде всего, я новичок в сети, так что, возможно, где-то есть ответ на мой вопрос, но я не смог найти ответ.

Ну, у меня много устройств с подключением к Интернету. Я хочу объединить их всех в одну сеть, используя технологии VPN. Я использую tinc-vpn для решения своих задач и хочу использовать DHCP для настройки своей сети.

Проблема здесь: я успешно настроил DHCP-сервер, и он хорошо обслуживает все подключенные устройства, но когда я перезагружаю устройство, он получает новый адрес от DHCP.

Как я понимаю, когда устройство подключается к сети, оно отправляет в сеть специальный запрос на вещание, в котором содержится MAC-адрес устройства. DHCP обрабатывает запрос и отправляет ответ с конфигурацией сети обратно на устройство. Ну, ifconfig вверх виртуальный интерфейс для VPN на устройстве и назначить произвольный MAC на него. Вот почему я всегда получаю случайный IP. Я думаю, что если я попрошу ifconfig назначить MAC-адрес физической сети для виртуального интерфейса, я решу свою проблему. Является ли это возможным? Если нет, то как я могу решить мою проблему? Я не стал бы беспокоиться об этом, если бы пул IP-адресов DHCP был очень большим, но он обслуживал только 250 устройств, и устройство очень часто отключалось.

Заранее спасибо.

3 ответа3

2

Спасибо всем за ответ.

Я думаю, что нашел отличное решение, без DHCP. Он основан на вычислении уникального статического IP-адреса с использованием физического MAC-адреса устройства.

В моем решении я буду использовать подсеть /16 (например, 10.1.0.0). Итак, для всех устройств я должен рассчитать последние 2 октета IP. Для своих расчетов я использую хеш-функцию CRC-16 на реальном MAC-адресе устройства. В результате я получу 2-байтовое целое число, которое содержит октеты IP-адреса.

Пример. MAC-адрес устройства 22-23-B2-72-99-3A. CRC-16 MAC будет 0x2e49. 0x2e == 46 и 0x49 = 73, поэтому IP-адрес устройства будет 10.1.46.73.

Плюсы:

  • Нет DHCP;
  • Уже известен постоянный и уникальный IP-адрес устройства для всех сетей.

Минусы:

  • Столкновения CRC-16 для MAC (два устройства в одной подсети с одинаковым IP, но с разными MAC). Но вероятность ситуации ничтожна, я думаю.

Любые предложения и критика приветствуются.

1

Чтобы ответить на заголовок: можно установить один и тот же MAC-адрес на двух интерфейсах, но это может привести к некоторым проблемам в сети или просто неожиданному поведению.

Есть четыре способа (я знаю), чтобы решить вашу проблему:

  1. В соответствии с предложением: зарезервируйте IP-адрес на сервере DHCP для определенного имени хоста.
  2. После того, как виртуальное сетевое устройство создано, назначьте ему определенный MAC-адрес. В Linux это можно автоматизировать с помощью скрипта.
  3. Запросите определенный IP-адрес с вашим клиентом DHCP. Чтобы сделать это надежным, вы должны сделать аренду DHCP достаточно короткой (например, 5 минут или 1 час, в зависимости от частоты входа в систему vpn), чтобы запрошенный IP-адрес все еще не был занят активной арендой.
  4. Поскольку ваш VPN-шлюз вряд ли будет часто меняться, вы можете использовать статическую настройку IP. Вы хотите, чтобы IP всегда - зачем тогда DHCP? Уменьшите диапазон IP-адресов DHCP и используйте часть освобожденного пространства для статических IP-адресов ...

Редактировать:

Таким образом, скрипт запускается несколько раз для автоматизации создания новых устройств. В этом случае вы можете вычислить IP (или MAC) из имени устройства. Пример:

PREFIX='tap'
DEV_NUM=${INTERFACE#$PREFIX}
# it's good idea to increment, because devices usually number from 0
# and ip ending with .0 and .1 generally shouldn't be used by a client
DEV_NUM=$(($DEV_NUM+2))
ifconfig ${INTERFACE} 10.0.1.${DEV_NUM} netmask 255.255.0.0
MAC_NUM=`printf "%02d\n" ${DEV_NUM}`
ip link set dev ${INTERFACE} address ba:df:ace:00:00:${MAC_NUM}

Или сохраните файл с назначением IP имени устройства. Пример:

ADDRESS_MAP='/etc/vpn-ip-mapping.conf'
while IFS='='; read -ra line; do
  if [ "${line[0]}" == "${INTERFACE}" ]; then
    IP_ADDRESS=${line[1]}
    ifconfig ${INTERFACE} ${IP_ADDRESS} netmask 255.255.0.0
    break
  fi
done < ${ADDRESS_MAP}
0

Еще один.

Я обнаружил проблему, почему я не могу получить конфигурации с моего DHCP на устройстве, когда соединение установлено. Причина в том, что tinc-up или другие сценарии, которые tinc выполняет после создания туннеля, синхронизированы со службами tinc, и мой клиент dhcp завершается по таймауту, прежде чем tinc совершит рукопожатие.

Чтобы решить эту проблему, я запускаю клиент dhcp в фоновом режиме внутри tinc-up .

tinc-up теперь выглядит так:

#!/bin/sh

ifconfig $INTERFACE hw ether fe:fd:00:00:00:00 # set interface hw address to get same IP from leases every time, connection established

dhcpcd -w $INTERFACE & # start dhcp client parralel with handshake proccess of tinc

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