У меня есть машина с установленной на диск CoreOS 1800 (или 1855) и следующей строкой systemd-networkd config (на машине только один сетевой интерфейс):

$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes

[DHCP]
ClientIdentifier=mac
UseMTU=true
UseDomains=true

Еще одна примечательная вещь заключается в том, что эта машина также настроена с загрузкой PXE, но сервер PXE отклонит загрузку, поэтому я, наконец, загрузлюсь с диска.

Когда я перезагружаю компьютер, для него будут выделены два DHCP-IP, я подтвердил это, проверив / var / lib / dhcpd.leases на DHCP-сервере:

lease 100.79.223.152 { 
  starts 5 2018/09/28 02:34:00; ends 6 2018/09/29 02:33:59; tstp 6 2018/09/29 02:33:59; cltt 5 2018/09/28 02:34:00; 
  binding state active; next binding state free; rewind binding state free; 
  hardware ethernet 08:9e:01:d9:28:64; 
  option agent.circuit-id 0:5:8:b9:1:0:29;
}
lease 100.79.223.150 { 
  starts 5 2018/09/28 02:34:29; ends 6 2018/09/29 02:34:28; tstp 6 2018/09/29 02:34:28; cltt 5 2018/09/28 02:34:29; 
  binding state active; next binding state free; rewind binding state free; 
  hardware ethernet 08:9e:01:d9:28:64; uid "001010236001331(d"; 
  option agent.circuit-id 0:5:8:b9:1:0:29;
}
  • Запись об аренде 100.79.223.152 запрашивается загрузчиком PXE, но отклоняется сервером DHCP.
  • Запись об аренде 100.79.223.150 запрашивается systemd-networkd из CoreOS . (Я могу подтвердить это, запустив systemctl restart systemd-networkd и просмотрите файл аренды)

Кажется, все в порядке, но запись об аренде PXE 100.79.223.152 вызывает другую проблему (когда на самом деле PXE загружает машину и развертывает на ней другую ОС, она получит 100.79.223.152 вместо 150, а затем вызовет другую частную проблему).

Если я устанавливаю другую ОС, которая не использует systemd-networkd, то перезагрузка вызывает только 1 запись об аренде.

Вы можете видеть, что в аренде 100.79.223.150 есть поле uid "001010236001331 (d", что означает, что DHCP-сервер должен выделять IP-адрес по uid (идентификатору клиента), в настоящее время это фактически то же содержимое Mac-адреса, просто печатается как октет.

Это основная причина двух IP-адресов.

Чтобы предотвратить эту проблему с двумя IP-адресами, я попытался установить deny duplicates в / etc / dhcp / dhcpd.conf на DHCP-сервере, но ничего не меняется.

Я блуждал, если можно сказать systemd-networkd не отправлять uid (идентификатор клиента). Согласно источник systemd, намеренно реализовано "всегда отправлять идентификатор клиента",

При таком условии, как я могу запретить systemd-networkd отправлять идентификатор клиента?

РЕДАКТИРОВАТЬ 2019/02/17: Я обнаружил, что неправильно понял значение deny duplicates, это не помогает решить эту проблему.

Я вспомнил, что когда-либо сначала пробовал другой вариант, но он не работает.

ignore-client-uids on;

Заявление ignore-client-uids

флаг ignore-client-uids;

Если оператор ignore-client-uids присутствует и имеет значение true или on, UID для клиентов не будет записан. Если этот оператор отсутствует или имеет значение false или off, то будут записаны клиентские UID.

https://www.isc.org/wp-content/uploads/2017/08/dhcp43.html

Версия DHCP-сервера: isc-dhcpd-4.2.4.

РЕДАКТИРОВАТЬ 2019-03-12: Я ошибся и что-то нашел, поэтому сам ответил на этот вопрос. Простой ответ: ignore-client-uids true; на стороне сервера работает хорошо, ClientIdentifier=mac на стороне клиента не работает.

1
osexp2003 28 Сен 2018 в 06:49

2 ответа

Лучший ответ

После многих экспериментов я обнаружил, что только ignore-client-uids true; работает постоянно, вся загадка исчезла. когда вы его установите, вы можете подтвердить, что uid "....." не отображается в / var / lib / dhcp / dhcpd.leases` сервер полностью игнорирует идентификатор клиента, отправленный от клиента, и просто использует MAC, чтобы определить, как выделить IP.

Если вы настаиваете на использовании ClientIdentifier=mac, вы можете взглянуть на то, что я нашел:

  • указание ClientIdentifier=mac (на клиенте * .network) позволяет мне получить тот же IP-адрес, что и раньше. Причина, по которой я сказал, что это не работает, вероятно, связана с тем, что у меня есть другой сетевой адаптер, который также по умолчанию включил DHCP, что привело к появлению нового IP-адреса.

/lib/systemd/network/zz-default.network

[Network]
DHCP=yes

[DHCP]
UseMTU=true
UseDomains=true

После того, как я изменил вышеуказанный файл на

[Network]
DHCP=no

У меня только 1 IP такой же, как и раньше.

  • Идентификатором клиента будет строка «\ 0x1» + MAC, вы можете подтвердить это с помощью grep uid "..." в /var/lib/dhcp/dhcpd.leasesfile, e.g.,uid «001304TDD210272», для любых не- printable char он будет закодирован как 3-значный восьмеричный код, например 304. Некоторые клиенты автоматически генерируют идентификатор клиента, например, "\ 0x1" + "MAAS" + MAC ...

  • Самая прискорбная вещь: как только клиент отправит идентификатор клиента для того же MAC, если клиент отправит другой запрос БЕЗ идентификатора клиента, он получит новый IP .

  • Учитывая DDNS, для одного и того же MAC-адреса DHCP-запрос с идентификатором клиента и без него обрабатываются как разные клиенты, когда DHCP-сервер составляет для него запрос обновления DNS. Проще говоря,

    • для запроса DHCP без идентификатора клиента -> сервер отправляет запрос DDNS с хешем MAC -> DNS-сервер: ОК
    • для запроса DHCP с идентификатором клиента -> сервер отправляет запрос DDNS с хешем идентификатора клиента -> DNS-сервер: отклонен из-за того, что хеш не совпадает, в целях безопасности.

Это все, что я нашел, надеюсь, это поможет.

0
osexp2003 12 Мар 2019 в 08:15

Вы пробовали установить идентификатор клиента (пустой)?

$ cat /etc/systemd/network/zz-default.network
[Network]
DHCP=yes

[DHCP]
ClientIdentifier=
UseMTU=true
UseDomains=true
2
John Greene 16 Окт 2018 в 19:08