среда, 5 февраля 2014 г.

Создание и установка бесплатного сертификата SSL для exim и dovecot

Если нужно создать и настроить бесплатный подписанный сертификат для почты exim и dovecot, то ниже описана инструкция.

Первым делом нужно зайти на сайт http://www.startssl.com и создать учетную запись:

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

После ввода пароля будет меню по выбору размера ключа. Я выбираю 2048.
Появится окно об успешной установке сертификата в браузер. Именно этот сертификат и будет подтверждать кто есть пользователь. Потом жмем finish.

Дальше зайти в меню "Walidations wizard" и указать свой домен. Затем выбрать адрес электронной почты среди предоставленных, обычно postmaster/hostmaster/webmaster@$domain для получения письма подтверждения. Таким образом произойдет подтверждение домена.

Затем в меню "Certificates Wizard" выбираем в "Select Certificate Purpose" значение "Web Server SSL/TLS certificate".

Предварительно создаем пароль, которые удовлетворяет требованиям сайта. Сохраняем пароль -- он потом пригодится.

Сохраняем предложенный ключ в файле startssl/ssl-crypt.key и, используя сохраненный пароль получаем открытый ключ с помощью этой команды:

openssl rsa -in ssl-crypt.key -out ssl.key

Затем, кликая дальше мышкой получаем сертификат, который сохраняем в ssl.crt.

Загружаем http(s)://www.startssl.com/certs/ca.pem в startssl/ca.pem.
Загрузка с https доступна после авторизации по ссл-ключу.

В конфигурационном файле exim добавляем строки:

tls_certificate               = EXIM_DIR/startssl/ssl.crt
tls_privatekey                = EXIM_DIR/startssl/ssl.key
tls_advertise_hosts           = *
tls_verify_certificates       = EXIM_DIR/startssl/ca.pem
tls_on_connect_ports          = 465

А также нужно убедиться, что в daemon_smtp_ports есть 465 порт.
После перечитывания конфига exim на 465 порту начинает работать TLS.

В dovecot.conf пришлось добавить строки:

ssl_cert = </usr/local/etc/exim/startssl/ssl.crt
ssl_key = </usr/local/etc/exim/startssl/ssl.key

и перечитать конфиги. Все! smtp/imap/pop3 с шифрованием SSL и подписанным ключом настроены! Теперь пользователям не придется заморачиваться с самоподписанными сертификатами и объяснениями что нужно нажать пользователю, чтобы сертификат работал в почтовом клиенте.

вторник, 5 ноября 2013 г.

Как я переводил телефон Cisco 7940G на SIP

Мне понадобилось перенастроить телефон циско 7940G на работу в режиме протокола SIP.

Изначально телефон был с прошивкой:

sw-c3524-pwr#show cdp neighbors fastEthernet 0/14 detail
-------------------------
Device ID: SEP0012xxxxxx
Entry address(es):
Platform: Cisco IP Phone 7940,  Capabilities: Host
Interface: FastEthernet0/14,  Port ID (outgoing port): Port 1
Holdtime : 131 sec

Version :
P0030301MFG2

advertisement version: 2
Duplex: full
Power drawn: 6.300 Watts
Management address(es):

sw-c3524-pwr#

Для этого я загрузил прошивку P0S30202.bin из интернета и в файле OS79XX.TXT указал только одну строку:

P0S30202

Затем перегрузил телефон и по дхцп выдал телефону адрес тфтп-сервера, на котором выложил OS79XX.TXT и P0S30202.bin.

После этого у телефона изменилась прошивка:

sw-c3524-pwr#show cdp neighbors fastEthernet 0/14 detail
-------------------------
Device ID: SIP001280F3A376
Entry address(es):
Platform: Cisco IP Phone 7940,  Capabilities: Host
Interface: FastEthernet0/14,  Port ID (outgoing port): Port 1
Holdtime : 142 sec

Version :
P0S30202

advertisement version: 2
Duplex: full
Power drawn: 5.000 Watts
Management address(es):

sw-c3524-pwr#

Сразу с прошивки P0030301MFG2 на P003-8-12-00 перейти не удастся.

После прошивки P0S30202 я смог перевести телефон на P0S3-05-0-00. Я в OS79XX.TXT указал: P0S3-05-0-00 и в SIPDefault.cnf указал:

...
image_version: "P0S3-05-0-00"
...

Ну а дальше по аналогии обновил до P0S3-8-12-00.

четверг, 24 октября 2013 г.

Поднимаем опенвпн (openvpn) тунель между парой микротиков

Если нужно поднять тунель между двумя Микротиками, то вам сюда.
Ниже я расскажу как поднять опенвпн туннель между двумя mikrotik.
Другие туннели не интересны, так как используют заранее известные порты и не обеспечивают достаточного шифрования.

Итак, на RouterOS до 6.5 могут быть проблемы с импортом сертификатов.
Если есть проблема такого плана:
/certificate import file-name=mkt-server.crt
passphrase: *******
action timed out - try again, if error continues contact MikroTik support and send a supout file (13)

то нужно накатывать более свежую прошивку. Мне помогла прошивка 6.6rc1.
Кстати, второй конец туннеля у меня на 6.1 успешно импортировал сертификат... хм, ну да ладно!:)

Итак, первым делом я поставил на ближайшей FreeBSD пакет openvpn22 из портов.
Затем сделал копию /usr/local/share/doc/openvpn/easy-rsa/2.0 в удобное место для экспериментов.

Далее, подправил vars и создал сертификаты, обо всем этом написано в доках по опенвпну:
sh build-ca
sh build-key-server mkt-server
sh build-key mkt-client-1

Затем один единый файл с сертификатами и ключами:
cat ca.crt mkt-client1.crt mkt-client1.key > mkt-client1.mkt
cat ca.crt mkt-server.crt mkt-server.key > mkt-server.key

Эти файлы по протоколу FTP или через winbox загрузил на маршрутизаторы микротик. На каждую сторону - свой.

Затем на маршрутизаторе open-vpn-серверере сделал команду:
/certificate import file-name=mkt-server.mkt

а на маршрутизаторе open-vpn-клиенте - команду:
/certificate import file-name=mkt-client1.mkt

чтобы импортировать сертификаты и ключи.

На маршртизаторе-сервере создал пользователя, пул адресов для open-vpn и настроил сервер.
На клиентской стороне соответственно настроил /interface ovpn-client.
Я получил настроенный шифрованный канал для передачи информации по общественным сетям.

понедельник, 14 октября 2013 г.

Как автоматически переключать каналы на сервере?

На сервере FreeBSD (Linux) нужно настроить автоматическое переключение каналов в случае падения основного канала на резервный. Думал-думал. Можно изящно сделать было на базе quagga (bgpd) и двух бгп-сессий. Но, в моем случае надо такое решение тщательно потестировать, а я не мог - в локалке сервера круглосуточно работают пользователи. И в моем случае один из каналов работает на mpd5 - туннель pptp. А второй ethernet.

Придумал простой способ: пускать регулярно один пинг с соурс-адресом каждого из обоих интерфейсов наружу, например на гугл-днс и по результату прохождения пинга принимать решение работает канал или нет. Чтобы схема работала нужно чтобы был на сервере настроен соурс-роутинг, то есть в зависимости от соурс-адреса пакет уходит на соответствующий шлюз (то есть в соответствующий маршрут).

Скрипт пускает пинг с разными соурс-адресами на днс-сервера гугла, и, если результат команді пинг успешный, то переменной задается значение 1. А потом проверяются занчения переменных, и по результатам проверок меняются маршруты. Естественно на обоих каналах организован НАТ.

Скрипт, который я написал для этого вот:

#!/bin/sh

rcpt="admin@example.com"

## PPTP link
ip1="87.k.m.p"
gw1="x.x.x.x"

## ETHERNET link
ip2="91.x.y.z"
gw2="91.x.y.n"

## default:
gw_default="$gw1"

## check what current default gw
current_dgw=`netstat -rn|grep ^default|awk '{print $2}'`;

gw1_good=0
gw2_good=0

## assign new value if ping ok:
ping -S $ip1 -c1 -i5 8.8.8.8 > /dev/null 2>&1 && gw1_good=1
ping -S $ip2 -c1 -i5 8.8.8.8 > /dev/null 2>&1 && gw2_good=1

if [ $gw1_good = 1 ] && [ $gw2_good = 1 ]; then
        if [ $current_dgw != $gw_default ]; then
                echo "Ping probe to both gateways OK. \
                Changed default route to default $gw_default."|\
                mail -s "WARNING: SRV routing changes" $rcpt
        fi
        route change default $gw_default >/dev/null 2>&1
        exit;
fi

if [ $gw1_good = 0 ] && [ $gw2_good = 1 ]; then
        route change default $gw2 >/dev/null 2>&1
        echo "Ping probe via $gw1 failed. \
                Changed default route to $gw2."|\
                mail -s "WARNING: SRV routing changes" $rcpt
        exit
fi

if [ $gw1_good = 1 ] && [ $gw2_good = 0 ]; then
        route change default $gw1 >/dev/null 2>&1
        echo "Ping probe via $gw2 failed. \
                Changed default route to $gw1."|\
                mail -s "WARNING: SRV routing changes" $rcpt
        exit
fi

пятница, 27 сентября 2013 г.

FreeBSD: обновление устаревшего порта mysql

Порой надо на сервере обновить mysql. В портах FreeBSD уже удалили версию 5.0. Поэтому на тех серверах, где она еще стоит хорошо бы выполнить обновление.
Очень просто и быстро обновить mysql можно так:

portsnap fetch update
portupgrade -o databases/mysql55-client -f mysql-client-5.0.92
portupgrade -o databases/mysql55-server -f mysql-server-5.0.92
/usr/local/etc/rc.d/mysql-server restart
mysqlcheck -u root -p -A -c
mysqlcheck -u root -p -A -r
mysqlcheck -u root -p -A -a

четверг, 26 сентября 2013 г.

ZFS: root on zfs FreeBSD 9.1 или 9.2 и старше


Порой надо установить систему FreeBSD так, чтобы был зеркальный zfs-mirror, да и сделать надо это удаленно. Мне часто помогает такая схема - звонок человеку, который рядом с новым сервером с заданием: установка трех дисков на сервер и подготовка загрузочного DVD-диска. Далее, удаленный человек устанавливает по дефолту систему и заводит пользователя с gid=0, чтобы можно было удаленно получить права root, а также запускает автоматически sshd для удаленного доступа.


Далее дело техники. Остается только удаленно зайти на свежеустановленный сервер и дать следующие команды для двух оставшихся после установки дисков (ada1, ada2) чтобы создать root on zfs mirror (ada1+ada2):

gpart create -s gpt ada1
gpart add -a4k -b 34 -s 94 -t freebsd-boot ada1
gpart add -a4k -t freebsd-zfs -l disk0 ada1
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada1

и тоже самое для ada2.

Далее создаю зфс-пул из созданных ранее дисков. Указываю загрузочный пул, создаю и настраиваю зфс-разделы с заданными настройками (компрессия, возможность выполнения команд и возможностью работы файлов с заданными именами пользователей)..

zpool create -o altroot=/mnt -o 
cachefile=/var/tmp/zpool.cache zroot mirror /dev/gpt/disk*

zpool set bootfs=zroot zroot
zfs set checksum=fletcher4 zroot

zfs create zroot/var
zfs create zroot/usr
zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/usr/src
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
zfs create -o exec=off -o setuid=off zroot/var/db
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
zfs create -o exec=off -o setuid=off zroot/var/empty
zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
zfs create -o exec=off -o setuid=off zroot/var/run
zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp


Создаю своп:

zfs create -V 4G zroot/swap
zfs set org.freebsd:swap=on zroot/swap
zfs set checksum=off zroot/swap


Далее, нужно примонтировать двд-диск с установочной системой FreeBSD и запустить инсталляцию, порты и исходники я не инталлирую, чтобы не терять время, это все равно устаревает почти мгновенно, лучше быстрее установить и войти в готовую систему:

sh
mkdir /tmp/cdrom
mount_cd9660 /dev/cd0 /tmp/cdrom
cd /tmp/cdrom/usr/freebsd-dist
export DESTDIR=/mnt/zroot
for file in base.txz lib32.txz kernel.txz doc.txz ;\
 do (cat $file | tar --unlink -xpJf - -C ${DESTDIR:-/}); \
 done


Затем надо прописать в новом /etc/rc.conf следующие настройки (подправьте свои названия интерфейсов):

hostname="srv-zfs"
background_fsck="NO"
zfs_enable="YES"
ifconfig_re0="inet 192.168.0.198/24"
defaultrouter="192.168.0.254"
sshd_enable="YES"

А в новом /mnt/zroot/boot/loader.conf хорошо бы задать открытый файервол и опции загрузки системы:

zfs_load="YES"
vfs.root.mountfrom="zfs:zroot"
alias_ftp_load="YES"
alias_pptp_load="YES"
autoboot_delay="2"
net.inet.ip.fw.default_to_accept=1
net.inet.ip.fw.verbose=1
ipfw_load="YES"
ipfw_nat_load="YES"

На новом сервере нужно создать пользователя, часовой пояс и, возможно еще какие-то дополнительные настройки:

chroot /mnt/zroot/
pw useradd user -g 0 -m
passwd user
tzsetup

Затем надо создать файл /etc/fstab, выйти из режима chroot, скопировать кэш zfs-пула и задать правильные точки монтирования:

touch /etc/fstab
exit
cp /var/tmp/zpool.cache /mnt/zroot/boot/zfs/zpool.cache
zfs set mountpoint=legacy zroot
zfs set mountpoint=/tmp zroot/tmp
zfs set mountpoint=/usr zroot/usr
zfs set mountpoint=/var zroot/var

Перегрузить сервер и пользоваться!
Данная процедура работает нормально на установках системы 9.1 и 9.2.

вторник, 24 сентября 2013 г.

Обзор и настройка жпс-навигатора Гармин нуви-30 (Garmin nuvi-30)

Недавно купил навигатор Гармин нуви-30 (garmin nuvi-30) с картами Навлюкс.

Выбирал по бренду и по минимальной цене.
Причина покупки - приехали в гости в большой чужой город на машине.
Перед покупкой выбирал среди других, более дорогих моделей Гармин. Для себя сделал вывод, что смысла в покупке навигатора в 2-3 раза дороже нет. В более дорогих моделях больше экран - а значит и больше закрывает обзор водителю. Также более дорогие модели идут с более быстрым процессором, а значит и более быстрой прорисовкой маршрута и изменениями в маршруте в процессе езды. Но несколько дней езды с самым простым навигатором для меня показали, что он отлично справляется с поставленной задачей - навигацией. В навигатор смотреть приходится не часто, поэтому смысла переплачивать я не вижу. С навигатором нуви-30 в комплекте поставляется крепление для лобового стекла, крепление качественное и надежное - закрепил и забыл. В целом - навигатором доволен.

В навигаторе Гармин имеются следующие настройки навигации:

В свойствах маршрута можно указать:
  • наименьшее время
  • кратчайшее расстояние
  • напрямик

Наименьшее время на мой взгляд наиболее оптимальный выбор для водителя машины, а кратчайшее расстояние подойдет лучше таксистам. Вариант "напрямик" скорее всего пригодится велосипедистам или пешеходам, их не испугает грунтовая дорога в лесу. :)

Что такое "Объезды" можно понять когда попользуешься навигатором несколько дней. :) Внутри этого меню вот что:


  • Развороты
  • Шоссе
  • Платные дороги
  • Паромы
  • Полосы для карпула
  • Грунтовые дороги

Если поставить галочку напротив "Шоссе" и поехать из одного города в другой, предположим что между городами 300км, то маршрут превратится в увлекательное путешествие по проселочным дорогам, ухабам и ямам. Путешествие будет необычайно долгим и появится желание выкинуть навигатор. Вообще, как я понял "Объезды" задает навигатору параметр что надо избегать при прокладывании маршрута. Естественно для междугородних поездок "шоссе" лучше чтобы навигатор не избегал при построении маршрута. Для себя я в объездах указал только "полосы для карпула" (car pool - специальные полосы на дорогах, которые предназначены для движения автомобилей, которые везут попутчиков, смотрите в ru.wiki) и "грунтовые дороги". Остальное оставил не отмеченным в "Объездах".

В первые дни использования без особых настроек навигатора оказалось что жпс-навигатор ведет не по самой лучшей дороге или показывает худший путь. Чтобы разобраться с этим нужно просто взять навигатор в руки и построить несколько достаточно длинных (>150km) маршрутов на разных настройках, затем пальцем попробовать потягать маршрут по экрану и изменять зум (ближе-дальше) и посмотреть каким образом проложены эти маршруты. Порой бывает что дорога проходит через промежуточный город, однако может возле промежуточного города оказаться объездная дорога, которая будет на 5км длиннее, но по времени маршрут может оказаться короче из-за меньших задержках на светофорах (ведь на объездных дорогах значительно меньше светофоров и перекрестков) и вообще уменьшения времени движения. Для нормальной работы навигатора лучше тестирование делать на улице или в машине, но не в середине квартиры на 1 этаже 25 этажного дома! :)

пятница, 20 сентября 2013 г.

Mikrotik: толковая настройка радио-сети для увеличения скорости

Маршрутизаторы Микротик имеют массу инструментов для настройки, в том числе и для настройки wi-fi. Порой клиент на небольшом расстоянии в современной квартире не может получить скоростей в радиосети выше 1МБайта в секунду, при этом вроде как оборудование современное и должно справляться, и вай-фай настроен на 802.11n и тд.

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

1. Канал лучше использовать 6, как бы это не звучало смешно. Именно на этом канале многие клиентские устройства работают лучше всего, а на других каналах уменьшают аппаратно мощность.

2. Хорошо если запретить в своей радио сети на роутере Микротик подключения на низких скоростях, таким образом своё радио будет меньше разлетаться по соседним квартирам и воздействия такого же "радио" от соседей будет меньше и служебный радио-трафик будет ходить быстрее.

3. В некоторых случаях переход на режим работы 802.11G дает лучшие результаты, чем работа в режиме совместимости b/g/n. Проверено на многих установках.

Ниже строчка конфигурации RouterOS:

/interface wireless
set 0 adaptive-noise-immunity=ap-and-client-mode band=2ghz-b/g/n \
basic-rates-a/g=12Mbps channel-width=20/40mhz-ht-above disabled=no \
frequency=2437 ht-basic-mcs=mcs-3,mcs-4,mcs-5,mcs-6,mcs-7 \
ht-rxchains=0,1 ht-txchains=0,1 \
ht-supported-mcs=mcs-3,mcs-4,mcs-5,mcs-6,mcs-7,mcs-8,mcs-9,mcs-10,mcs-11,mcs-12,mcs-13,mcs-14,mcs-15,mcs-16,mcs-17,mcs-18,mcs-19,mcs-20,mcs-21,mcs-22,mcs-23 \
l2mtu=2290 mode=ap-bridge radio-name=my-wifi ssid=my-wifi


В дальнейшем я постараюсь обновлять эту статью.

Exim: копировать некоторые избранные входящие письма

Порой бывает нужно копировать входящие письма, которые поступают на почтовый сервер Exim для локальных пользователей на другие ящики, не важно на локальные или внешние. Если вам нужно слать копии входящих писем на другие ящики, то этот router exim для вас. Вот exim router:

copy_incoming1:
 driver                 = redirect
 unseen                 = yes
 domains                = $qualify_domain
 condition              = ${if match_domain{$sender_address_domain}
                                    {domain1.com : domain2.net}{yes}}
 condition              = ${if match{$local_part@$domain}{localuser@example.com}}
 data                   = extuser@example.com,extuser2@example.net

вторник, 27 августа 2013 г.

Создание виртуального 802.1q интерфейса во FreeBSD 9

Для чтобы создать виртуальный интерфейс во FreeBSD 9 с тегированным виланом (vlan 802.1q) и переименовать его в собственное имя нужно в /etc/rc.conf прописать следующие строки:

vlans_em1="lan0"
create_args_lan0="vlan 100"
ifconfig_em1="up"
ifconfig_lan0="inet 192.168.34.1/24"
ifconfig_lan0_alias0="inet 192.168.209.1/24"

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

# ifconfig lan0
lan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 00:0c:29:19:81:c2
        inet 192.168.34.1 netmask 0xffffff00 broadcast 192.168.34.255
        inet6 fe80::20c:29ff:fe19:81c2%lan0 prefixlen 64 scopeid 0x6
        inet 192.168.209.1 netmask 0xffffff00 broadcast 192.168.209.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        vlan: 100 parent interface: em1

вторник, 7 мая 2013 г.

Посмотреть на Mikrotik текущие соединения

Чтобы посмотреть на роутере Микротик (RouterOS) соединения и трафик (байты) нужно дать такие команды:

/tool sniffer start

чтобы активировать сниффер. И

/tool sniffer connection print interval=1 where bytes !="0/0"

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

Также на роутере можно посмотреть нагрузку на каком-либо интерфейсе при помощи следующей команды:

[admin@mkt-951] > /interface monitor-traffic interface=bridge-local
                     name:  bridge-local
    rx-packets-per-second:            53
      rx-drops-per-second:             0
     rx-errors-per-second:             0
       rx-bits-per-second:      20.3kbps
    tx-packets-per-second:            27
      tx-drops-per-second:             0
     tx-errors-per-second:             0
       tx-bits-per-second:     282.0kbps

[admin@mkt-951] >

среда, 9 января 2013 г.

Mikrotik RouterOS: понять скорость и дуплекс на интерфейсе?

Иногда бывает нужно понять какая скорость и дуплекс на сетевом интерфейсе в данный момент на устройствах Микротик.
Посмотреть в командной строке это можно так:

[admin@mkt] > /interface ethernet monitor 0
            status: link-ok

  auto-negotiation: done

              rate: 10Mbps

       full-duplex: no
[admin@mkt] >


Таким образом понятно, что на порту скорость 10 мегабит и халф-дуплекс.

пятница, 6 апреля 2012 г.

Как задать мак-адрес на интерфейсе во FreeBSD?

Появилась потребность поднять сетевой интерфейс с подмененным МАК-адресом. Ну изменить МАК-адрес на сетевушке. В добавок я стараюсь на машинках-роутерах с FreeBSD переименовывать интерфейс в что-то типа wan0, lan0 и тд. Да и адрес еще надо назначить. Чтобы это все в автозагрузке работало, надо указать в /etc/rc.conf:

ifconfig_re0="ether 00:11:6b:41:ba:00 -rxcsum -txcsum -wol_magic -wol_ucast -wol_mcast descr WAN"
ifconfig_re0_alias0="inet 62.x.y.z/28 name wan0"
ifconfig_wan0="up"

Таким образом у меня получился интерфейс wan0 с собственным описанием, измененным МАК-адресом (mac address change) и все это при старте сервера. Очень важно поднять интерфейс (up) после того, как изменится МАК-адрес и назначится IP-адрес.

пятница, 25 ноября 2011 г.

Cisco 7940G power via PoE Ubiquiti

Появился у меня цискофон Cisco 7940G.
Без блока питания. :)
Надо как-то подать 48 вольт, но не понятно как.
Покупать поделки на радиорынке совсем не хотелось и еще хотелось, чтобы меньше кабелей к телефону шло. И так комп от телефона подключен и сам телефон. Уже два кабеля!
Выход один: брать PoE адаптер и при помощи его подавать 48 вольт на телефон.

Купил Ubiquiti UBI-POE-48-5 адаптер. Вроде все по стандарту.

Подключил к этому адаптеру телефон циско и... нифига!
После всех моих мучений родился способ обжимки кабеля для того чтобы он смог питать с этого адаптера телефон. Вот он.
Сторона 1 (568-B):
  1. бел.оранжевый
  2. оранжевый
  3. бел.зеленый
  4. синий
  5. бел.синий
  6. зеленый
  7. бел.коричневый
  8. коричневый
Сторона 2 (вот тут все изменения):
  1. бел.оранжевый
  2. оранжевый
  3. бел.зеленый
  4. коричневый
  5. бел.коричневый
  6. зеленый
  7. синий
  8. бел.синий
Может кому пригодится! Пользуйтесь! :)

вторник, 25 октября 2011 г.

zfs: зеркало (mirror) или raidz* ?

Решил я разобраться в чем отличие зеркала из двух дисков mirror и raidz.
Оказывается отличие еще какое!!

RAIDZ -- это технология хранения данных ZFS, которая более дешевая, чем mirror в цене одинакового блока данных. mirror более дорогой, например в конфигурации 3 и более дисков. Представим хранилище из 4 дисков по 1тб. Рассмотрим два случая raidz и mirror. В случае raidz пользователю будет доступно 3Тб по цене 4Тб, а в случае с mirror пользователю будет доступно только 1Тб по цене 4Тб. Тут все просто.

Так, как каждый диск имеет статическое значение IOPS (кол-во операций ввода-вывода в секунду), то наиболее оптимальной по скорости будет пул из двух mirror по два диска в каждом. В случае mirror -- скорость пула будет 4 x IOPS, при этом емкость пула будет меньше. Зато RAIDZ дает выигрыш в емкости пула, в ущерб скорости. Скорость пула RAIDZ будет всего-лишь 1 x IOPS.

Таким образом, имея два диска не нужно создавать пул RAIDZ, мечтая, получить что-то невообразимое. Лучше создать MIRROR пул и получить при том же объеме лучшую производительность.

Когда нужна высокая скорость -- нужно выбирать MIRROR.


 Источник.

среда, 19 октября 2011 г.

nginx за 5 минут

Решил попробовать nginx.
Кругом читаю хвалебные отзывы о нем и грех не попробовать.
Нужно получить высокую скорость работы сайта.
До этого сайт обслуживался веб-сервером apache 2.2.21 на freebsd 8.2-stable.
Обновил порты при помощи
portsnap fetch update

Далее скомпилировал и установил порт:
cd /usr/ports/www/nginx
make install clean
Отредактировал /usr/local/etc/nginx/nginx.conf так -- добавил:
  proxy_set_header X-Forwarded-Host $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://127.0.0.1:8082;
В секцию location /.
Веб-сервер апач перенастроил на слушание хоста 127.0.0.1 и виртуальный хост перенастроил на порт 8082. Перечитал конфиг апача и запустил nginx.
Все работает.
Страничка вылетает на ура.
Спасибо Игорю Сысоеву за nginx! ;)

пятница, 16 сентября 2011 г.

ZFS и geli

Тесты показали, что лучше создавать шифрованные диски с заданным размером сектора. В моем случае размер сектора 4096 байт дал прирост скорости чтения в полтора раза. При этом скорость записи осталась прежней - на уровне 21-22МБ в секунду.

Используйте geli init ... -s 4096 ... - один ключик при создании позволит значительно изменить производительность шифрованного раздела.

четверг, 15 сентября 2011 г.

Создание шифрованного пула zfs в FreeBSD

Для шифрования в ядре FreeBSD есть GELI.
Достаточно быстрая и надежная штука.
Мне надо создать сервер, на котором будут хранится данные, доступ к которым не смогут получить нежелательные люди.

[root@new /]# geli init /dev/gpt/0disk2t
Enter new passphrase:
Reenter new passphrase:

Metadata backup can be found in /var/backups/gpt_0disk2t.eli and
can be restored with the following command:

        # geli restore /var/backups/gpt_0disk2t.eli /dev/gpt/0disk2t

[root@new /]# geli init /dev/gpt/1disk2t
Enter new passphrase:
Reenter new passphrase:

Metadata backup can be found in /var/backups/gpt_1disk2t.eli and
can be restored with the following command:

        # geli restore /var/backups/gpt_1disk2t.eli /dev/gpt/1disk2t

[root@new /]#

Далее надо подключить шифрованные диски в систему для создания пула:
[root@new /]# geli attach /dev/gpt/0disk2t
Enter passphrase:
[root@new /]# geli attach /dev/gpt/1disk2t
Enter passphrase:
[root@new /]#

Затем создать пул:
[root@new /]# zpool create data1 raidz /dev/gpt/0disk2t.eli /dev/gpt/1disk2t.eli

Сразу же решил проверить скорость записи, которая была на нешифрованном пуле в районе 32-34МБ в секунду, а скорость чтения была на уровне 86-95МБ в секунду.
Результаты такие:

[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 255.912170 secs (20501434 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 147.344312 secs (35607526 bytes/sec)
[root@new /data1]#
Скорость стала заметно ниже и на чтении и на записи. Эх... что не сделаешь ради безопасности данных. :)

Запуск системы с zfs пулом из шифрованных дисков.
Я сомневался, что данные будут доступны в пуле raidz, если один из двух дисков будет недоступен. Поэтому до установки в бой решил провести тест.


Создал в пуле файл, сохранил его md5 сумму.
Перегрузил сервер с пулом data1 (см. выше).
После старта запустил команды:
[root@new ~]# geli attach /dev/gpt/0disk2t
[root@new ~]# zfs mount data1
и посмотрел на содержимое пула.
Файл с правильной суммой был на месте! Ура!
Однако zpool status ругался:
[root@new ~]# zpool status
  pool: data1
 state: DEGRADED
status: One or more devices could not be opened.  Sufficient replicas exist for
        the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using 'zpool online'.
   see: http://www.sun.com/msg/ZFS-8000-2Q
 scan: none requested
config:

        NAME                 STATE     READ WRITE CKSUM
        data1                DEGRADED     0     0     0
          raidz1-0           DEGRADED     0     0     0
            gpt/0disk2t.eli  ONLINE       0     0     0
            gpt/1disk2t.eli  UNAVAIL      0     0     0  cannot open

errors: No known data errors


Я ввел правильно пароль и подключил шифрованный диск 1disk2t.eli.
Дал команду:
[root@new ~]# zpool online  data1 gpt/1disk2t.eli
И пул у меня стал снова ONLINE!

Ура!
Можно не боятся потери бойцадиска даже с raidz!
Попробую сервер в тестовый бой поставить и посмотреть результаты.

Всем привет! :)

Привет!
Теперь и я в блоге. :)

Замерял скорость записи и чтения в zfs/mfs

Привет!
Довелось мне собрать сервер FreeBSD 8.2-STABLE за сентябрь 2011 года для одной организации. Было свободное время для теста.
Решил провести измерения скорости чтения и записи с дисков в разных вариантах создания пула zfs.

Диски, которые я использовал:
ad5: 1907729MB <Seagate ST32000641AS CC13> at ata2-slave UDMA100 SATA
ad7: 1907729MB <Seagate ST32000641AS CC13> at ata3-slave UDMA100 SATA

Материнка на этом сервере старая, поэтому и не включено и не используется ahci и поэтому диски adX, а не adaX.

Процессор и память на сервере:
Intel(R) Core(TM)2 Duo CPU     E4600  @ 2.40GHz (2402.36-MHz K8-class CPU)
real memory  = 4294967296 (4096 MB)
avail memory = 4093345792 (3903 MB)

Сперва я создал два диска в системе для простого пула zfs со всем доступным объемом и создаю пул:
[root@new /]# gpart create -s gpt ad5
ad5 created
[root@new /]# gpart create -s gpt ad7
ad7 created
[root@new /]# gpart add -t freebsd-zfs -l 0disk2t ad5

ad5p1 added

[root@new /]# gpart add -t freebsd-zfs -l 1disk2t ad7

ad7p1 added

[root@new /]# zpool create data1 /dev/gpt/0disk2t /dev/gpt/1disk2t
[root@new /]# zpool status data1
  pool: data1
 state: ONLINE
 scan: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        data1          ONLINE       0     0     0
          gpt/0disk2t  ONLINE       0     0     0
          gpt/1disk2t  ONLINE       0     0     0

errors: No known data errors
[root@new /]#

Далее в пул данных я решил записать и прочитать 5Гб данных из /dev/random (для полноты теста) одинаковыми блоками по 1024 байт:
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 153.215957 secs (34242950 bytes/sec)
[root@new /data1]# dd if=/dev/random of=5G bs=1024 count=5123600
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 154.269003 secs (34009207 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 55.372681 secs (94750088 bytes/sec)
[root@new /data1]# dd if=5G of=/dev/null bs=1024
5123600+0 records in
5123600+0 records out
5246566400 bytes transferred in 51.155295 secs (102561551 bytes/sec)
[root@new /data1]#
Таким образом средняя скорость записи получилась 34126078.5 байт в секунду, а чтения 98655819.5 байт в секунду.

Далее я создал пул mirror с этих же дисков и провел точно такие же эксперименты. Средняя скорость за два запуска dd вышла для записи 33746148.5 байт в секунду, а для чтения 75503666.0 байт в секунду.

Я попробовал пул из одного диска, средние скорости записи и чтения вышли 33665851.5 и 97765927.0 байт в секунду.


Потом сделал пул с одним из дисков, а второй диск отдал под log. Опять провел два запуска для записи и для чтения. Средняя скорость в этот раз вышла для записи 34071757.5 байт в секунду, а для чтения
 96930171.0 байт в секунду.

Еще сделал пул с одним диском, а второй отдал под cache. Средняя скорость записи 33854437.5, а чтения - 49479337.0 байт в секунду.

Создал пул raidz из двух дисков. Средние скорости записи и чтения вышли: 33169249.0 и 84283989.0 байт в секунду.

Создал пул raidz с кэшем в RAM:
[root@new /]# mdconfig -a -t malloc -s 128M
md0
[root@new /]# zpool create data1  raidz /dev/gpt/0disk2t /dev/gpt/1disk2t cache /dev/md0

Cредняя скорость записи вышла 32541843.5 байт в секунду, а чтения 84148245.5 байт в секунду.

Попробовал еще 128М из памяти добавить для log. Итого, пул получился raidz с cache и log по 128М. Средняя скорость записи вышла 32503220.0, а чтения - 84458088.0 байт в секунду.

Попробовал создать пул raidz с кешем 1024М. Существенного отличия в скоростях не получил.

Примонтировал /dev/md0 в /mnt. Попробовал там на размере в 900М те же тесты. И получил среднюю скорость записи 50817911.0, а чтения - 531232665.5 байт в секунду. Вау! :)

Выводы, которые я сделал.
Скорость записи на диски SATA в режиме UDMA100 не будет выше 32-34МБ в секунду. Хоть тресни! А вот скорость чтения в режиме работы mirror оказалась не такой высокой, как ожидалось. Скорость чтения в обычном пуле из двух дисков вышла самая высокая. Но мне для работы нужен надежный пул, который бы смог пережить потерю бойца диска. Поэтому остается mirror или raidz. Я выбрал второй вариант - raidz. Тем, кому нужен пул без всякой надежности на случай выхода из строя диска(-ов), то лучше всего использовать простой пул из дисков, он дает полный объем всех дисков и высокую скорость. Тем, кто создает надежный пул лучше использовать raidz и несколько дисков. Для быстрых файловых систем остается только использовать memory disk из RAM, минус которой пока только один - не сохраняется ничего после перезагрузки.