как я могу предотвратить отправку systemd-networkd идентификатора клиента? - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть машина с установленной на диске 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-сервер отклонит загрузку, поэтому я, наконец, загрузлюсь с диска.

Когда я перезапущу машину, для нее будет выделено два IP-адреса DHCPЯ подтвердил это, проверив / 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 (идентификатор клиента). Согласно source ofSystemd , он намеренно реализован так, чтобы «всегда отправлять идентификатор клиента»,

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

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

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

ignore-client-uids on;

оператор ignore-client-uids

флаг ignore-client-uids;

Если присутствует оператор ignore-client-uids иимеет значение true или on, UID для клиентов не будет записываться.Если этот оператор отсутствует или имеет значение false или выключен, то клиентские 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 на стороне клиента не работает хорошо.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

После многих экспериментов я обнаружил, что только 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" `, для любого непечатаемого символа он будет закодирован как 3-значный октальный, например 304. Некоторые клиенты автоматически генерируютподобный идентификатор клиента "\ 0x1" + "MAAS" + MAC ...

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

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

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

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

0 голосов
/ 16 октября 2018

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

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

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