Оживляю старую АТС Panasonic NCP

Для осуществления старой мечты про свой собственный модемный пул со 100% дозвоном мне потребовалась АТС. Поначалу я планировал воткнуть в нее два модема, поперезваниваться и успокоиться. Однако стоило приехать старой аналоговой, как мне уже захотелось получить дозвон с V.90. А это значит, что одним аналогом не обойтись и требуется уже цифра.

Цифра так цифра. Немного поискав на просторах интернета, я обнаружил продаваемые в большом количестве АТС Panasonic NCP 500/1000. Еще немного погуглив, прикинул список необходимых плат в ней для моего развлечения и заказал наиболее подходящую.

Для пытающихся повторить мой путь: необходима плата PRI30, по которой будет идти цифровой поток в cisco 5350 (она внизу, там платы 2PRI и NP60 – тоже очень широко распространенный бандл) и SLC8/16 (в нее будут вставляться аналоговые модемы и прочие телефоны).

Следующий вопрос, который необходимо решить: как настроить/узнать настройки АТС? И вот тут внезапно для любого ИТшника встает сразу несколько проблем. Самая главная в том, что телефонисты – это такие заносчивые и высокомерные индюки, которые хрена-с-два поделятся информацией. И фиг бы на них, но и официальная документация от самого панасоника представляет из себя лютейший фейспалм с кучей ошибок. В общем, если ты был на курсах и тебя научили как тыкать по менюшкам, то ты молодец. Остальные – быдло, достойные только для того, чтобы их поунижать. По большей части, этот пост родился благодаря таким телефонистам.

Итак, для начала достаем из станции SD карту и делаем бекап на всякий случай. Если изучить файлики, то становится понятно, что там лежит вся конфигурация АТС вместе с дополнительными лицензиями (если они были).

Теперь про пароли. Вроде можно вручную найти нужное в DBSYS, но мне лень и я отыскал программку KXTDA_password_recovery. Ей скармливаешь этот файлик и она выдает пароли, которые поставил ваш предшественник. Иногда это что-то сложное, но чаще это стандартные 1234 (на двух из трех АТС у меня было так).

Узнав пароли, засовываем карту назад в АТС. Но пока не включаем. Нужна программа для настройки. Она лежит в архиве UPCMCv7.8.1.1_R15.zip. Распаковываем, ставим и она спросит про ключ. Тут уже постаралась сама panasonic. Чтобы подсадить “инсталляторов атс” на толстую… ну пусть будет иглу, она требовала ежегодной дани от своей паствы. Прошедшие курсы получали дырку, через которую могли генерить эти ключи в количестве аж двух штук в год (если форумы не врут). Мы же просто воспользуемся программкой upcmc_kg_2024.exe, которая генерит ключи на 2024 год. Рядом лежит она же, но генерящая ключи на 2025й. Когда наступит 2026, то просто сравните побайтно эти программки, найдите один байт разницы и увеличьте его на еденицу.

Ок, программа поставилась, и согласна соединяться. Но куда и с чем? С этим тоже все просто: вставляем сетевой кабель в LAN, запускаем tcpdump или wireshark и включаем станцию. Немного помигав лампочками, она включит свой ethernet и согласно всяким стандартам, бросит ARP запрос на предмет совпадения ядреса. Ну и естественно, скажет свой. Хоть станция и умеет в DHCP, но телефонисты в него не умеют, поэтому везде рекомендуют ставить статику, так что в 99,99% вы не увидите bootp запросов. Ну а дельше дело техники: на компе настраиваем любой адрес из той же подсети и можно подключаться.

Теперь единственное, что может вас остановить, это регистр. Нет, я не шучу и програмисты-телефонисты настолько тупые, что не осилили функцию strup/strlow. Так что вводить INSTALLER надо исключительно в верхнем регистре. Я на этом пару раз погорел. Хорошо, что хоть пароль из цифр (в буквы они тоже не любят).

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

Но, если вы дочитали до этого момента, то есть способ завести АТС еще проще (на всякий: лицензии не пропадут). Сделав бекап, просто включите АТС с передвинутым влево, на SYSTEM INITIALIZE, движком. Подождите, пока светодиодик RUN замигает и передвиньте назад, на NORMAL. Все, теперь АТС на порту LAN будет ждать вас по адресу 192.168.0.101. После подключения вас спросят про пару глупостей и предложат настроить все по-минимуму. Говоря проще, программка раскидает телефонные номера согласуясь со вставленными картами слева-направо и сверху-вниз. Все, вы можете втыкать телефоны, перезваниваться и выходить в город “через девятку”. Конечно, если у вас есть плата для внешних линий LCOT.

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

А теперь то, что я уже обнаружил.

Во-первых, забудьте про порт MNT. Да, это ethernet, да в инструкции написано, что можно через него администрировать АТС. Врут. На этом порту никогда ничего не появляется. Ни при ресете, ни при инициализации, ни при работе. Пусто и глухо. Так что только LAN.

Потом, кнопочка Reset – это просто выключение-включение питания. Сделали поблажку, ибо на морде атс всегда висит пучок кабелей и добраться до выключателя сзади проблематично.

Следом: если у вас атс NS (там все, окромя прошивок, подходит от NCP), то никогда не дергайте ее по питанию! Погромисты из панасоника не осилили повторить то, что они сделали в NCP и очень велик шанс все угробить на SD карте.

Ну и наконец, вот вам ссылочка https://tygh.ru/s/iiwLyPKpzGESZCX , куда я выложил все то, что на данный момент нарыл для панасоника. Включая вышеупомянутые программки. Да, там есть дубликаты в доках, но мне пока лень их вычищать.

Оживляю старую Cisco 881G

Достал я тут из закромов чудного зверька, с которым раньше не сталкивался. Cisco 881G. Маленькая настольная коробочка с двумя антеннами и 5 ethernet портами. Если на езернеты мне было пофиг, то вот антеннки возбудили мое любопытство.

Оказалось, что в этой коробочке спрятали 3G модем, совмещенный с GPS. Ну и роутер в довесок.

Ок, цепляюсь к коробочке кабелем и смотрю, что там в наличии отсутствия.

show flash
copy flash:c880data-universalk9_npe-mz.153-3.M.bin tftp://100.64.1.1 

Такой версии IOSа в моей коллекции честно спертых нет, поэтому ныкаем поближе.

Ладно, вытаскиваю коробочку на окно и смотрю, к чему прицепился модем

Router#show cellular 0 network
Current Service Status = Normal, Service Error = None
Current Service = Combined
Packet Service = HSPA (Attached)
Packet Session Status = Inactive
Current Roaming Status = Home
Network Selection Mode = Automatic
Country = RUS, Network = ROSTELEC
Mobile Country Code (MCC) = 250
Mobile Network Code (MNC) = 20
Location Area Code (LAC) = 28600
Routing Area Code (RAC) = 202
Cell ID = 34499
Primary Scrambling Code = 329
PLMN Selection = Automatic
Registered PLMN =  , Abbreviated = 
Service Provider = ROSTELECOM
Router#show cellular 0 radio  
Radio power mode = ON
Current Band = WCDMA 2100, Channel Number = 10612
Current RSSI = -90 dBm
Band Selected = Auto
Number of nearby cells = 1
Cell 1
        Primary Scrambling Code = 0x149
        RSCP = -91 dBm, ECIO = -5 dBm

Все верно. Мне выдали вместе с GPON симку от “Ростелеком”, вот он туда и прицепился. Курю маны, читаю старые архивы. Гуглю… В общем, прошло пара дней. Теперь вы можете быстренько пробежаться вместе со мной. Если что, у коробочки есть встроенный веб-сервер, но он сделан на технологиях 2000х годов и современные браузеры в нем только статус могут показать.

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

cellular 0 gsm profile create 1 internet.rtk.ru chap rtk rtk

Теперь конфигурируем, конфигурируем и заканчиваем конфигурировать. Подозреваю, что есть лишние ошметки, но это рабочая конфигурация. Болдом – то, что я вводил. Остальное оно само.

cisco-881G#show run
Building configuration...

Current configuration : 2041 bytes
!
! Last configuration change at 12:11:05 UTC Sun Aug 18 2024
! NVRAM config last updated at 12:11:07 UTC Sun Aug 18 2024
! NVRAM config last updated at 12:11:07 UTC Sun Aug 18 2024
version 15.3
no service pad
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname cisco-881G
!
boot-start-marker
boot-end-marker
!
!
enable password cisco
!
no aaa new-model
!
!
!         
no ip dhcp use vrf connected
!
!
!
ip cef
no ipv6 cef
!
!
multilink bundle-name authenticated
chat-script hspa-R7 "" "AT!SCACT=1,1" TIMEOUT 60 "OK"
!
!
license udi pid C881G+7-K9 sn FCZ1806C3EH
license boot module c880-data level advipservices_npe
!
!
!
!
controller Cellular 0
 gsm sms archive path tftp://100.64.1.1/SMS
 gsm gps mode standalone
 gsm gps nmea
!         
ip tftp source-interface Vlan1
!
!
!
!
interface FastEthernet0
 no ip address
!
interface FastEthernet1
 no ip address
 shutdown
!
interface FastEthernet2
 no ip address
 shutdown
!
interface FastEthernet3
 no ip address
 shutdown
!
interface FastEthernet4
 no ip address
 shutdown 
 duplex auto
 speed auto
!
interface Cellular0
 ip address negotiated
 ip nat outside
 ip virtual-reassembly in
 encapsulation slip
 history BPS
 dialer in-band
 dialer idle-timeout 0
 dialer string hspa-R7
 dialer-group 1
 async mode interactive
!
interface Vlan1
 ip address 100.64.1.4 255.255.255.0
 ip nat inside
 ip virtual-reassembly in
!
ip forward-protocol nd
ip http server
no ip http secure-server
!
!
ip nat inside source list 1 interface Cellular0 overload
ip route 0.0.0.0 0.0.0.0 Cellular0
!
dialer-list 1 protocol ip permit
!
access-list 1 permit 100.64.1.0 0.0.0.255
!
control-plane
!
!
!
line con 0
 password cisco
 login
 no modem enable
line aux 0
line 3
 script dialer hspa-R7
 modem InOut
 no exec
 rxspeed 21600000
 txspeed 5760000
line 6
 modem InOut
 no exec
 transport input all
 transport output all
 stopbits 1
 speed 4800
line vty 0 4
 password cisco
 login
 transport input all
!
ntp source Cellular0
ntp master 1
ntp update-calendar
!
end

Конфигурация следующая. 100.64.1.4 – это адрес циски. Работает только порт 0. Всё, что приходит с 100.64.1.0/24 – натить в интернет через сотовый модем. Ну и попутно включить GPS и попытаться брать с него время.

В чем была проблема? Я никак не мог поднять интерфейс модема. Он радостно сообщал, что включен, но адрес от провайдера получать категорически отказывался. В статусе было, что он занимается спуфингом. Покурив интернеты еще раз, я обнаружил, что достаточно добавить в line 3 строку про modem inout, как все тут же зажурчало, как и положено. Почему ее нет ни в одном официальном гайде циски про 880е – я не знаю. И почему dialer idle-timeout 0 игнорируется до первого подьема – я тоже не знаю.

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

#ping 8.8.8.8
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 8.8.8.8, timeout is 2 seconds:
...
*Aug 18 10:55:41.267: %LINK-3-UPDOWN: Interface Cellular0, changed state to up
*Aug 18 10:55:42.267: %LINEPROTO-5-UPDOWN: Line protocol on Interface Cellular0, changed state to up.!
Success rate is 20 percent (1/5), round-trip min/avg/max = 84/84/84 ms

Вот он, исторический момент. Сработало все, хотя и 4 пакета потерялись, пока модем поднимался. А что насчет смс? Отправляю себе на телефон и отвечаю.

# cellular 0 gsm sms send 8926295хххх "Test from cisco"
Aug 18 11:55:37.691: %CELLWAN-5-INCOMING_SMS: Cellular0 has just received new incoming SMS.
#cellular 0 gsm sms view all
SMS ID: 0
TIME: 24/08/18 16:00:01
FROM: 7926295хххх
SIZE: 4
^D^^^D:
--------------------------------------------------------------------------------
SMS ID: 1
TIME: 24/08/18 16:09:39
FROM: 7926295хххх
SIZE: 7
Privet 
--------------------------------------------------------------------------------

Ну с смс тут все очень кондово. Первая смс это “Ок” на русском. Ладно, а что с GPS?

#show cellular 0 gps

GPS Info
-------------
GPS State: GPS acquiring
GPS Mode Configured: standalone
GPS Error Count: 0
Latitude: 0 Deg 0 Min 0 Sec North
Longitude: 0 Deg 0 Min 0 Sec East
Timestamp (GMT): Sun Jan  6 00:00:00 1980

Fix type index: 0
Satellite Info
----------------
Satellite #11, elevation 0, azimuth 0, SNR 26 *
Satellite #20, elevation 0, azimuth 0, SNR 24 *
Satellite #6, elevation 0, azimuth 0, SNR 19 *

А вот с GPS все плохо. С трудом нашла 3 спутника, хоть и стоит на окне и близко к стеклу. Да и у тех уровень сигнала около плинтуса. Вот она, корпоративная надежность! Рядом лежащий usb GPS приемник за 300 рублей видит кучу и совершенно ничем не смущается. Обидно.. надо подумать, как там антенну поближе вытащить или сделать ее побольше. Ибо хочу свой NTP сервер со стратумом 1 и все тут!

Соеденить две площадки…

… Казалось бы, что может пойти не так?

Недавно мне потребовалось соеденить две площадки с виртуалками. Обе у нас (ПОДЧЕРКИВАЮ!), обе у достаточно крупных провайдеров. В общем, надо сделать так, чтобы Н машин у одного провайдера видели М машин у другого. Трафик не большой, но достаточно критичный.

“ХА!” – сказал я и нарисовал классическую схему соединения.

Выделяем на каждой площадке машинку (или на одну из доступных вешаем внешний ip), обвешиваемся файрволами и закрываем трафик тем же IPSec. Инструкций много, вариантов много – в общем, прорвемся!

Быстренько собрал, накидал конфиги и получил веслом по морде. Протокол ESP где-то по пути заблокирован. Техподдержка обоих провайдеров клянется, что это не у них, но ipsec не верит и отказывается подниматься. Ладно, хотелось по-корпоративному, пойдем по-молодежному.

OpenVPN шустро поднялся, поначалу начал бодро гонять трафик, но через некоторое время начались проблемы. Он переподсоединялся, слал немного байт и снова уходил в нирвану. Смена протокола с UDP на TCP приносила лишь временное облегчение.

Кто виноват – мне, если честно говорить, абсолютно пофиг. Мне трафик нужно гонять. Поэтому расчехлил тяжелую хипстерскую артиллерию – shadowsocks + v2ray. Качаем с гита, просто распаковываем, плюем в конфиг сервера следующее (1.1.1.1 – это внешний адрес сервера, если что):

{
  "server": "1.1.1.1",
  "server_port": 888,
  "password": "verysecretpass",
  "method": "chacha20-ietf-poly1305",
  "timeout": 7200,
  "no_delay": true,
  "fast_open": true,
  "mode": "tcp_and_udp",
  "plugin": "/opt/shadowsocks/v2ray-plugin_linux_amd64",
  "plugin_opts": "server"
} 

А в конфиг клиента вот это:

{
  "server": "1.1.1.1",
  "server_port": 888,
  "local_address": "127.0.0.1",
  "local_port": 1080,
  "password": "verysecretpass",
  "method": "chacha20-ietf-poly1305",
  "timeout": 7200,
  "no_delay": true,
  "fast_open": true,
  "mode": "tcp_and_udp",
  "plugin": "/opt/shadowsocks/v2ray-plugin_linux_amd64",
  "plugin_opts": ""
}

Запускаем и получаем на клиенте socks5 сервер на 1080 порту. А теперь – финт конем. В конфиг OpenVPN на клиенте добавляем одну единственную строчку:

socks-proxy 127.0.0.1 1080

Ну и перезапускаем все, чтобы прочитало конфиги. Вуаля! У нас получилась следующая схема:

OpenVPN ходит через ShadowSocks, который ходит через хрен знает как настроенный интернет.

Но через некоторое время проявилась та же самая боль: немного погодя клиент терял соединение с сервером. Причем перезапустишь – все снова начинает бегать. Ставил опции ping, менял MSS и MTU – пофиг: рандомно теряем коннект.

Ок, перевел openvpn и shadowsock на TCP. Всё магически исправилось. Коннект стабильный, не рвется, пакетики бегают туда-сюда.

Отключил "mode": "tcp_and_udp", позакрывал фаирволлами и начал тестить.

Итак, прямой tcp линк безо всяких штук

[  1] 0.0000-10.2561 sec   112 MBytes  91.8 Mbits/sec

Да, клиент сидит на дешевом тарифном плане в 100 мегабит, поэтому практически упираемся в полку. Теперь через все эти навороты:

[  1] 0.0000-10.3474 sec  50.8 MBytes  41.1 Mbits/sec

И это без какого-либо тюнинга! Да, tcp-over-tcp-over-tcp еще тот изврат, но ведь работает же! А после тюнинга (банальные буфера и прочее – в любом мануале по openvpn) я получил следующее:

[  1] 0.0000-100.4276 sec   896 MBytes  74.8 Mbits/sec

Что в плюсах:

  1. Нам надо платить меньше. На одной стороне не нужен выделенный ip (а они нынче дорогие). Выпускают всех через SNAT и норм.
  2. Настраивается не просто, а очень просто.
  3. Снаружи на сервере порт OpenVPN можно спокойно закрыть фаирволлом. Соединение идет с локалхоста. Больше сесуретей богу сесурити!
  4. Память не жрет. Можно смело брать самую дешевую виртуалку под “роутеры”. Вся вот эта машинерия + FRR с OSPF сьели 200 мегов.
  5. Оно работает. Реально, за неделю уже не одиного разрыва.

Что в минусах:

  1. Потеряли в скорости. Немного, но есть. Проблема в том, что на стороне клиента я банально уперся в единственный ЦПУ виртуалки. Когда тесты идут, на той стороне в топе такое:

С другой стороны, там трафик в 20-30 мегабит уже редкость, так что в любом случае все в порядке. Но запас карман не тянет.

Ну и нафига я все это делал: мне нужно было среплицировать один MySQL в другой. Предложенная схема их удовлетворила, значит задача выполнена.