воскресенье, 29 марта 2015 г.

IP SEC туннель с использованием racoon для поставщиков SIP телефонии

Пример настройки racoon для создания IPSEC туннеля, между вашим сервером и сервером поставщика.
Исходные данные:
server_ip    77.77.77.77
login    super_login
password    super_pass
local_net   10.10.10.0/24
remote_net    172.1.1.1/32
ike_encryption    3des
ike_auth   sha1
ike_dh_group   1024 (2)
ike_lifetime   28800
sa_encryption   3des
sa_auth    hmac_sha1
sa_pfs_group    1024 (2)

sa_lifetime 3600

Итак приступим.
1. Добавляем еще один айпи адрес на ваш сервер. Выберем какой нибудь адрес из local_net   10.10.10.0/24, например 10.10.10.10 и привесим его алиасом на интерфейс сервера (если на сервере несколько сетевых интерфейсов, то желательно на внешний, который смотрит в интернет).
ifconfig eth:local 10.10.10.10/24 up
2. Добавляем статический маршрут на remote_net    172.1.1.1/32 через наш локальный адрес
ip ro add 172.1.1.1 via 10.10.10.10
3.Теперь конфигурим racoon. Находим файл psk.txt. В него записываем наш пароль для сервер провайдера в таком формате
77.77.77.77  super_pass
4. Далее файл setkey.conf. Его содержимое, согласно наших параметров.
# This is a sample setkey.conf
flush;
spdflush;
spdadd 10.10.10.0/24 172.1.1.1/32 any -P out ipsec
    esp/tunnel/ХХ.ХХ.ХХ.ХХ-77.77.77.77/require;
spdadd 172.1.1.1/32 10.10.10.0/24 any -P in ipsec
    esp/tunnel/77.77.77.77-ХХ.ХХ.ХХ.ХХ/require;

где ХХ.ХХ.ХХ.ХХ - внешний адрес вашего сервера.

5. Содержимое файла racoon.conf

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/cert";
remote 77.77.77.77 {
    exchange_mode aggressive, main;
    lifetime time 28800 sec;
    proposal {
        encryption_algorithm 3des;
        hash_algorithm sha1;
        authentication_method pre_shared_key;
        dh_group 2;
    }
    generate_policy off;
    my_identifier fqdn "super_login";
    nat_traversal force;
}
sainfo address 10.10.10.0/24 any address 172.1.1.1/32 any {
    pfs_group 2;
    lifetime time 3600 sec;
    encryption_algorithm 3des;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

6. Делаем 
setkey -f setkey.conf
и рестарт (или старт, если он не был запущен) racoon.
7.Проверяем:
ping 172.1.1.1

  

Postgresql Systemd autostart

Автостарт Postgresql на Linux с systemd.

1. Устанавливаем Postgresql.
2. В папке /usr/lib/systemd/system создаем файл postgresql.service такого содержания:

[Unit]
Description=PostgreSQL database server
After=network.target

[Service]
Type=forking
TimeoutSec=120
User=postgres
Group=postgres

SyslogIdentifier=postgres
Environment=PGROOT=/usr/local/pgsql

ExecStart=/usr/local/pgsql/bin/pg_ctl start -D '/usr/local/pgsql/data' -s
ExecReload=/usr/local/pgsql/bin/pg_ctl reload -D '/usr/local/pgsql/data' -s
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D '/usr/local/pgsql/data' -s -m fast

OOMScoreAdjust=-1000

[Install]
WantedBy=multi-user.target

Сохраняем файл и создаем сим линк (sym link) на него в папку  /etc/systemd/system

3. Делаем systemctl daemon-reload (его кстати надо делать каждый раз после того как вы поменяли что либо в конфигурационных файлах systemd).
4. Делаем systemctl enable postgresql.service Для того чтобы postgresql запускался во время старта линукса.
5. Запускаем постгрес systemctl start postgresql.service.
6. Смотрим статус сервера  systemctl status postgresql.service.


суббота, 21 марта 2015 г.

Утилита для сбора данных о звонках pcapsipdump

Иногда  возникает необходимость сделать полный дамп звонка, точнее пакетов сигнализации SIP, что бы предоставить эти данные поставщику либо проанализировать самому для того что бы разобраться в чем проблема и почему звонок не проходит, либо проходит, но с плохим качеством или тишиной.
Сделать это можно просто с помощью стандартного tcpdump или tshark.
Но когда через сервер проходит большое количество звонков на разные адреса и к тому же вы не можете сами их инициировать и непонятно когда в следующий раз проявится баг, то задача сделать дамп очень усложняется.
И тут нам приходит на помощь эта утилита. Называется она pcapsipdump.
Что она умеет?

  1. слушать весь SIP трафик на интерфейсе.
  2. Раскладывать по папкам (по дням и часам) дампы звонков.
  3. Каждый звонок кладется в отдельный файл дампа. Имя файла содержит дату, А-номер и Б-номер.
  4. Возможна фильтрация трафика по номерам с которго/на котрый звонят.
  5. Возможен дамп только n-ых звонков. Например дампить каждый третий звонок.

Быстрая установка слейва потоковой репликации Postgresql

Предполагается, что мастер Postgresql уже настроен и работает.

Настройки мастера Postgresql :
файл postgresql.conf
wal_level = hot_standby
checkpoint_segments = 32
max_wal_senders = 3
wal_keep_segments = 32
файл pg_hba.conf
host    replication     replication        xx.xx.xx.xx/32      trust
где хх.хх.хх.хх - IP адрес слейва

Слейв и мастер должны иметь одинаковую версию Postgresql.
На слейве устанавливаем Postgres, но не делаем инициализацию кластера, то есть, НЕ делаем initdb. Просто собираем и устанавливаем. Единственное, что создаем папку data где будет лежать собственно база и ставим на нее владельца postgres.
На слейве выполняем следующую команду:
sudo -u postgres /usr/local/pgsql/bin/pg_basebackup -h yy.yy.yy.yy -p 5432 -D 
/usr/local/pgsql/data -U replication -v -X s -P
где yy.yy.yy.yy - IP адрес мастера.
Начнется копирование базы с мастера на слейв, это копирование целиком всего кластера с мастера один к одному на слейв. Мастер тем временем будет работать в штатном режиме, останавливать, отключать всех от него или делать с ним что то еще НЕ нужно. 
Как только копирование завершится, на слейве нужно поправить пару конфигов.

Настройки слейва Postgresql:
файл postgresql.conf
hot_standby = on
файл recovery.conf(в той же папке надо создать)
standby_mode = 'on'
primary_conninfo = 'host=yy.yy.yy.yy port=5432 user=replication password=superpass'

trigger_file = '/tmp/postgresql.trigger'
где yy.yy.yy.yy - IP адрес мастера.

запустить Postgresql на слейве.
Проверить в процессах должны быть процессы репликации вроде такого 

13638 ?        Ss     1:03 postgres: startup process   recovering 000000010000000D00000060
13639 ?        Ss     1:55 postgres: wal receiver process   streaming D/60ACB328