26 августа 2015

Сервер сетевой загрузки в среде Linux

 Если вы системный администратор, либо очень часто сталкиваетесь с ремонтом ПК, наверняка встречали ситуации когда необходимо реанимировать систему, восстановить данные, разбить жесткий диск на разделы, исправить загрузчик, или произвести диагностику железа. А если необходимо установить операционную систему не на один компьютер, а на 10 или более? Что делать если в ПК отсутствует привод CD/DVD, а флеш карты под рукой не оказалось в настоящий момент? Что делать если мы хотим работать с системой через тонкий клиент к примеру  с дистрибутивами Tails или Kali linux? В этом случае нам поможет сервер сетевой загрузки.

Итак приступим.


Имеем:

1. Чистую, предустановленную ОС Ubuntu 14.04;
2. 2 сетевые карты: eth0 — смотрящая в интернет и eth1- смотрящая в
локальную сеть.

Хотим получить:

Сервер сетевой загрузки на базе DNS, DHCP и TFTP сервера dnsmasq


! Все команды необходимо выполнять с привилегиями root:
sudo su


Обновляемся:

# apt-get update -y; apt-get upgrade -y; apt-get dist-upgrade -y



Теперь необходимо отредактировать сетевые интерфейсы. Это можно
сделать при помощи встроенного редактора nano.


# nano /etc/network/interfaces


Приведем конфиг к следующему виду:


auto eth0
iface eth0 inet static
address 172.18.0.106
netmask 255.255.240.0
gateway 172.18.0.1
dns-nameservers 172.18.0.1 208.67.222.222

auto eth1
iface eth1 inet static
address 192.168.31.1
netmask 255.255.255.0

post-up /etc/nat

! Внимание, если eth0 получает адрес от DHCP, необходимо это указать:

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
address 192.168.31.1
netmask 255.255.255.0

post-up /etc/nat


Сохраним настройки сетевых интерфейсов при помощи комбинации клавиш Ctrl+O и выходим из nano Ctrl+X.


Теперь необходимо перезапустить сеть:


# service networking restart



Далее нам необходима технология NAT. Настройку NAT мы будем
осуществлять при помощи утилиты iptables.


NAT (от англ. Network Address Translation — «преобразование сетевых
адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.

IPTables — утилита командной строки, является стандартным интерфейсом, управления работой межсетевого экрана (брандмауэра) netfilter для ядер Linux.


Создадим файл:


# touch /etc/nat && nano nat


Впишем следующие правила для iptables:


#!/bin/sh


#Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward


#Разрешаем траффик на lo
iptables -A INPUT -i lo -j ACCEPT

#Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT


#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.31.0/24 -j MASQUERADE


#Разрешаем ответы из внешней сети
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT


#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT


Сохраним наши правила CTRL+O


Дадим нашему файлу право на исполнение:


# chmod +x /etc/nat; reboot



Для раздачи сетевых адресов, DNS, TFTP сервера установим dnsmasq.


Dnsmasq — легковесный и быстроконфигурируемый DNS-, DHCP- и TFTP
сервер, предназначенный для обеспечения доменными именами и связанными с ними сервисами небольшие сети. Может обеспечивать именами локальные машины, которые не имеют глобальных DNS-записей. DHCP-сервер интегрирован с DNS-сервером и даёт машинам с IP-адресом доменное имя, сконфигурированное раннее в конфигурационном файле. Поддерживает привязку IP-адреса к компьютеру или автоматическую настройку IP-адресов из заданного диапазона и BOOTP для сетевой загрузки бездисковых машин.


# apt-get install dnsmasq


Начнем редактирование /etc/dnsmasq.conf


# nano /etc/dnsmasq.conf

listen-address=127.0.0.1, 192.168.31.1 - # Указывает какую подсеть будет слушать dnsmasq

dhcp-range=192.168.31.100,192.168.31.199,255.255.255.0,12h # Указывает диапозон выдаваемых ip адресов и срок их аренды

interface=eth1 - # Интерфейс который будет обслуживать dnsmasq

server=8.8.8.8 - # DNS вышестоящих серверов в данном случае google

enable-tftp - # Активировать TFTP сервер

tftp-root=/home/tftpboot - # Корневой каталог для него

dhcp-boot=pxelinux.0 - # Загрузчик который будет отдаваться по сети

Перезапустим dnsmasq:

# service dnsmasq restart


Если всё настроено правильно при подключении локальных машин в сеть
192.168.31.0/24 машины должны получить сетевые адреса и иметь
возможность пользоваться интернетом.


Создадим рабочие директории:


# sudo mkdir -p /home/tftpboot/images/
# sudo mkdir /home/tftpboot/pxelinux.cfg

Перезапустим серис:


# sudo service dnsmasq restart


Теперь нам необходимо получить загрузочные программы из проекта syslinux.
SYSLINUX Project — набор загрузчиков ядра Linux (автор H. Peter Anvin),
состоит из нескольких отдельных загрузчиков, самым известным из которых является isolinux. В их число входит и загрузчик syslinux, давший название всему проекту.

# cd /tmp; wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz

! Существуют более поздние стабильные версии syslinux, но почему то у меня завелось именно с этой.


Установим Midnight Commander и запустим его:

Midnight Commander (mc, ми́днайт-кома́ндер, «полуночный командир») —
один из файловых менеджеров с текстовым интерфейсом типа Norton
Commander для UNIX-подобных операционных систем, а также Microsoft
Windows и Windows NT, OS/2, Mac OS X (но не Mac OS 9).


# apt-get install mc -y; mc; exit


Входим в скачанный архив, просто переместив выделение к нему и нажав
Enter. Из него в директорию /home/tftpboot/ надо скопировать несколько
файлов — pxelinux.0 из папки /core, menu.c32 из /com32/menu и memdisk из одноимённого каталога.


Редактируем default:


sudo nano /home/tftpboot/pxelinux.cfg/default


Запишем в этот файл следующие строки:


DEFAULT menu.c32
TIMEOUT 600
MENU TITLE -=My netboot server=-
LABEL HDDBoot
MENU LABEL Local Boot
MENU DEFAULT
LOCALBOOT 0


LABEL Memtest86+
MENU LABEL Memtest86+
KERNEL images/memtest


label Victoria
kernel memdisk
initrd images/viki.iso
APPEND iso raw


Сохраним файл при помощи Ctrl+O и закроем Ctrl+X.


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

https://cloud.mail.ru/public/Mv73/z2UZQcGQ9


Достаем из архива эти 2 файла и помещаем в директорию home/tftpboot/images/ на нашем сервере. Сделать это можно при помощи программы WinScp не буду заострять на этом внимание. Перезапускаемся командой:

 # sudo reboot.

Теперь если на клинской машине в BIOS включена опция PXE boot и мы указали загрузку с PXE, то при старте компьютера появится меню нашей сетевой загрузки.


! Образы Виктории и Memtest86 можно так же скачать на официальных сайтах этих программ:

http://www.memtest.org/
http://hdd-911.com/



На этом первая часть статьи заканчивается. Вторым номером будет загрузка по сети linux LiveCD и windows PE дистрибутивов.

При написании статьи использовались материалы по следующим ссылкам:


http://www.3dnews.ru/workshop/625306

P.S. Будут вопросы, задавайте в комментариях, с удовольствием отвечу.

Автор статьи Дмитрий Бобриков.

Удачи.

15 комментариев :

  1. Доброго времени суток. Не совсем понятно про 2 сетевые карты - для PXE хватит и 1. 2 нужно если мы хотим этим же сервером раздать интернет.

    ОтветитьУдалить
    Ответы
    1. Доброго времени, далее планируется статья о без дисковых машинах, вот им то и будет раздаваться интернет. Всё верно для PXE достаточно одной карточки.

      Удалить
    2. Ну могу посоветовать тогда по шлюзу для инета - горький опыт научил делать его в виртуалке) Так как при падении сервака поднять шлюз на другой машине займет пару минут.... но это уже лирика

      Удалить
    3. Конечно, мы тут все и собрались для того что бы поделиться опытом. Подозреваю вы говорите о Clonezilla ? В среде виртуализации снапшот, настроил систему - сделай снапшот, если после обновок или настроек траблы - откатился назад. А вообще рекомендуют бэкапить конфиги, раскатал чистенькую систему вкинул конфиги и всё работает. Но это- лирика )

      Удалить
  2. мне вот что не понятно :" если в ПК отсутствует привод CD/DVD, а флеш карты под рукой не оказалось в настоящий момент"то от куда мы "
Имеем:

    1. Чистую, предустановленную ОС Ubuntu 14.04;"

    ОтветитьУдалить
    Ответы
    1. "Не оказалось" - имеется в виду на КЛИЕНТСКОЙ машине. Статья о том, как превратить Ubuntu в СЕРВЕР, с помощью которого клиентские машины смогут загружаться по сети в аварийных ситуациях.

      Удалить
  3. ну да,понятно.давайте вторую часть,тут всё ясно :соединились с клиентскими компьютерами прямо в биос.если я чего понял не так поправьте.а две сетевые карты это две железяки в моём компьютере должны стоять?

    ОтветитьУдалить
    Ответы
    1. Если в последующем раздавать интернет на без дисковые машины не нужно, а достаточно только PXE загрузки то сойдёт и одна сетевая карта.

      Удалить
  4. Еще было бы не плохо сразу поднять nfs сервер

    ОтветитьУдалить
  5. как я понимаю что предположительно клиентские машины без установленной ОС?

    ОтветитьУдалить
    Ответы
    1. Естественно ! Для этого и есть сервер сетевой загрузки. Установка ОС, Запуск ОС Live CD и Windows PE, запуск инструментов диагностики из сети.

      Удалить