Архив метки: dhcp

FreeIPA установка на CentOS 7

FreeIPA это сборка программ предназначенных для управление учетными записями и проверки подлинности. Разрабатывается компанией RedHAT. Удобная работа с DNS сервером. Продуманная и удобная работа в панели управления. Англоязычная подробная документация от разработчика.

Введение

Всегда удобно вести базу пользователей в одном месте и использовать данные для работы с различными программами в которых необходима авторизация пользователей. FreeIPA позволяет очень быстро развернуть базу данных пользователей и имеет очень обширный функционал и подробную документацию на английском языке. Очень удобно использовать DNS сервер у которого хорошо продумано управление с панели управления.

Англоязычная документация от разработчика в которой можно найти ответы на все вопросы касающиеся использования FreeIPA.

Предварительная подготовка для установки FreeIPA

Установим операционную систему CentOS 7 c минимального образа и подготовим для установки.

Параметры для установки:

  • Имя узла сети : ipa.sevo44.loc
  • IP: 192.168.0.102
  • Шлюз: 192.168.0.106
  • DNS: 8.8.4.4

DNS указываем только для того чтобы машина могла скачать в интернете нужные пакеты. В последствии мы будем использовать DNS сервер на самом сервере IPA и эти параметры можно будет удалить из настроек.

Необходимо обязательно внести изменения в файл /etc/hosts

vi /etc/hosts
= необходимые изменения =
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
 192.168.0.102 ipa.sevo44.loc ipa

Примечание: Должно быть указано полное доменное имя (FQDN). В противном случае, Kerberos не будет работать! В файле/etc/hostname название машины должно быть ipa.sevo44.loc!

Сетевые настройки CentOS 7

После установки CentOS и не будем подключать и устанавливать ничего лишнего чтобы в дальнейшем не возникло проблем с обновлением системы.

Используя замечательную утилиту настроим сетевые параметры:

nmtui

С помощью её можно указать сетевые настройки и имя машины, если мы не сделали это при установке системы.

После внесения сетевых изменений  перезагрузим сетевые параметры:

service network restart
= вывод команды =
Restarting network (via systemctl): [ OK ]

Проверим есть ли доступ в интернет отправив 4 пакета на ya.ru:

ping -c 4 ya.ru
= вывод команды =
PING ya.ru (87.250.250.242) 56(84) bytes of data.
64 bytes from ya.ru (87.250.250.242): icmp_seq=1 ttl=51 time=13.9 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=2 ttl=51 time=94.4 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=3 ttl=51 time=19.8 ms
64 bytes from ya.ru (87.250.250.242): icmp_seq=4 ttl=51 time=17.5 ms

--- ya.ru ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.993/36.447/94.483/33.571 ms

Не отключаем SELINUX для FreeIPA

Так как при установке FreeIPA настройки для SELINUX устанавливаются автоматически то отключать нет смысла.

Обновляем без вопросов и перезагружаем сисетему:

yum -y update && reboot

Установка FreeIPA

Устанавливаем необходимые для FreeIPA пакеты без вопросов:

yum -y install ipa-server ipa-server-dns bind bind-dyndb-ldap

Непосредственная установка

Существует два способа установки:

  • с установкой DNS сервера,
  • без установки DNS сервера.

Red Hat рекомендует произвести установку и настойку DNS сервера.
Мы будем устанавливать с DNS сервером и это уверяю вас действительно удобно.

Ниже представлен лог установки который я почти весь перевел на русский язык.

ipa-server-install
= вывод команды с необходимыми изменениями =
Файл журнала для этой установки можно найти в файле /var/log/ipaserver-install.log
===================================
Данная программа позволит настроить IPA Server.

Это включает в себя:
* Настроить изолированный CA (dogtag) для управления сертификатами
* Настройка сетевого времени Демон (ntpd)
* Создать и настроить Directory Server
* Создание и настройка центра распространения ключей kerberos (KDC)
* Настроить Apache (httpd)

Чтобы принять значения по умолчанию указаны в скобках, нажмите клавишу Enter.

Вы хотите настроить DNS, интегрированной (BIND)? [no]: !!! yes

Введите полное доменное имя компьютера
на что вы настраиваете программное обеспечение сервера. 
Используя форму
<hostname>.<domainname>
Пример: master.example.com.

Имя хоста сервера [ipa.sevo44.loc]: !!! enter

Предупреждение: пропуск разрешение DNS-узла ipa.sevo44.loc
Имя домена определяется на основе имени узла.

Пожалуйста, подтвердите имя домена [sevo44.loc]: !!! enter

Протокол kerberos требует имя области должны быть определены.
Обычно это доменное имя преобразуется в верхний регистр.

Пожалуйста, укажите имя области [SEVO44.LOC]: !!! enter
 
Определенных операций сервера каталогов требуют права администратора.
Этот пользователь называется менеджер каталога и имеет полный доступ
каталог для задачи управления системой и будет добавлено
экземпляр сервера каталога созданы для ipa.
Пароль должен быть минимум 8 символов.

Directory Manager пароль: ******** 
Пароль (подтверждение): ********

IPA сервер требует права администратора, по имени 'admin'.
Этот пользователь является регулярным системе учетная запись, используемая для управления IPA сервера.

Пароль администратора IPA: ********
Пароль (подтверждение): ********

Checking DNS domain sevo44.loc., please wait ...
Do you want to configure DNS forwarders? [yes]: !!! enter

Following DNS servers are configured in /etc/resolv.conf: 8.8.4.4
Do you want to configure these servers as DNS forwarders? [yes]: !!! enter 
All DNS servers from /etc/resolv.conf were added. You can enter additional addresses now:
Enter an IP address for a DNS forwarder, or press Enter to skip: 8.8.8.8

DNS forwarder 8.8.8.8 added. You may add another.
Enter an IP address for a DNS forwarder, or press Enter to skip: 
Checking DNS forwarders, please wait ...
Do you want to search for missing reverse zones? [yes]: !!! enter
Do you want to create reverse zone for IP 192.168.0.102 [yes]: !!! enter

Please specify the reverse zone name [0.168.192.in-addr.arpa.]: 
Using reverse zone(s) 0.168.192.in-addr.arpa.

The IPA Master Server will be configured with:
Hostname: ipa.sevo44.loc
IP address(es): 192.168.0.102
Domain name: sevo44.loc
Realm name: SEVO44.LOC

BIND DNS server will be configured to serve IPA domain with:
Forwarders: 8.8.4.4, 8.8.8.8
Forward policy: only
Reverse zone(s): 0.168.192.in-addr.arpa.

Продолжить настройку системы с этими значениями? [no]: !!! yes

Следующие операции могут занимать несколько минут.
Пожалуйста, подождите, пока не вернетесь в приглашение.

Откинемся на спинку кресла и ждем...

Выдаст по окончанию результат.
------
Configuring NTP daemon (ntpd)
 [1/4]: stopping ntpd
 [2/4]: writing configuration
 [3/4]: configuring ntpd to start on boot
 [4/4]: starting ntpd
Done configuring NTP daemon (ntpd).
Configuring directory server (dirsrv). Estimated time: 1 minute
 [1/42]: creating directory server user
 = часть вывода скрыта =
 [42/42]: configuring directory to start on boot
Done configuring directory server (dirsrv).
Configuring certificate server (pki-tomcatd). Estimated time: 3 minutes 30 seconds
 [1/28]: creating certificate server user
 = часть вывода скрыта =
 [28/28]: updating IPA configuration
Done configuring certificate server (pki-tomcatd).
Configuring directory server (dirsrv). Estimated time: 10 seconds
 [1/3]: configuring ssl for ds instance
 [2/3]: restarting directory server
 [3/3]: adding CA certificate entry
Done configuring directory server (dirsrv).
Configuring Kerberos KDC (krb5kdc). Estimated time: 30 seconds
 [1/10]: adding sasl mappings to the directory
 [2/10]: adding kerberos container to the directory
 [3/10]: configuring KDC
 [4/10]: initialize kerberos container
WARNING: Your system is running out of entropy, you may experience long delays
 [5/10]: adding default ACIs
 [6/10]: creating a keytab for the directory
 [7/10]: creating a keytab for the machine
 [8/10]: adding the password extension to the directory
 [9/10]: starting the KDC
 [10/10]: configuring KDC to start on boot
Done configuring Kerberos KDC (krb5kdc).
Configuring kadmin
 [1/2]: starting kadmin 
 [2/2]: configuring kadmin to start on boot
Done configuring kadmin.
Configuring ipa_memcached
 [1/2]: starting ipa_memcached 
 [2/2]: configuring ipa_memcached to start on boot
Done configuring ipa_memcached.
Configuring ipa-otpd
 [1/2]: starting ipa-otpd 
 [2/2]: configuring ipa-otpd to start on boot
Done configuring ipa-otpd.
Configuring the web interface (httpd). Estimated time: 1 minute
 [1/19]: setting mod_nss port to 443
 = часть вывода скрыта =
 [19/19]: configuring httpd to start on boot
Done configuring the web interface (httpd).
Applying LDAP updates
Upgrading IPA:
 [1/9]: stopping directory server
 [2/9]: saving configuration
 [3/9]: disabling listeners
 [4/9]: enabling DS global lock
 [5/9]: starting directory server
 [6/9]: upgrading server
 [7/9]: stopping directory server
 [8/9]: restoring configuration
 [9/9]: starting directory server
Done.
Restarting the directory server
Restarting the KDC
Configuring DNS (named)
 [1/12]: generating rndc key file
 [2/12]: adding DNS container
 [3/12]: setting up our zone
 [4/12]: setting up reverse zone
 [5/12]: setting up our own record
 [6/12]: setting up records for other masters
 [7/12]: adding NS record to the zones
 [8/12]: setting up CA record
 [9/12]: setting up kerberos principal
 [10/12]: setting up named.conf
 [11/12]: configuring named to start on boot
 [12/12]: changing resolv.conf to point to ourselves
Done configuring DNS (named).
Configuring DNS key synchronization service (ipa-dnskeysyncd)
 [1/7]: checking status
 [2/7]: setting up bind-dyndb-ldap working directory
 [3/7]: setting up kerberos principal
 [4/7]: setting up SoftHSM
 [5/7]: adding DNSSEC containers
 [6/7]: creating replica keys
 [7/7]: configuring ipa-dnskeysyncd to start on boot
Done configuring DNS key synchronization service (ipa-dnskeysyncd).
Restarting ipa-dnskeysyncd
Restarting named
Restarting the web server
==============================================================
Установка завершена

Следующие шаги:
1. Вы должны убедиться, что эти порты открыты:
 TCP Ports:
 * 80, 443: HTTP/HTTPS
 * 389, 636: LDAP/LDAPS
 * 88, 464: kerberos
 * 53: bind
 UDP Ports:
 * 88, 464: kerberos
 * 53: bind
 * 123: ntp

Установка и конфигурирование закончено осталось выполнить требуемые действия указанные в логе установки.

Настройка FirewallD

О детальной настройке FirewallD вы можете посмотреть в статье «FirewallD базовая настройка«. Упуская детали я лишь добавлю все необходимые сервисы и порты.

Откроем необходимые порты и применим правила:

Для тестов лучше вообще не включать! При установке минимальной версии защиты нет!

firewall-cmd --permanent --zone=public --add-service={ntp,http,https,ldap,ldaps,kerberos,kpasswd,dns}
firewall-cmd --permanent --zone=public --add-port=53/tcp
firewall-cmd --permanent --zone=public --add-port=53/udp
firewall-cmd --reload
Результат после каждой команды должен быть -- success!

Проверим зону в которой работает система:

firewall-cmd --list-all --zone=public
= вывод команды =
 public (active)
 target: default
 icmp-block-inversion: no
 interfaces: eth0
 sources:
 services: ssh ntp http https ldap ldaps kerberos kpasswd dns
 ports: 53/tcp 53/udp
 protocols:
 masquerade: no
 forward-ports:
 source-ports:
 icmp-blocks:
 rich rules:

Всё хорошо. Все необходимые сервисы и порты открыты.

Проверка после установки

Получить билет kerberos с помощью команды:

kinit admin
= вывод команды =
 Password for admin@SEVO44.LOC: ********

Проверим полученный билет:

klist
= вывод команды =
 Ticket cache: KEYRING:persistent:0:0
 Default principal: admin@SEVO44.LOC

Valid starting Expires Service principal
 26.07.2016 02:47:02 27.07.2016 02:46:51 krbtgt/SEVO44.LOC@SEVO44.LOC

Как видим всё работает.

Добавление параметра DNS

Для того чтобы нам войти в панель управления по адресу ipa.sevo44.loc нам необходимо добавить нужный параметр в настройки DHCP сервера или добавить строчку в файл /etc/hosts на компьютере с которого хотим войти.

vi /etc/hosts
= необходимое изменении =
192.168.0.102 ipa.sevo44.loc

В моем случае работает DHCP сервер в сети под управлением CentOS 7 и мне необходимо было внести необходимые данные и перезагрузить службу:

vi /etc/dhcp/dhcpd.conf 
= вывод команды с требуемым параметром =
subnet 192.168.0.0 netmask 255.255.255.0 {
 option domain-name "sevo44.loc";
 option domain-name-servers 192.168.0.102;
 range 192.168.0.150 192.168.0.220;
 option routers 192.168.0.106;
 option subnet-mask 255.255.255.0;
 option broadcast-address 192.168.0.255;
 option ntp-servers 192.168.0.106;
 # PXE SERVER IP
 next-server 192.168.0.106;
 filename "pxelinux.0";
 }
systemctl restart dhcpd

Добавление аватара в базу LDAP

Единственное чего мне сразу не хватило в FreeIPA, это добавление аватарки в данные пользователя. В будущем это скорей всего появится ну а пока можно это сделать руками.

Получаем билет пользователя которому добавим аватар:

kinit sevo44
= вывод команды =
Password for sevo44@SEVO44.LOC: 
Password expired. You must change it now.
Enter new password: ******
Enter it again: ******

Проверим результат:

klist
= вывод команды =
Ticket cache: KEYRING:persistent:0:krb_ccache_eDplsFs
Default principal: sevo44@SEVO44.LOC

Valid starting Expires Service principal
06.10.2017 19:08:09 07.10.2017 19:08:09 krbtgt/SEVO44.LOC@SEVO44.LOC

Выведем информацию о пользователе:

ipa user-show --all sevo44
= вывод команды =
 dn: uid=sevo44,cn=users,cn=accounts,dc=sevo44,dc=loc
 Логин пользователя: sevo44
 Имя: Алексей
 Фамилия: Долотов
 Полное имя: Алексей Долотов
 Отображаемое имя: Алексей Долотов
 Инициалы: АД
 Домашний каталог: /home/sevo44
 GECOS: Алексей Долотов
 Оболочка входа: /bin/sh
 Principal name: sevo44@SEVO44.LOC
 Principal alias: sevo44@SEVO44.LOC
 Электронный адрес: info@sevo44.ru
 UID: 934400001
 ID группы: 934400001
 Должность:
 Учетная запись отключена: False
 Preserved user: False
 Пароль: True
 Member of groups: admincloud, ipausers, admin
 Kerberos ключей доступно: True
 ipauniqueid: f1f4385a-a115-11e7-98ed-36ef55e202fa
 krblastpwdchange: 20171006160809Z
 krbpasswordexpiration: 20180104160809Z
 objectclass: top, person, organizationalperson, inetorgperson, inetuser,
 posixaccount, krbprincipalaux, krbticketpolicyaux, ipaobject,
 ipasshuser, ipaSshGroupOfPubKeys, mepOriginEntry,
 ipauserauthtypeclass

Создадим файл файл Ldif где укажем нужные параметры и откуда брать файл аватара:

vim sevo44.ldif
= необходимые параметры =
dn: uid=sevo44,cn=users,cn=accounts,dc=sevo44,dc=loc
changetype: modify
add: jpegPhoto
jpegPhoto:< file:///root/avatar_sevo44_250.jpg

Предварительно закидываем нужный файл аватарки в требуемую папку.

LDAP не сохраняет изображения в качестве стандартного файла JPEG, он будет преобразован в base64. Рекомендуется использовать небольшое изображение, который вы будете хранить в LDAP.

Чтобы импортировать изображения в базу LDAP, используем команду ldapmodify:

ldapmodify -h ipa.sevo44.loc -p 389 -x -D "cn=Directory Manager" -W -f sevo44.ldif
= вывод команды =
Enter LDAP Password: ******
modifying entry "uid=sevo44,cn=users,cn=accounts,dc=sevo44,dc=loc"

Проверим правильность добавления аватарки в базу LDAP:

ipa user-show --all sevo44
= вывод команды =
 dn: uid=sevo44,cn=users,cn=accounts,dc=sevo44,dc=loc
 Логин пользователя: sevo44
 Имя: Алексей
 Фамилия: Долотов
 Полное имя: Алексей Долотов
 Отображаемое имя: Алексей Долотов
 Инициалы: АД
 Домашний каталог: /home/sevo44
 GECOS: Алексей Долотов
 Оболочка входа: /bin/sh
 Principal name: sevo44@SEVO44.LOC
 Principal alias: sevo44@SEVO44.LOC
 Электронный адрес: info@sevo44.ru
 UID: 934400001
 ID группы: 934400001
 Должность:
 Учетная запись отключена: False
 Preserved user: False
 Пароль: True
 Member of groups: admincloud, ipausers, admin
 Kerberos ключей доступно: True
 ipauniqueid: f1f4385a-a115-11e7-98ed-36ef55e202fa
 jpegphoto: /9j/4AAQSkZJRgABAQAAAQABAAD//gA7Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1c2luZyBJSkcgSlBFRyB2NjIpLCBxdWFsaXR5ID0gOTAK/9sAQwADAgIDAgIDAwMDBAMDBAUIBQUEBAUKBwcGCAwKDAwLCgsLDQ4SEA0OEQ4LCxAWEBETFBUVFQwPFxgWFBgSFBUU/9sAQwEDBAQFBAUJBQUJFA0LDRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU/8AAEQgAIAAgAwEiAAmY9N1nxffXhmjcw63Mj2+0IwY8Ox3ghcHuGb7u0ZUYKC0NKtaVdpyP//Z
 krblastpwdchange: 20171006160809Z
 krbpasswordexpiration: 20180104160809Z
 objectclass: top, person, organizationalperson, inetorgperson, inetuser, posixaccount, krbprincipalaux, krbticketpolicyaux, ipaobject, ipasshuser,
 ipaSshGroupOfPubKeys, mepOriginEntry, ipauserauthtypeclass

Видим что всё добавилось. Теперь на всех ресурсах подключенных к LDAP мы сможем видеть аватары пользователей что весьма удобно в работе.

По такому же принципу можно добавлять аватарки в любую базу LDAP.

Работа в панели FreeIPA

Панель FreeIPA выглядит очень дружелюбно и притом некоторые вещи показывает по русски что весьма радует. Так выглядит главная страница после авторизации:

На скрине ниже мы можем посмотреть куда настроено перенаправление если нет нужной записи в нашем DNS сервере:

В моем случае указаны DNS адреса google.

Добавление локальных хостов (сайтов) в DNS

Так выглядят все зоны DNS что обслуживаются в нашей локальной сети:

Добавление сводится к тому что надо нажать кнопку сверху справа «Добавить» и внести запись A указав название и ip адрес на котором находится ресурс:

Вот так все просто и наглядно и главное все показано в полном объеме необходимого функционала для обслуживание DNS сервера.

Добавление новой сторонней зоны DNS

Частенько когда в локальной сети работает ресурс он имеет доступ и с интернета. В моем случае это ресурс NextCloud к которому у меня настроен доступ как в локальной сети так и с интернета. Необходимо настроить чтобы находясь в локальной сети я работал на прямую с локальным ресурсом а когда работаю в других сетях доступ был через интернет и при этой чтобы ничего не переключать и не настраивать. Всё что нам надо это добавить новую зону и указать с какого IP ей работать если я подключен в локальную сеть.

Чтобы добавить нужную A запись после добавления зоны надо нажать на @ и внести нужный IP адрес.

Вывод

Мне понравилось оформление панели управление и тот функционал что я использую. Пробовал я разные варианты но этот для меня оказался самый лучший и главное стабильно работающий. Возможности большие и в документации вы сможете найти ответы на многие вопросы по работе с ним. Возможно в последствии я опишу как добавлять в домен машины как под управление Linux так и под управлением Windows. Исходя из последних ситуацией у моих клиентов чувствую что основной парк машин буду переводить на Linux. Уж больно достало всех уже «стабильность» систем Windows (особенно последней версии Windows 10 для которой матерные слова это уже самое малое что можно сказать).

PXE загрузочный сервер

Настроим загрузочный PXE сервер. Загрузить настроенную операционную систему на компьютере без жесткого диска всегда приятно. Использовать утилиты для диагностики и работы с жесткими дисками удобно и практично. Настройка на любом дистрибутиве Linux.

Введение

Давно хотел иметь в локальной сети загрузочный сервер PXE с помощью которого можно запускать на компьютерах не имеющих жесткого диска нужную мне операционную систему со всеми необходимыми настройками. Использование набора утилит для диагностики и работы с системой загружаемых по локальной сети тоже весьма удобная штука. В дистрибутиве Calculate Linux создание своего загрузочного образа делается просто, понятно и при хорошем знании позволяет творить чудеса.

После всех настроек мы получим возможность используя PXE загрузчик:

  • Загружать операционную систему Calculate Linux,
  • Проверить память программой Memtest86+,
  • Проверить жесткие диски программами MHDD и Victoria,
  • Работать с жесткими дисками программой Clonezilla.

Вся настройка производится на операционной система CentOS 7. Настроить можно и на любой другой системе, так как используемые пакеты присутствую во всех операционных системах Linux.

Подготовка системы для работы PXE сервера

Для загрузки по PXE в Bios подключаемого компьютера должна быть включена и настроена данная функция.

Установим необходимые пакеты без вопросов:

yum -y install dhcp xinetd tftp tftp-server nfs-utils syslinux

Настройка DHCP сервера

В локальной сети должен работать только один сервер DHCP.

Мои настройки будут производится на системе работающей в качестве шлюза локальной сети. Я не буду рассматривать настройку самого шлюза а лишь затрону моменты необходимые для нас.

Параметры сетевой карты которая смотрит во внутреннюю сеть:

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_PEERDNS=no
IPV6_PEERROUTES=no
IPV6_FAILURE_FATAL=no
NAME=enp0s8
UUID=d785f929-dcfb-436a-8ba7-59189a394aa6
DEVICE=enp0s8
# Загрузка при старте
ONBOOT=yes
IPADDR=192.168.1.1
PREFIX=24

Как видна моя внутренняя локальная сеть будет 192.168.1.0/24

Приведем конфигурационный файл DHCP сервера к следующему виду:

vim /etc/dhcp/dhcpd.conf
= вывод команды с необходимыми изменениями =
default-lease-time 32400;
max-lease-time 604800;
min-lease-time 7200;
log-facility local7;
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name "sevo44.loc";
option domain-name-servers 192.168.1.1;
range 192.168.1.150 192.168.1.220;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option ntp-servers 192.168.1.1;
#PXE SERVER IP
next-server 192.168.1.1;
filename "pxelinux.0";
}

Добавляем в автозагрузку:

systemctl enable dhcpd

Запустим службу:

systemctl start dhcpd

Использование DHCP сервера очень удобно, так как позволяет указывает различные параметры которые значительно упрощают жизнь при работе с локальной сетью.

Одно из таких возможностей, это закреплении ip адреса компьютера на основании мак адреса сетевой карты. Достаточно зная мак адрес нужного компьютера добавить в файл настройки DHCP строчки:

host hp4530 {
hardware ethernet 64:31:50:95:b1:b7; 
fixed-address 192.168.1.5;
}

После перезагрузки службы параметры вступят в силу:

systemctl restart dhcpd

Настройка TFTP сервера

TFTP сервер используется главным образом для первоначальной загрузки без дисковых рабочих систем. Настроим конфигурационный файл:

vim /etc/xinetd.d/tftp
= вывод команды с необходимыми изменениями =
service tftp
 {
 socket_type = dgram
 protocol = udp
 wait = yes
 user = root
 server = /usr/sbin/in.tftpd
 # Путь для расположения файлов
 server_args = -s /var/lib/tftpboot
 # Для включения поменяем yes на no
 disable = no
 per_source = 11
 cps = 100 2
 flags = IPv4
 }

Добавляем в автозагрузку:

systemctl enable xinetd

Запустим службу:

systemctl start xinetd

Настройка NFS сервера

Приведем файл настройки к виду:

vim /etc/exports
= вывод команды с необходимыми изменениями =
/var/lib/tftpboot/ 192.168.1.0/24(rw,no_root_squash)

Например, я использую сервер nfs для размещения бэкапов виртуальных машин Proxmox.

В моем случае необходимо добавить строчку:

/sevo44/pve/backup 192.168.0.100(rw,sync,no_root_squash,no_all_squash)

Где параметры имеют следующие значения:

  • /sevo44/pve/backup — расшариваемая директория;
  • 192.168.0.100 — IP адрес клиента с которого может быть подключение (можно указать 192.168.0.0/24 тогда будет возможность подключения для всей под сети);
  • rw – доступ на чтение и запись (может принимать значение ro-только чтение);
  • sync – синхронный режим доступа(может принимать обратное значение- async). sync (async) — указывает, что сервер должен отвечать на запросы только после записи на диск изменений, выполненных этими запросами. Опция async указывает серверу не ждать записи информации на диск, что повышает производительность, но понижает надежность, т.к. в случае обрыва соединения или отказа оборудования возможна потеря данных;
  • no_root_squash – запрет подмены uid/gid для суперпользователя (root). По умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать;
  • all_squash / no_all_squash — установка подмены идентификатора от всех пользователей all_squash — подмена запросов от ВСЕХ пользователей (не только root) на анонимного uid/gid, либо на пользователя, заданного в параметре anonuid/anongid. Используется обычно для публичного экспорта директорий. no_all_squash — запрет подмены uid/gid для от всех пользователей.

Создание папки и назначение прав доступа осуществляется командами:

mkdir -p /sevo44/pve/backup
chmod -R 777 /sevo44/pve/backup

Для полноценной работы необходимо открыть доступ необходимым портам. Для FirewallD команды имеют вид:

firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=54302/tcp
firewall-cmd --permanent --add-port=20048/tcp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=46666/tcp
firewall-cmd --permanent --add-port=42955/tcp
firewall-cmd --permanent --add-port=875/tcp
firewall-cmd --permanent --zone=public --add-service=nfs
firewall-cmd --permanent --zone=public --add-service=mountd
firewall-cmd --permanent --zone=public --add-service=rpc-bind
= применим изменения =
firewall-cmd --reload

Внимательно отнеситесь к указанию зоны! Более подробно можно прочитать в статье FirewallD базовая настройка.

Добавляем в автозагрузку:

systemctl enable nfs-server

Запустим службу:

systemctl start nfs-server

Создание загрузочного меню PXE сервера

Скопируем необходимые файлы для работы меню:

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot
cp /usr/share/syslinux/memdisk /var/lib/tftpboot
cp /usr/share/syslinux/mboot.c32 /var/lib/tftpboot
cp /usr/share/syslinux/chain.c32 /var/lib/tftpboot

Создадим папку для файлов меню загрузки:

mkdir /var/lib/tftpboot/pxelinux.cfg

Создание главного меню PXE сервера

В главном меню мы будем использовать варианты загрузки системы и переход на подменю с утилитами по паролю.

Создадим файл главного меню:

mcedit /var/lib/tftpboot/pxelinux.cfg/default
= необходимые параметры с комментариями =
default vesamenu.c32
# Фон для меню
menu background backgrounds/fon.png
prompt 0
# Время через которое стартует первый пункт меню
timeout 100

menu title ##### PXE BOOT MENU: #####

Label 10
menu label Calculate 17 KDE & SEVO44
kernel live/calculate/cld17kde/boot/vmlinuz
append initrd=live/calculate/cld17kde/boot/initrd root=nfs:192.168.1.1:/var/lib/tftpboot/live/calculate/cld17kde calculate=lang:ru_RU,keymap:ru_RU,timezone:Europe/Moscow rw selinux=0

LABEL # ADMIN SETTINGS

LABEL 20
# Пароль для запуска
menu passwd 777
MENU LABEL Utilits
KERNEL vesamenu.c32
APPEND pxelinux.cfg/utilits

Label # BOOT LOCAL

label 30
menu label Boot from local drive
localboot 0

Файл фонового изображения меню должен быть размером 640х480 пикселей, в формате PNG или JPEG.

Создадим папку для фоновых изображений и папку для загрузочных live образов систем:

mkdir /var/lib/tftpboot/live
mkdir /var/lib/tftpboot/backgrounds

Загружаем необходимый iso образ любыми удобными вам способами и копируем содержимое в нужную папку.

При использовании образа с графической оболочкой KDE для стабильной работы необходимо использовать 4 G оперативной памяти!

Приведу лишь команды которые необходимы для монтирования и размонтирования образа iso:

mount -o loop /root/calculate_kde_sevo44.iso /mnt/iso
umount /mnt/iso

Настройки параметров для загрузки разных операционных систем различаются.

В данной настройке по умолчанию грузится live образ. В случае если вам необходима по умолчанию загрузка с жесткого диска, то разместите необходимый пункт первым в меню.

Моё главное меню:

Создание подменю для PXE сервера

Все утилиты я намеренно вывел в отдельное подменю и закрыл паролем. Так мне спокойней и пользователи не полезут туда куда им не надо.

Мой файл подменю для utilits выглядит так:

mcedit /var/lib/tftpboot/pxelinux.cfg/utilits
= вывод команды с пояснениями =
default vesamenu.c32
menu background backgrounds/fon.png

menu title ##### Utilits: #####

label # TEST

LABEL 10
MENU LABEL Memtest86+
KERNEL utilits/memtest86

LABEL 11
MENU LABEL MHDD
kernel memdisk
initrd utilits/mhdd32ver4.6.iso
append iso raw

LABEL 12
MENU LABEL Victoria 3.5 HDD
kernel memdisk
initrd utilits/v35.iso
append iso raw

label # Backup/Recovery

LABEL 20
MENU LABEL Clonezilla Live 2.5.2-17
KERNEL utilits/zilla/live/vmlinuz
APPEND initrd=utilits/zilla/live/initrd.img boot=live username=user union=overlay config components quiet noswap edd=on nomodeset nodmraid locales=ru_RU.UTF-8 keyboard-layouts=NONE ocs_live_run="ocs-live-general" ocs_live_extra_param="" video=uvesafb:mode_option=1024x768-16 ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=tftp://192.168.1.1/utilits/zilla/live/filesystem.squashfs

Label ###
LABEL 30
MENU LABEL NEXT
KERNEL vesamenu.c32
APPEND pxelinux.cfg/default

Скачать необходимый iso образ Clonezilla вы на сайт разработчика. На сайте вы можете найти всю необходимую информацию для настройки и работы с этой замечательной системой.

Скачать утилиты использованные в данном описании.

Моё меню с утилитами:

Видео

На видео показано как работает система Calculate Linux которую я настроил под свои нужды запускаемая с помощью PXE сервера.

Вывод

Имея под рукой такой сервер я без труда могу запустить на любом компьютере, с возможностью PXE загрузки, операционную систему и поработать в ней. Можно загрузить ClineZilla и произвести любые манипуляции с жесткими дисками. Конечно система с KDE тяжеловата и я обязательно настрою образ с XFCE, для работы на компьютерах со слабыми техническими параметрами.