На этот вопрос уже есть ответ здесь:
Я запускаю Raspbian на куче Raspberry Pis. Каждый из них имеет уникальное имя хоста, заданное в /etc/hostname
, и клиент dhcp правильно регистрирует это имя на моем маршрутизаторе.
Проблема, с которой я столкнулся, связана с тем, что эти Pis подключены к одной сети, а затем к одному DHCP-серверу, через ethernet и WiFi - Существует условие, подобное гонке, которое означает, что остальная часть сети, используя имена для адресации этих Pis, не может детерминированно предпочесть ethernet-соединения WiFi.
Я бы хотел, чтобы Pis сообщали разные имена хостов сетевому DHCP-серверу при получении аренды в зависимости от того, с каким интерфейсом они подключаются. Кажется, это возможно статическим способом, добавив в /etc/dhcp/dhclient.conf
строки вроде следующей.
interface "wlan0" {
send host-name "MyHostname-1234-WiFi";
}
Проблема, которую я хочу решить, заключается в том, как определить эту строку программно. Что-то вроде этого:
interface "wlan0" {
send host-name "<hostname>-WiFi";
}
Заглянув в документацию по dhclient.conf(5)
, я могу использовать функцию concat
из dhcp-eval(5)
, но у меня ничего не получается. Я пробую следующее:
interface "wlan0" {
send host-name concat(gethostname(), "-WiFi");
}
Как и в связанном операторе option
, вы должны явно отмечать выражения с помощью знака =
:
send host-name "static-value";
send host-name = concat(gethostname(), "dynamic-value");
Если вы вызываете dhclient в подробном виде mode ( dhclient -cf myconfig.conf -v
) он сообщит вам о синтаксической ошибке, которую в противном случае игнорирует.