Я хочу узнать, как клиентский компьютер находит контроллер домена («В Unix-подобных системах Samba 4.x может работать в качестве контроллера домена»).
RFC 2782 пишет, что
If ... LDAP client wants to discover a LDAP server ... for the domain example.com., it does a lookup of _ldap._tcp.example.com
Значит, перед тем, как обращаться к DNS-серверу, нужно узнать, какое у компьютера доменное имя, правильно?
$ domainname
bash: domainname: command not found
#include <unistd.h>
int getdomainname(char *name, size_t len);
int setdomainname(const char *name, size_t len);
POSIX не описывает эти вызовы
https://ru.manpages.org/setdomainname/2
в библиотеке glibc реализована функция getdomainname(), которая возвращает копию поля domainname, которую возвращает вызов uname(2).
$ uname --nodename
localhost
...
-n, --nodename
print the network node hostname
https://man7.org/linux/man-pages/man2/uname.2.html
#include <sys/utsname.h>
int uname(struct utsname *buf);
...
char nodename[]; /* Name within "some implementation-defined network" */
...
#ifdef _GNU_SOURCE
char domainname[]; /* NIS or YP domain name */
#endif
$ uname --domainname
uname: unrecognized option '--domainname'
https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html#domainn...
$ ls /proc/sys/kernel/domainname
/proc/sys/kernel/domainname
$ file /proc/sys/kernel/domainname
/proc/sys/kernel/domainname: empty
# echo "linux.org.ru" > /proc/sys/kernel/domainname
$ cat /proc/sys/kernel/domainname
linux.org.ru
«DNS (Internet Domain Name Server) domainname, not to be confused with the NIS (Network Information Service) or YP (Yellow Pages) domainname. These two domain names are in general different. For a detailed discussion see the hostname(1) man page.»
https://linux.die.net/man/1/hostname The complete Fully Qualified Domain Name (FQDN) of the system is returned with «hostname --fqdn»
$ hostname --fqdn
localhost
В общем, предлагают прописывать hostname в файле /etc/hostname, а
FQDN прописывать в файле /etc/hosts после внешнего IP-адреса
Прописал, ничего не поменялось, что и логично.
Внутри файле /etc/hosts написано:
In the presence of the domain name service or NIS, this file may not be consulted at all; see /etc/host.conf for the resolution order.
Утилиты domainname в генте нет:
[ebuild R ] sys-apps/net-tools-2.10::gentoo USE="arp hostname ipv6 nls -nis -plipconfig (-selinux) -slattach -static" 225 KiB
...
$ equery files sys-apps/net-tools | grep domainname
/bin/dnsdomainname
/usr/share/man/de_DE/man1/dnsdomainname.1
/usr/share/man/fr_FR/man1/dnsdomainname.1
/usr/share/man/man1/dnsdomainname.1
/usr/share/man/pt_BR/man1/dnsdomainname.1
Может быть всё проще, и можно настроить получение имени домена с DHCP-сервера? Ну нет, сначала надо понять, как это имя устанавливается и извлекается. А затем уже автоматизировать эти процессы применяя программу dhcp-клиент.
В systemd есть какая-то hostnamectl, однако имя хоста, это ведь не то же самое, что FQDN? Хотя там и предлагают использовать «sequence of ... labels separated by single dots that forms a valid DNS FQDN».
Ещё в systemd есть /etc/systemd/resolved.conf, где можно прописать два вида доменов, причём один из этих видов доменов нужен для «определения» FQDN.
Если я правильно понял, то надо:
1) имя домена прописать в файл /etc/systemd/resolved.conf
2) что-то сделать с systemd, чтобы она обновила конфигурацию, вроде
$ sudo systemctl restart systemd-resolved
$
Сделал, перезапустил, ничего не поменялось (hostname --fqdn показывает короткое имя).
Gentoo wiki [как обычно] демонстрирует низкое качество документации и обходит стороной этот вопрос.
$ sudo hostnamectl hostname shushundr.linux.org.ru
$ hostname
shushundr.linux.org.ru
$ dnsdomainname
linux.org.ru
Мне не нравится всё. Во-первых, я не понимаю, где эти настройки сохраняются и как это сделать перманентным. Во-вторых, мне не ясно, для чего нужна команда dnsdomainname и чем она отличается от domainname. Почему в gentoo нет команды domainname?
# echo "test" >/proc/sys/kernel/domainname
# hostnamectl hostname shushundr.linux.org.ru
# cat /proc/sys/kernel/domainname
test
#
данунафиг...
UPD: я выяснил (спасибо firkax), что всё ломает systemd. Поэтому вопрос - а как systemd должна работать?
Проблеме минимум 10 лет: «since switching to systemd my machine no longer has a domain name»