Несколько месяцев назад компания, в которой я работаю начала снова расширяться, следствием чего было появление двух новых офисов. Руководством была поставлена задача обеспечить доступ новых сотрудников к серверам компании. Ниже представлено описание того, как я подошел к решению данной задачи, черпая информацию в Google, man-командах FreeBSD и встроенной помощи в Cisco IOS.
Смотрим, что из этого получилось.
Исходные данные и постановка задачи
- Три офиса компании, между которыми необходимо настроить связь через общественные сети. Внутри туннелей запустить протокол динамической маршрутизации для обмена маршрутами к локальным сетям.
- Между двумя филиалами есть прямой оптоволоконный канал.
- Топология должна быть полносвязной, для наличия резервных маршрутов.
- Связь с внешним миром обеспечивают: маршрутизаторы Сisco 2821, Сisco 2811, и сервер на базе FreeBSD 8.1. Маршрутизаторы подключены к внешнему миру по Ethernet каналу, а FreeBSD 8.1 через ADSL. В маршрутизаторы вставлены модули Ethernet коммутации на 4ре порта, таким образом шлюзом по умолчанию для подсетей, за которые ответственны маршрутизаторы, является интерфейс Vlan1.
Данные по подсетям:
- офис A — подсеть 192.168.20.0/24, шлюз 192.168.20.254 (FreeBSD 8.1), внешний адрес A.A.A.A
- офис B — подсеть 192.168.19.0/24, шлюз 192.168.19.254 (Cisco 2821), внешний адрес B.B.B.B
- офис C — подсеть 192.168.18.0/24, шлюз 192.168.18.254 (Cisco 2811), внешний адрес C.C.C.C
Итак, между двумя филиалами уже есть прямой оптоволоконный канал, который находится в собственности организации. Таким образом, один канал уже присутствует и практически не нуждается в конфигурировании. Осталось организовать два туннеля: первого (А) с третьим © и второго (В) с третьим © филиалами — через общественные сети (Интернет). Для организации защиты данных туннелей предполагается использовать стандарт IPsec. Раз топология должна быть полносвязной, то встает вопрос правильной маршрутизации данных. Списки доступа для шифрования вместе со статическими маршрутами для этого плохо подходят. Поэтому было решено запустить внутри туннелей протокол динамической маршрутизации. В качестве последнего принято решение использовать OSPF, а для его запуска в туннелях — протокол GRE (Generic Routing Encapsulation). Таким образом, возникла задача построить два GRE-туннеля, защищенных протоколом IPsec.
Читать дальше →
Хочу рассказать, как относительно быстро восстановить работоспособность умершего freebsd сервера, либо перенести полностью сервер с одной машины на другую. Для этого нам понадобится программа для архивации fsbackup и live-cd с freebsd. Сразу предупреждаю, что это не how to, нужен некоторый уровень знания и понимания freebsd.
Первым делом сделаем сам архив. Для архивирования любых данных я использую простую и удобную программу fsbackup. Подробнее о ней можно узнать тут. В конфиге комментарии на русском языке, так что с настройкой проблем быть не должно. Архив можно хранить локально, на удаленном ftp, либо заливать через ssh на другой сервер. Поддерживается шифрование, создание инкрементных бэкапов. Программа живет в портах /usr/ports/sysutils/fsbackup Для бэкапа системы я использую следующий конфиг:
$cfg_backup_name = «srv12_domain_local»;
$cfg_cache_dir = "/usr/local/fsbackup/cache";
$prog_md5sum = «md5sum -b»;
$prog_tar = "/usr/bin/tar";
$prog_ssh = "/usr/bin/ssh";
$prog_rm = "/bin/rm";
$prog_gzip = "/usr/bin/gzip";
$prog_pgp = «gpg»;
$cfg_checksum = «timesize»;
$cfg_backup_style = «backup»;
$cfg_increment_level = 7;
$cfg_save_old_backup = 1;
$cfg_type = «remote_ftp»;
$cfg_remote_ftp_mode = 0;
$cfg_remote_password = «password»;
$cfg_local_path = "/mnt/backup/srv12/system";
$cfg_time_limit = 0;
$cfg_size_limit = 0;
$cfg_maximum_archive_size = 0;
$cfg_root_path = "/";
$cfg_verbose = 2;
$cfg_stopdir_prune=0;
1;
__DATA__
#Архивируем весь сервер с корня
/
#Указываем папки исключения, которые бэкапить не нужно
!/dev
!/mail
!/mnt
!/usr/ports
!/var/db/portsnap
!/usr/local/fsbackup/cache
!/web/squidcache
!/web/mysql
!/usr/src
!/usr/local/www/data-dist/netams
Я архивирую весь сервер, за исключением некоторых папок, которые указаны отдельно.
Архив мы получили, теперь нужно подготовить сервер, на который будет осуществляться перенос. Для этого на исходном сервере необходимо открыть /etc/fstab
/dev/ar0s1b none swap sw 0 0
/dev/ar0s1a / ufs rw 1 1
/dev/ar0s1f /mail ufs rw 2 2
/dev/ar0s1d /tmp ufs rw 2 2
/dev/ar0s1e /usr ufs rw 2 2
/dev/ar0s1g /var ufs rw 2 2
/dev/ar0s1h /web ufs rw,suiddir,noatime 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
запомнить существующие разделы и затем создать такие же разделы на другом сервере. Размер разделов может не совпадать, достаточно просто наличие таких же разделов. Я разбиваю диск с помощью установочного диска freebsd и custom install на нем: разбиваю непосредственно диск и ставлю загрузчик freebsd. После того, как создали разделы, копируем наш бэкап куда-нибудь, чтобы потом можно было его забрать на второй сервер, загрузившись с live-cd. Можно скопировать на ftp, можно на флешку, можно просто в виндовую шару положить и потом ее подмонтировать. Вместе с архивом нужно скопировать скрипт fsrestore.sh, который лежит в /usr/local/fsbackup/scripts. Этот скрипт будет выполнять непосредственно восстановление системы.
Теперь берем live-cd, я использую Frenzy, и грузимся с него. В принципе, пользоваться можно чем угодно, любым live-cd с freebsd, но мне нравится именно Frenzy. После загрузки имеем полноценную систему, которая автоматически подмонтировала созданные нами ранее разделы. Подмонтированы они в режиме чтения, так что сначала отмонтируем их.
umount /dev/ad4s1a
и так далее со всеми разделами.
Затем в папке /mnt создадим папки с именами разделов нашей системы, которую мы переносим. В моем случае это папки /mnt/tmp, /mnt/usr, /mnt/var, /mnt/web, /mnt/mail.
Далее монтируем разделы в только что созданные папки, при этом раздел / монтируем в /mnt
mount /dev/ad4s1a /mnt
mount /dev/ad4s1f /mnt/mail
mount /dev/ad4s1d /mnt/tmp
mount /dev/ad4s1e /mnt/usr
mount /dev/ad4s1g /mnt/var
mount /dev/ad4s1h /mnt/web
Теперь нужно подмонтировать флешку с архивом:
mount_ntfs /dev/da0s1 /mnt/backup
Не забываем заменить /dev/da0s1 на то устройство, каким является флешка у вас.
Можно вместо флешки подмонтировать виндовую шару. Перед монтированием шары стоит не забыть настроить сеть либо через sysinstall, либо сразу c помощью ifconfig:
ifconfig eth0 192.168.0.15 netmask 255.255.255.0
ifconfig eth0 up
Монтируем шару:
mount_smbfs -I 192.168.0.2 -E koi8-r:cp866 //user@comp/shara /mnt/backup
user – имя пользователя шары, comp – имя компьютера в сети shara – имя шары
Итак, у нас есть бэкап, есть подмонтированные разделы будущей системы. Теперь можно начать восстановление. Для этого редактируем скрипт fsrestore.sh. В нем нужно изменить только две строчки:
# Директория где находится бэкап.
backup_path="/mnt/backup"
# Корневая директория куда будут помещены данные восстановленные из бэкапа.
restore_path="/mnt"
После этого запускаем скрипт и ждем завершения. Лучше бэкап скопировать куда-нибудь локально, и затем запускать восстановление. Так будет быстрее и надежнее. После завершения восстановления, проверяем файлы. В данный момент в папке /mnt должна находиться копия нашего сервера.
Сейчас нужно внести некоторые изменения в конфигурацию. Первым делом обязательно нужно отредактировать файл /mnt/etc/fstab так как имена дисков в разных серверах могут быть разными. На исходном сервере у меня было зеркало ar0, перенес же я на одиночный хард ad4. Соответственно, меняем в fstab ar0 на ad4. Тут же можно поменять сетевые и прочие настройки в rc.conf но это уже не критично. Все остальное можно будет изменить загрузившись в системе. Если же не отредактировать fstab, то, скорее всего, мы не загрузимся.
После восстановления перезагружаем компьютер, вытаскиваем live-cd, логинимся в систему. Осталось выполнить последнее действие. Вместе с непосредственно архивом fsbackup создает файлик с правами доступа и владельцами на все файлы и папки в архиве. Файл этот имеет расширение .dir Во время восстановления скрипт не отработал и не расставил нужные права, так как путь восстановления был не в / а в /mnt, поэтому пути в файле не совпадали с путем восстановления. Так что теперь нам нужно вручную исполнить этот файл, чтобы полностью восстановить все права и владельцев. Для этого ставим ему права на исполнение и запускаем. После его исполнения мы имеем точную копию системы.