mindsellers
76 subscribers
25 photos
8 files
32 links
Практики из жизни Linux-админа. Asterisk, Bash, Python и черная магия.

Сайт http://mindsellers.ru
Группа VK https://vk.com/mindsellers
ТыТруба https://www.youtube.com/channel/UC7LUJgzIUL4VGiOWctoa0fw
По всяким вопросам обращаться @alex_dmit
Download Telegram
И результатом этих мучений стали 2 серта и статус консультанта по микротику. Так что если уж вы это поделие купили, обращайтесь
В каждой шутке есть доля шутки

Настройку микротиков берём, мальчики, роутинг, свитчинг, туннелинг, приоритеты вешаем, уши развешиванием, голос пропускаем, пидорасов отшиваем. Выезд, апартаменты, есть подружка.
Дёшево беру, хорошо обслуживаю, бесплатно советую, платно консультирую.
Айписеки без гомосеков; Всю правду скажу, всю жизнь расскажу: где был, с кем жил, как живёт, и где пакет умрет

#humor #mikrotik
Что делать, если нужно подключиться к MikroTik из linux по mac, но без winbox в wine?

Ситуации, как известно, бывают разные. Допустим, вы случайно отломали себе доступ к микротику по IP: снесли маршрут, прикрыли управление не с той стороны, просто скинули его в blank. При этом у вас, как у меня, например, просто нет винды. А Winbox в wine то соседей не видит, то по маку подключается с 10 попытки, то вообще отваливается. Кстати, когда все-таки удается подключиться, в логах виднеется вот это вот:

system,info,account user admin logged in from FF:FF:FF:FF:FF:FF via winbox

А что делать, если мы учудили отстрел яиц на удаленной площадке, где есть только сервера, нет дроидов, которые могли бы подоткнуться ноутом с винбоксом и тимвьювером?

Оказывается, давно написан инструмент mactelnet-client под Linux, так что задача сводится к:

apt install mactelnet-client
mactelnet -l #обнаружение роутеров
mactelnet 0:xx:xx:xx:xx:xx #коннект к нужному роутеру

И все! Кстати, есть еще и mactelnet-server, несложно догадаться, когда он может оказаться полезным ;)

#mikrotik
Прямой набор номера из IVR на другой станции

Обратился тут коллега с вопросом: есть астер c FreePBX, есть другая, старая станция. Между собой станции подружены по сипу. На некоем номере, заведенном на астер, настроен IVR с возможностью прямого набора внутренних номеров. Что не удивительно, набираются напрямую только номера астериска, но никак не старой станции. Для примера, будем считать, что на астере у нас пул 2ХХ, а на, допустим, панасонике - 1ХХ.

Задача формулируется так: обеспечить возможность прямого набора номеров 1XX из голосового меню Asterisk.

Посидели, поколупались в контекстах, и выяснилось, что нет ничего проще! Достаточно только внести в extensions_custom.conf следующее

[from-did-direct-ivr-custom]
exten => _1XX,1,Dial(SIP/trunk/${EXTEN})

где вместо trunk указать имя пира, соединяющего две станции

#asterisk
Как настроить 2500 микротиков по всей стране и поддерживать на них актуальный конфиг, когда у падаванов на местах - лапки

Итак, постановка задачи:

* Имеется порядка 2500 географически разнесенных торговых точек. В каждой точке установлен т.н. Главный компьютер, он же ПК заведующего, кассы на базе персональных компьютеров под управлением Windows, система видеонаблюдения.

* Сеть одноранговая, 192.168.0.0/24, адрес шлюза и ДНС, он же роутер, 192.168.0.254, адрес главного компьютера - 192.168.0.1. Подключение к Интернет не стандартизировано.

* Необходимо обеспечить доступ главного компьютера в интернет без ограничений, остальным устройствам в сети предоставить доступ только на заранее известный список ресурсов. Кроме того, требуется обеспечить возможность удаленного управления каждым роутером в отдельности, а также возможность массовой настройки всех устройств, например, для добавления нового ресурса в список разрешенных.

* Постепенную замену всех установленных роутеров на MikroTik hAP ac lite необходимо произвести силами региональных техников, не знакомых с RouterOS. Предоставление доступа к настроенным роутерам местному персоналу по умолчанию не предполагается.

Взяли python в зубы и за три дня набыдлокодили. Структурно вышло вот так:

* Для первичной настройки роутера разработана консольная программа, которая в доступной для эникея низкой квалификации форме запросит параметры подключения к Интернет и номер торговой точки. После этого конфигурация маршрутизатора происходит в автоматическом режиме

* Для удаленного управления устройствами поднимается VPN-туннель до центрального офиса

* В офисе установлен и настроен VPN-сервер

* Параметры подключения(логин и пароль) генерируются для каждого устройства как средствами программы настройки, так и на стороне сервера. IP-адрес на VPN-интерфейсе ассоциирован с номером торговой точки по следующему правилу: номер торговой точки приводится в 4-значный hex, который разделяется на 2 октета, и каждый из них возвращается в dec. Пример: точка №500. hex(500)=01f4, dec(01)=1, dec(f4)=244. Таким образом, два последних октета адреса на PPTP интерфейсе будет 1.244

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

за подробностями и кодом - в wiki или vk:

http://pubwiki.mindsellers.ru/index.php/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D1%86%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%B0%D1%80%D0%BA%D0%BE%D0%BC_MikroTik

vk.com/@mindsellers-sistema-centralizovannogo-upravleniya-parkom-mikrotik

#python #mikrotik #vpn
manual.pdf
257.1 KB
А вот и инструкция для региональных мартышек
Когда надо валить

Не знаю, как вы, коллеги, но из всех разных параметров, в рамках которых можно оценить работу, я всегда на первое место ставлю развитие.
Недавно прочел и принял на вооружение фразу 'пакет увольнения' - что именно вы возьмёте с собой, когда по тем или иным причинам решите сменить работу: какой опыт, какие новые знания и умения. Что вы положите в свой багаж, который важнее любого резюме.
Иные могут сидеть на жопе ровно по 25 лет, развиваясь исключительно из-под палки и только в интересах текущего работодателя. Но можно ли назвать таковых Админами? Вопрос дискуссионный, но по моему глубокому убеждению - нельзя. Админ, да и вообще любой специалист ИТ, в первую очередь - исследователь, ведь комьюнити ежедневно создаёт огромное количество новых средств и возможностей. И разве не в том, чтобы быстро и качественно решить задачу бизнеса, используя оптимальное на данный момент техническое средство - наша с вами основная задача?
И кем мы, коллеги, становимся в ситуации, когда годами применяем одни и те же методы, действуем по указке старых, сознательно отказавшихся от развития пердунов? Да в таких же стариков, которые ходят на работу за зарплатой, прикрывают свою жопу бессмысленными бумажками, убивающими всякое желание развиваться у молодых!

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

Вот именно в тот момент, когда вы понимаете, что уже 2-3 месяца ничего не положили себе в багаж, УВОЛЬНЯЙТЕСЬ! Пусть на чуть меньшие деньги, менее удобный график, но с перспективой. И перспективой, в первую очередь, личного развития.

Но это только мое мнение.

#imho
Простой интерфейс отправки SMS через шлюз NeoGate

Как известно, GSM-шлюзы NeoGate предоставляют возможность отправки через них sms средствами собственной API. Включается она на соответствующей закладке в интерфейсе самого шлюза. Рассмотрим простой пример: для начала на "чистый" apache добавим вот такие строки в /etc/apache2/sites-available/000-default.conf:

ScriptAlias "/cgi-bin/" "/var/www/html/cgi-bin/"
<Directory "/var/www/html/cgi-bin">
AllowOverride None
Options +ExecCGI +MultiViews +SymLinksIfOwnerMatch +Includes +Multiviews
Order allow,deny
Allow from all
AddHandler cgi-script .py
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
</Directory>

<Directory /var/www/html>
Options +ExecCGI
AddHandler cgi-script .py
</Directory>

Добавляем, естественно, перед строкой </VirtualHost>

Дополнительно нужно вообще включить поддержку cgi командой

a2enmod cgi

Перезапускаем apache, и делаем простенькую index.html:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Отправка SMS</title>
</head>
<body>
<table border="1">
<form action="/cgi-bin/send.py">
<h4>Номер телефона</h4><input type="tel" name="num">
<h4>Текст сообщения</h4><textarea name="text"></textarea>
<br><br><button type="submit">Отправить!</button>
</form>
</table>
</body>
</html>

Создаем каталог /var/www/html/cgi-bin и в нем скрипт send.py:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cgi
import os
import pymysql
from requests import get


form = cgi.FieldStorage()
num = form.getfirst('num') or ''
text = form.getfirst('text') or ''


print("Content-type: text/html\n")
print("""<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>SMS</title>
</head>
<body>
""")

ip=cgi.escape(os.environ["REMOTE_ADDR"]) #получаем IP


connect=pymysql.connect(host="127.0.0.1", user="user", passwd="pass", db="sms")
cursor=connect.cursor()
sql="insert into sms (ip,num,text) values ('"+str(ip)+"','"+str(num)+"','"+text+"')"
cursor.execute(sql)
connect.commit()
connect.close()


if not num.isdigit() or not len(num)==11: #Проверяем формат номера
print "Неверный формат номера!!!<br>"
print "<a href='../index.html'>Обратно</a>"
else:
r=get('http://192.168.12.12/cgi/WebCGI?1500101=account=apiuser&password=apipass&port=6&destination='+num+'&content='+text) #делаем запрос

if r.status_code==200: #обрабатываем статус
print "Сообщение отправлено<br>"
print "<a href='../index.html'>Обратно</a>"
else:
print "Возникла ошибка, попробуйте еще раз<br>"
print "<a href='../index.html'>Обратно</a>"

Разберем строку отправки:
r=get('http://192.168.12.12/cgi/WebCGI?1500101=account=apiuser&password=apipass&port=6&destination='+num+'&content='+text)

Здесь мы задаем ip шлюза, логин и пароль от API, а также порт, через который нужно отправить смс.

Кроме того, я решил логировать отправки смс в базу данных Mysql. Но для этого ее нужно сначала создать:
```
CREATE DATABASE sms /*!40100 DEFAULT CHARACTER SET utf8 */
use sms;
CREATE TABLE sms (
date datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
ip varchar(20) NOT NULL,
num varchar(11) NOT NULL,
text varchar(500) NOT NULL,
UNIQUE KEY date (date,ip,num,text)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
GRANT ALL PRIVILEGES ON sms.* TO 'user'@'localhost' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;

```

На этом все, можно работать!
#python #asterisk
со смеху не сдохните, пожалуйста
тут цифры на лету подменяют