вторник, 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 мегабит и халф-дуплекс.