четверг, 23 июня 2016 г.

Делаем backup virtualbox VM по-неправильному

Исходные данные: 
Xubuntu 14.04 server (64 разряда), на нем virtualbox с единственной VM, и это, как легко догадаться, Win-server.


  Тому, как бэкапить винду ее собственными средствами посвящены гигабайты в других местах, дело это простое и понятное... ровно до того момента как ее нужно восстанавливать... Отсюда и есть пошла виртуализация, и копирование VM (Виртуальной машины) целиком. Если все делать совсем правильно, следует ознакомится с этой вот статьей в качестве примера. Можно еще подумать в сторону lvm.
  Мы будем делать не правильно и по-тупому - приостановил, скопировал, отпустил работать дальше. Собственно скрипт (запуск по четвергам из крона чуть за полночь).

#!/bin/bash

# DEFAULTS
OLDFILE=10

# Config file in $1, if absent - default config from /usr/local/etc/vm/vm.conf
if [ ! -z ${1} ] ; then
 test -r ${1} && . ${1}
else
. /usr/local/etc/vm/vm.conf
fi

# Remove olds
icount=0
for i in `ls -r $BACKUPDIR/vm-$VBOXNAME-20*` ; do
 if [ $((icount++)) -ge $((OLDFILE))  ] ; then
  rm -f "$i"
  echo "$i" " removed"
 fi
done

echo `date +%F%t%X` "stop vm"
VBoxManage controlvm ${VBOXNAME} savestate
sync
sleep 10
echo `date +%F%t%X` "tar vm"
DATETIMENOW=`date -I`
tar cvf $BACKUPDIR/vm-$VBOXNAME-$DATETIMENOW.tar $VBOXPATH
sync
sleep 10
echo `date +%F%t%X` "start vm"
VBoxHeadless --startvm ${VBOXNAME} &
nice gzip $BACKUPDIR/vm-$VBOXNAME-$DATETIMENOW.tar
echo `date +%F%t%X` "tar gziped"
~
И к нему конфиг
# settings
VBOXPATH="/home/storage/virtualbox"
VBOXDVD="host:/dev/cdrom"
VBOXNAME="Win2008r2"
VBOXOS="Windows2008_64"
VBOXRDEADDR="10.0.0.1"
VBOXRDEPORT="3389"
BACKUPDIR=/home/storage/backup/vms
OLDFILE=15
  Конфиг общий для скриптов управления и бэкапа. Это традиция. Что касается скрипта, в самом начале или конфиг из файла, имя которого передается в качестве аргумента при запуске, или по умолчанию. Потом стирание старых копий. Потом приостановка - копирование - запуск. Ну и в конце ужимаем полученный архив (жмется в 3 раза, есть смысл).

среда, 15 июня 2016 г.

Ubuntu-сервер в качестве pptp-клиента Windows-2008

Исходные данные: 
Xubuntu 14.04 server (64 разряда), не единственный, но на нем установлен squid и openvpn нужно подключить к внешнему Win-серверу для подготовки и сдачи каких-то там экзаменов (учеников пимерно 20 - 50 и они ходят через squid наружу).  Есть инструкция с картинками про Win7.

  Начнем с инструкции. Суть ее такова. Есть ip-адрес, имя и пароль и еще ip, на который ломиться броузером. Все по умолчанию. В конце скромно сказано, что если нужен параллельный доступ в интернет (default route явно поворачивается в сторону туннеля, то нужно сделать...) - делаем пометку, что скорее всего там целая сеть, маршрут на которую не отдается автоматом, а вместо этого используется default. Нам достаточно сделать доступ для squid-а, и можно обойтись без NAT-а. 

Проверяем на крысах.

Берем рабочую станцию с установленным Network-manager и пробуем в ручном режиме подобрать параметры соединения. Это не слишком сложно. Вот пара картинок, что у нас получилось. Заодно это наикратчайшее руководство по подключения к Win-Server



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

Конфигурация pptp-клиента

 Несмотря на некоторую избитость темы, толкового руководства как-то не случилось. Самое подходящее и еще, хоть там и про сервер. Ну и чтение man-ов никто не отменял.

 /etc/ppp/options.pptp приводим к виду.

# Lock the port
lock

# Authentication
# We don't need the tunnel server to authenticate itself
noauth

# We won't do PAP, EAP, CHAP, or MSCHAP, but we will accept MSCHAP-V2
# (you may need to remove these refusals if the server is not using MPPE)
refuse-pap
refuse-eap
refuse-chap
refuse-mschap
Все остальное комментарим.

/etc/chap-secrets содержит

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses

"student" OLIMPOKS "passwordfrominstruction"
Дали разумное имя (OLIMPOKS, оно нужно для идентификации, см. ниже...).

 Собственно опции для этого соединения (имя соединения при вызове будет olimpoks, не путать, оно на нижнем регистре) содержатся в новом файле /etc/ppp/peers/olimpoks

# Olimpoks

pty "pptp 95.181.47.90 --nolaunchpppd"  #тип и адрес сервера
name student                            #логин 
remotename OLIMPOKS                     #имя соединения
require-mppe-128                        #включаем поддержку MPPE
nodefaultroute                          #не создавать маршрут по умолчанию
unit 12                                 #номер ppp интерфейса, число счастливое
persist                                 #переподключаться при обрыве
maxfail 30                              #количество попыток переподключения
holdoff 40                              #интервал между подключениями секунд
file /etc/ppp/options.pptp
ipparam olimpoks-pptp
В последней строке имя скрипта (на самом деле их два up и down, но, как показали испытания, второй нам не нужен, маршруты гибнут вместе с падением интерфейса.

Устраиваем натурные испытания и пишем скрипт.

 Ну испытания состоят из совсем простых действий, запускаем pon olimpoks nodetach, смотрим маршруты и пробуем вручную прописать минимальный набор. В нашем случае достаточно только на хост. Строку с добавлением маршрута один-в-один заталкиваем в скрипт. 
Вот он, /etc/ppp/ip-up.d/olimpoks-pptp - имя из предыдущего файла.  И внутри

#! /bin/bash

route add -host 100.10.1.13 dev ppp12
Та самая строка.

 Пробуем по-взрослому, без nodetach и смотрим маршруты. Все хорошенько проверяем. Осталось для верности повесть табличку "прохода нет". В конфиг firewall-а добавляем пару строк...

#!/bin/bash

# Интерфейсы
export PPP=ppp12


### Для туннеля отдельно все сделаем
# Разрешить входящие пакеты для установленных нами соединений
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -i ${PPP} -j ACCEPT
# Дропаем тупо все остальное
 iptables -A INPUT -i ${PPP} -j DROP
#### Конец туннеля
Пока все!