LINUX.ORG.RU
ФорумAdmin

Freepbx с подключением к внешней базе данных

 , ,


0

1

Устанавливаю астериск+freepbx на centos 7, базы данных использую только для freepbx (астериск без них живет), всегда на локалхосте (mariaDB 5.5). Понадобилось базы держать на отдельном сервере mysql (он в локалке на нестандартном порте).

На сервере mysql созданы две БД (aster, astercdrdb - их по умолчанию требует freepbx), пользователь с правами на эти базы, пароль. Проверяю, есть ли доступ до этих БД через подключение с Heidi. Всё доступно, пароль верен.

При установке freepbx:

 ./install
Database engine [mysql]: 192.168.1.110:33061
Database name [asterisk]: aster
CDR Database name [asteriskcdrdb]: astercdrdb
Database username [root]: aster
Database password: 5245dhdfgx
File owner user [asterisk]:
File owner group [asterisk]:
Filesystem location from which FreePBX files will be served [/var/www/html]:
Filesystem location from which Asterisk configuration files will be served [/etc/asterisk]:
Filesystem location for Asterisk modules [/usr/lib64/asterisk/modules]:
Filesystem location for Asterisk lib files [/var/lib/asterisk]:
Filesystem location for Asterisk agi files [/var/lib/asterisk/agi-bin]:
Location of the Asterisk spool directory [/var/spool/asterisk]:
Location of the Asterisk run directory [/var/run/asterisk]:
Location of the Asterisk log files [/var/log/asterisk]:
Location of the FreePBX command line scripts [/var/lib/asterisk/bin]:
Location of the FreePBX (root) command line scripts [/usr/sbin]:
Location of the Apache cgi-bin executables [/var/www/cgi-bin]:
Directory for FreePBX html5 playback files [/var/lib/asterisk/playback]:
Checking if SELinux is enabled...Its not (good)!
Reading /etc/asterisk/asterisk.conf...Done
Checking if Asterisk is running and we can talk to it as the 'asterisk' user...Done
Preliminary checks done. Starting FreePBX Installation
Checking if this is a new install...Yes (No /etc/amportal.conf file detected)
Database installation checking credentials and permissions..Error!
Invalid Database Permissions. The error was: could not find driver
Нет драйвера. Пакеты
unixodbc unixodbc-devel libtool-ltdl libtool-ltdl-devel mysql-connector-odbc 
установлены, в файле odbc.ini прописано (изначально файла не было, создан руками):
[MySQL-astercdrdb]
Description=MySQL connection to 'asterisk' database
Driver=MySQL
Server=192.168.1.110
Database=astercdrdb
Port=33061
User=aster
Password=5245dhdfgx
Socket=/var/lib/mysql/mysql.sock
option=3
При проверке коннекта до сервера mysql
echo "select 1" | isql -v MySQL-astercdrdb
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1                   |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount returns 1
1 rows fetched
SQL> 
Драйвер подключен, но не найден. В параметре Database engine [mysql]: пробовала указывать MySQL-astercdrdb, MySQL, собственно, IP-адрес с портом...

Как правильно указать freepbx сервер с его базами данных?

Вроде как коннектор в центоси в extras лежал. Это новая станция или старую переделываешь? А то ему пофиг должно быть где база

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Это новая станция или старую переделываешь

Ставлю всё по новой,

Вроде как коннектор в центоси в extras лежал

По запросу «extras» нашла:

1. В /var/lib/yum/repos/x86_64/7/extras пусто.

2. В /var/cache/yum/x86_64/7/extras

 ls -la
итого 764
drwxr-xr-x. 4 root root   4096 мар 29 14:42 .
drwxr-xr-x. 7 root root   4096 мар 29 15:01 ..
-rw-r--r--. 1 root root 142401 мар  9 18:19 82e6f284e772607a560959e4d4aef6a6a3522cfc7570b0c46aad71e9f6dd3b19-primary.sqlite.bz2
-rw-r--r--. 1 root root      0 мар 29 14:32 cachecookie
-rw-r--r--. 1 root root 609821 мар  9 18:19 d272d1230746f8a89c700ae822bc92d1c22a0034211601fef129d7360667cf4c-filelists.sqlite.bz2
drwxr-xr-x. 2 root root     56 мар 29 14:42 gen
-rw-r--r--. 1 root root    583 мар 29 14:32 mirrorlist.txt
drwxr-xr-x. 2 root root      6 мар 29 14:47 packages
-rw-r--r--. 1 root root   3448 мар  9 18:19 repomd.xml

Оба файла odbc.ini и odbcinst.ini находятся в /etc/

manik207 ()
Ответ на: комментарий от manik207

сорри, не extras. пакет называется asterisk-addons. раньше коннектор в нем был

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Пакета с таким именем нет, по запросу addons -> /usr/src/asterisk-13/addons:

ls -la
итого 12964
drwxrwxr-x+  4 1023 users    4096 мар 29 15:46 .
drwxr-xr-x+ 31 1023 users    4096 мар 29 15:41 ..
-rw-rw-r--+  1 1023 users   19263 фев 13 22:51 app_mysql.c
-rw-rw-r--+  1 root root      126 мар 29 15:45 app_mysql.exports
-rw-rw-r--+  1 root root        0 мар 29 15:17 .app_mysql.makeopts
-rw-rw-r--+  1 root root      279 мар 29 15:17 .app_mysql.moduleinfo
-rw-rw-r--+  1 root root   564552 мар 29 15:45 app_mysql.o
-rw-rw-r--+  1 root root    14445 мар 29 15:45 .app_mysql.o.d
-rwxrwxr-x+  1 root root   303080 мар 29 15:45 app_mysql.so
-rw-rw-r--+  1 1023 users   22448 фев 13 22:51 cdr_mysql.c
-rw-rw-r--+  1 root root      126 мар 29 15:45 cdr_mysql.exports
-rw-rw-r--+  1 root root        0 мар 29 15:17 .cdr_mysql.makeopts
-rw-rw-r--+  1 root root      282 мар 29 15:17 .cdr_mysql.moduleinfo
-rw-rw-r--+  1 root root   595896 мар 29 15:45 cdr_mysql.o
-rw-rw-r--+  1 root root    13571 мар 29 15:45 .cdr_mysql.o.d
-rwxrwxr-x+  1 root root   315608 мар 29 15:45 cdr_mysql.so
-rw-rw-r--+  1 1023 users  124593 фев 13 22:51 chan_mobile.c
-rw-rw-r--+  1 root root        0 мар 29 15:17 .chan_mobile.makeopts
-rw-rw-r--+  1 root root      259 мар 29 15:17 .chan_mobile.moduleinfo
-rw-rw-r--+  1 1023 users  150880 фев 13 22:51 chan_ooh323.c
-rw-rw-r--+  1 root root      126 мар 29 15:46 chan_ooh323.exports
-rw-rw-r--+  1 1023 users    3710 фев 13 22:51 chan_ooh323.h
-rw-rw-r--+  1 root root        0 мар 29 15:17 .chan_ooh323.makeopts
-rw-rw-r--+  1 root root      223 мар 29 15:17 .chan_ooh323.moduleinfo
-rw-rw-r--+  1 root root  1443080 мар 29 15:45 chan_ooh323.o
-rw-rw-r--+  1 root root    17561 мар 29 15:45 .chan_ooh323.o.d
-rwxrwxr-x+  1 root root  6064160 мар 29 15:46 chan_ooh323.so
-rw-rw-r--+  1 1023 users    7452 фев 13 22:51 format_mp3.c
-rw-rw-r--+  1 root root      126 мар 29 15:46 format_mp3.exports
-rw-rw-r--+  1 root root        0 мар 29 15:17 .format_mp3.makeopts
-rw-rw-r--+  1 root root      238 мар 29 15:17 .format_mp3.moduleinfo
-rw-rw-r--+  1 root root   407464 мар 29 15:46 format_mp3.o
-rw-rw-r--+  1 root root    11752 мар 29 15:46 .format_mp3.o.d
-rwxrwxr-x+  1 root root   410544 мар 29 15:46 format_mp3.so
-rw-rw-r--+  1 1023 users       4 фев 13 22:51 .gitignore
-rw-rw-r--+  1 1023 users    2957 фев 13 22:51 Makefile
-rw-rw-r--+  1 root root        0 мар 29 15:17 .makeopts
-rw-rw-r--+  1 root root     1687 мар 29 15:17 .moduleinfo
drwxrwxr-x+  2 root root     4096 мар 29 15:46 mp3
-rw-rw-r--+  1 root root     6774 мар 29 15:46 .mp3_common.o.d
-rw-rw-r--+  1 root root     3312 мар 29 15:46 .mp3_dct64_i386.o.d
-rw-rw-r--+  1 root root     6356 мар 29 15:46 .mp3_decode_ntom.o.d
-rw-rw-r--+  1 root root     6355 мар 29 15:46 .mp3_interface.o.d
-rw-rw-r--+  1 root root     6379 мар 29 15:46 .mp3_layer3.o.d
-rw-rw-r--+  1 root root     3980 мар 29 15:46 .mp3_tabinit.o.d
drwxrwxr-x+  3 1023 users      43 фев 13 22:51 ooh323c
-rw-rw-r--+  1 1023 users   24715 фев 13 22:51 ooh323cDriver.c
-rw-rw-r--+  1 1023 users    1645 фев 13 22:51 ooh323cDriver.h
-rw-rw-r--+  1 root root   649184 мар 29 15:46 ooh323cDriver.o
-rw-rw-r--+  1 root root    17046 мар 29 15:46 .ooh323cDriver.o.d
-rw-rw-r--+  1 root root     7994 мар 29 15:45 .ooh323c_src_context.o.d
-rw-rw-r--+  1 root root     7992 мар 29 15:45 .ooh323c_src_decode.o.d
-rw-rw-r--+  1 root root     7990 мар 29 15:45 .ooh323c_src_dlist.o.d
-rw-rw-r--+  1 root root     7992 мар 29 15:45 .ooh323c_src_encode.o.d
-rw-rw-r--+  1 root root     7994 мар 29 15:45 .ooh323c_src_errmgmt.o.d
-rw-rw-r--+  1 root root     8060 мар 29 15:45 .ooh323c_src_eventHandler.o.d
-rw-rw-r--+  1 root root     8232 мар 29 15:45 .ooh323c_src_h323_H235-SECURITY-MESSAGESDec.o.d
-rw-rw-r--+  1 root root     8129 мар 29 15:46 .ooh323c_src_h323_H235-SECURITY-MESSAGESEnc.o.d
-rw-rw-r--+  1 root root     8380 мар 29 15:46 .ooh323c_src_h323_H323-MESSAGESDec.o.d
-rw-rw-r--+  1 root root     8277 мар 29 15:46 .ooh323c_src_h323_H323-MESSAGESEnc.o.d
-rw-rw-r--+  1 root root     8271 мар 29 15:46 .ooh323c_src_h323_H323-MESSAGES.o.d
-rw-rw-r--+  1 root root     8247 мар 29 15:46 .ooh323c_src_h323_MULTIMEDIA-SYSTEM-CONTROLDec.o.d
-rw-rw-r--+  1 root root     8144 мар 29 15:46 .ooh323c_src_h323_MULTIMEDIA-SYSTEM-CONTROLEnc.o.d
-rw-rw-r--+  1 root root     8135 мар 29 15:46 .ooh323c_src_h323_MULTIMEDIA-SYSTEM-CONTROL.o.d
-rw-rw-r--+  1 root root     8040 мар 29 15:45 .ooh323c_src_memheap.o.d
-rw-rw-r--+  1 root root     9961 мар 29 15:45 .ooh323c_src_ooCalls.o.d
-rw-rw-r--+  1 root root     9872 мар 29 15:45 .ooh323c_src_ooCapability.o.d
-rw-rw-r--+  1 root root    11808 мар 29 15:45 .ooh323c_src_oochannels.o.d
-rw-rw-r--+  1 root root    11379 мар 29 15:45 .ooh323c_src_ooCmdChannel.o.d
-rw-rw-r--+  1 root root     4888 мар 29 15:45 .ooh323c_src_ooDateTime.o.d
-rw-rw-r--+  1 root root    10293 мар 29 15:45 .ooh323c_src_ooGkClient.o.d
-rw-rw-r--+  1 root root    10071 мар 29 15:45 .ooh323c_src_ooh245.o.d
-rw-rw-r--+  1 root root     9931 мар 29 15:45 .ooh323c_src_ooh323ep.o.d
-rw-rw-r--+  1 root root    10220 мар 29 15:45 .ooh323c_src_ooh323.o.d
-rw-rw-r--+  1 root root     9820 мар 29 15:45 .ooh323c_src_ooLogChan.o.d
-rw-rw-r--+  1 root root    11379 мар 29 15:45 .ooh323c_src_ooports.o.d
-rw-rw-r--+  1 root root    11687 мар 29 15:45 .ooh323c_src_ooq931.o.d
-rw-rw-r--+  1 root root    11485 мар 29 15:45 .ooh323c_src_ooSocket.o.d
-rw-rw-r--+  1 root root    11278 мар 29 15:45 .ooh323c_src_ooStackCmds.o.d
-rw-rw-r--+  1 root root     9076 мар 29 15:45 .ooh323c_src_ooTimer.o.d
-rw-rw-r--+  1 root root     9912 мар 29 15:45 .ooh323c_src_ootrace.o.d
-rw-rw-r--+  1 root root     9511 мар 29 15:45 .ooh323c_src_ooUtils.o.d
-rw-rw-r--+  1 root root     8036 мар 29 15:45 .ooh323c_src_perutil.o.d
-rw-rw-r--+  1 root root     9592 мар 29 15:45 .ooh323c_src_printHandler.o.d
-rw-rw-r--+  1 root root     8040 мар 29 15:45 .ooh323c_src_rtctype.o.d
-rw-rw-r--+  1 1023 users   53055 фев 13 22:51 res_config_mysql.c
-rw-rw-r--+  1 root root      126 мар 29 15:46 res_config_mysql.exports
-rw-rw-r--+  1 root root        0 мар 29 15:17 .res_config_mysql.makeopts
-rw-rw-r--+  1 root root      273 мар 29 15:17 .res_config_mysql.moduleinfo
-rw-rw-r--+  1 root root  1002704 мар 29 15:46 res_config_mysql.o
-rw-rw-r--+  1 root root    13762 мар 29 15:46 .res_config_mysql.o.d
-rwxrwxr-x+  1 root root   469896 мар 29 15:46 res_config_mysql.so
Скажите, похожего на коннектор не вижу... как выглядит этот коннектор, odbc - это не сюда, из другой оперы?

manik207 ()
Ответ на: комментарий от manik207

Так все сорри протупился. Астер вообще не в кассу. У тебя драйвера php-mysql нету

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Пакет из yum'а с php-mysql установлен. Кроме него, установлены:

php.x86_64 5.4.16-42.el7 
php-cli.x86_64 5.4.16-42.el7 
php-common.x86_64 5.4.16-42.el7  
php-gd.x86_64 5.4.16-42.el7                                                                  
php-mbstring.x86_64 5.4.16-42.el7       
php-mysql.x86_64 5.4.16-42.el7 
php-pdo.x86_64 5.4.16-42.el7 
php-pear.noarch 1:1.9.4-21.el7 
php-process.x86_64 5.4.16-42.el7
php-xml.x86_64
Как именно его подключить как драйвер?

manik207 ()
Ответ на: комментарий от manik207

можешь показать вывод php -m? вообще оно должно само цепляться. сейчас глянул скрипт установки, там эта ошибка вылетает на одной единственной строке - собственно установке сессии с базой через PDO

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Вывод php -m

php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
json
libxml
mbstring
mhash
mysql
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshm
tokenizer
wddx
xml
xmlreader
xmlwriter
xsl
zip
zlib

[Zend Modules]
manik207 ()
Ответ на: Вывод php -m от manik207

ага, все, раскурил. модули все есть. косяк в инсталл-скрипте, вернее в скрипте installcommand.class.php из ./installlib. внимание на 381 строку

$amp_conf['AMPDBUSER'] = $answers['dbuser'];
$amp_conf['AMPDBPASS'] = $answers['dbpass'];
$amp_conf['AMPDBHOST'] = 'localhost';

if($dbroot) {
	$output->write("Database Root installation checking credentials and permissions..");
} else {
	$output->write("Database installation checking credentials and permissions..");
}
$dsn = $amp_conf['AMPDBENGINE'] . ":host=" . $amp_conf['AMPDBHOST'];
try {
	$pdodb = new \PDO($dsn, $amp_conf['AMPDBUSER'], $amp_conf['AMPDBPASS']);
} catch(\Exception $e) {
	$output->writeln("<error>Error!</error>");
	$output->writeln("<error>Invalid Database Permissions. The error was: ".$e->getMessage()."</error>");
	exit(1);
}

отсюда следуют несколько интересных выводов. первое - оно гвоздями прибито к локалхосту. решение - поменять $amp_conf['AMPDBHOST']. второе - на вопрос Database engine [mysql]: нужно просто нажать Enter, это не IP, а именно драйвер

так получилось что он думал что это драйвер у тебя называется 192.168.1.110:33061

но вообще там еще много интересного. скажем если заглянуть в ./installlib/files/odbc.ini - там внезапно тоже все к локалхосту прибито. Вообще советую сделать grep по слову localhost, на всякий

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 4)
Ответ на: комментарий от upcFrost

Директорию ./installlib не обнаружила, в /usr/src/freepbx/installlib/installcommand.class.php исправила:

$amp_conf['AMPDBUSER'] = $answers['dbuser'];
$amp_conf['AMPDBPASS'] = $answers['dbpass'];
$amp_conf['AMPDBHOST'] = '192.168.1.110';
$amp_conf['AMPDBPORT'] = '33061';
В installlib/files/odbc.ini

[MySQL-CDRDBNAME]
Description=MySQL connection to 'CDRDBNAME' database
driver=MySQL
server=192.168.1.110
database=astercdrdb
Port=33061
User=aster
Password=5245dhdfgx
Socket=/var/lib/mysql/mysql.sock
option=3
Charset=utf8

При инсталляции freepbx:

./install --dbname=aster --cdrdbname=astercdrdb --dbuser=aster --dbpass=5245dhdfgx -n
Checking if SELinux is enabled...Its not (good)!
Reading /etc/asterisk/asterisk.conf...Done
Checking if Asterisk is running and we can talk to it as the 'asterisk' user...Done
Preliminary checks done. Starting FreePBX Installation
Checking if this is a new install...Yes (No /etc/amportal.conf file detected)
Database installation checking credentials and permissions..Error!
Invalid Database Permissions. The error was: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '192.168.1.119' (113)
Несколько раз проверила пароли, пользователя mysql, базы данных есть.

Из сети нестандартный порт mysql-сервера открыт (несколько других серверов на него «запитаны»). Перепроверила

 nmap -p 33061 192.168.1.110
Nmap scan report for 192.168.1.110
Host is up (0.00056s latency).
PORT      STATE SERVICE
33061/tcp open  unknown
MAC Address: 52:54:00:77:50:77 (QEMU Virtual NIC)

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
Может, где еще просмотрела или порт mysql-сервера недоуказан...

manik207 ()
Ответ на: комментарий от manik207

Чуть хитрее. Взгляни внимательно на строку вызова PDO и на примеры. Сама строка:

$pdodb = new \PDO($dsn, $amp_conf['AMPDBUSER'], $amp_conf['AMPDBPASS']);
Пример с пыхосайта
$pdo = new PDO('pgsql:host=192.168.137.1;port=5432;dbname=anydb', 'anyuser', 'pw');
Как получается $dsn
$dsn = $amp_conf['AMPDBENGINE'] . ":host=" . $amp_conf['AMPDBHOST'];
выражаясь проще - нужно чтоб из этой строки вышло то, что нужно. к базе он цепляется чуть позже, потому хз нужна ли она сразу. Но так или иначе - поменяй $pdodb и добавь туда нужный порт.
$dsn = $amp_conf['AMPDBENGINE'] . ":host=" . $amp_conf['AMPDBHOST'] . ";port=" . $amp_conf['AMPDBPORT'];

если честно - можно конечно действовать намного грубее тупо захардкодив все прямо в вызове PDO, но есть шанс потом напороться (а скриптец 950 строк).

кстати да, если поиском пройтись по скрипт - dsn еще в паре мест есть

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 2)
Ответ на: комментарий от upcFrost

кстати да, если поиском пройтись по скрипт - dsn еще в паре мест есть

а, не, нету. но на 705 строке он что-то пишет во freepbx.conf, да и в еще скриптах 10-15 встречается подобное. в целом хост он съест, то проблем нет, а вот порт... есть мысль что лучше написать $amp_conf['AMPDBHOST'] = '192.168.1.110;port=33061'; вместо явного указания порта и изменения всех dsn. вероятность что прокатит выше

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Если такая боль, может, проще iptables'ом или ssh форвард порта на реальный сервер сделать?

berrywizard ★★★★★ ()
Ответ на: комментарий от upcFrost

Опробовала последний вариант:

 $amp_conf['AMPDBHOST'] = '192.168.1.110;port=33061';
Установщик freepbx ругается так (выделяя красным):
  [Exception]
  SQLSTATE[HY000] [2005] Unknown MySQL server host 
'192.168.1.110%3Bport%3D33061' (2)::SQLSTATE[HY000] [2005]
Unknown MySQL server host '192.168.1.110%3Bport%3D33061' (2)

  [PDOException]
  SQLSTATE[HY000] [2005] Unknown MySQL server host 
'192.168.1.110%3Bport%3D33061' (2)

manik207 ()
Ответ на: комментарий от upcFrost

Вернула переменную $amp_conf['AMPDBPORT'] = '33061';

Добавила порт в $dns

$dsn = $amp_conf['AMPDBENGINE'] . ":host=" . $amp_conf['AMPDBHOST'] . ";port=" . $amp_conf['AMPDBPORT'];
Инсталлятор все понял правильно, и хост, и порт...
Database installation checking credentials and permissions..Error!
Invalid Database Permissions. The error was: SQLSTATE[HY000] [2005] 
Unknown MySQL server host '192.168.1.110:port=33061' (2)
Недействительны разрешения базы данных... Перепроверила на mysql-сервере, сервера в одной локалке...

-------------------------------------------------------------------------------------------+
| Grants for aster@192.168.%      
+------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'aster'@'192.168.%' IDENTIFIED BY PASSWORD '*FD571203974BAFE0FE...'
| GRANT ALL PRIVILEGES ON `astercdrdb`.* TO aster'@'192.168.%'
| GRANT ALL PRIVILEGES ON `aster`.* TO 'aster'@'192.168.%' 
+------------------------------------------------------------------------------------------+
3 rows in set (0.02 sec)
manik207 ()
Ответ на: комментарий от berrywizard

кстати да, совсем забыл про этот вариант, как-то сбило с толку что скрипт тупо не умеет удаленную базу.

ТС, что если правда вернуть все в зад (ну, просто удалить правки dsn и AMPDBHOST) и перебросить локальный 3306 через iptables? как один из примеров: http://stackoverflow.com/questions/28170004/how-to-do-local-port-forwarding-w...

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Эм... Это всё стоит на centos 7, там firewalld, на iptables - не хотелось бы, не разбираюсь в нем (тапками не кидайте, linux изучала исключительно начиная c Centos 7).

Если правильно поняла, нужно, чтобы запросы, отправляемые на локалхост:3306 перенаправлялись на 192.168.1.110:33061.

А потом принимались обратно, по «зеркальному» правилу - со 192.168.1.110:33061 на локалхост:3306. И разруливает это файрволл...

Нашла firewall-cmd --permanent --zone=public --add-forward-port=port=3306:proto=tcp:toport=33061:toaddr=192.168.1.110

Всё отменять не стала, подняла другую виртуалку, на ней поставила с нуля.

В файрволе:

firewall-cmd --permanent --zone=public --add-forward-port=port=3306:proto=tcp:toport=33061:toaddr=192.168.1.110
firewall-cmd --permanent --zone=public --add-masquerade
firewall-cmd --reload

Установщик freepbx ругается так:

 Error!
Invalid Database Permissions. The error was: SQLSTATE[HY000] [2002] 
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

manik207 ()
Ответ на: комментарий от manik207

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

судя по сырцам эта строка могла взяться только из odbc.ini. ща попробую поднять тестовый полигон, но скорее всего надо просто убрать из этого файла строку про Socket

upcFrost ★★★★★ ()
Ответ на: комментарий от manik207

проверю сегодня на двух тестовых виртуалках. сразу скажу что там MariaDB а не мускул, но думаю проблем это не должно добавить (по манам к пыху коннектор 100% совместим). а вообще - народ воет на этот счет, да. и хост-то ладно, там еще с портом прыгать придется

upcFrost ★★★★★ ()
Ответ на: комментарий от manik207

все, попробовал, у меня взлетело.

суть - при попытке зацепиться на localhost (строчка в скрипте прямо на PDO) оно цепляется на сокет, а вот если на 127.0.0.1 - тогда по TCP. при пробросе локального 3306 на удаленный 33060 и замене это строки с localhost на 127.0.01 все встало

ну вернее как, все встало, вот только нихрена не заработало потому что у меня в виртуалке PHP 7 который не поддерживается (часть функций deprecated). но с точки зрения базы все встало как надо

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Т.е. правильно ли я поняла, localhost нужно заменить 127.0.0.1 в строке

  $amp_conf['AMPDBHOST'] = '127.0.0.1';
без портов и других серверов, а проброс порта уже делать силами файрвола?

manik207 ()
Ответ на: комментарий от manik207

Да, скорее всего самый простой вариант. Ну и в odbc.ini поменять все на 127.0.0.1 и сокет убрать

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

при пробросе локального 3306 на удаленный 33060

Вы пробрасывали через iptables или firewalld? Поделитесь правилом)))

manik207 ()
Ответ на: комментарий от manik207

iptables. Обычный prerouting. Но нужно в sysctl включить route local net

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

В файле odbc.ini удалила строку с socket, localhost заменила на 127.0.0.1, а всё равно в ошибке фигурирует socket...

Invalid Database Permissions. The error was: SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Поиск grep'ом по директории с исходниками не выдал ничего путевого...

grep -rl '/var/lib/mysql/mysql.sock' /usr/src/*
/usr/src/asterisk-13.14.0/addons/res_config_mysql.c
/usr/src/asterisk-13.14.0/addons/app_mysql.o
/usr/src/asterisk-13.14.0/addons/app_mysql.so
/usr/src/asterisk-13.14.0/addons/cdr_mysql.o
/usr/src/asterisk-13.14.0/addons/cdr_mysql.so
/usr/src/asterisk-13.14.0/addons/res_config_mysql.o
/usr/src/asterisk-13.14.0/addons/res_config_mysql.so
/usr/src/freepbx/installlib/files/odbc.ini.orig
Последний файл - эт копия, на всякий случай.

Файрвол вроде пробросила, но даже если ошибка в файрволе, не socket должен цепляться, а TCP...

manik207 ()
Ответ на: комментарий от upcFrost

Файл odbc.ini сейчас в таком виде

[MySQL-CDRDBNAME]
Description=MySQL connection to 'CDRDBNAME' database
driver=MySQL
server=127.0.0.1
database=asteriskcdrdb
Port=3306
option=3
Charset=utf8

Но нужно в sysctl включить route local net

По запросу нашла

sysctl -w net.ipv4.conf.eth0.route_localnet=1
Отзыв системы:
net.ipv4.conf.eth0.route_localnet = 1

manik207 ()
Ответ на: комментарий от manik207

ок, тогда серия простых тестов.

  • php --ri pdo - какие драйвера показывает
  • php -r 'try { $test = new \PDO("mysql:host=localhost", "t", "t"); } catch ( PDOException $E ) {echo $E->getMessage();}' - какой эксепшн
  • php -r 'try { $test = new \PDO("mysql:host=127.0.0.1", "t", "t"); } catch ( PDOException $E ) {echo $E->getMessage();}' - тот же вопрос

у меня в первом случае есть дрова на мускул, во втором - No such file (собственно сокет), в третьем - Connection refused (вм с базой выключена). Соответственно если поменять AMPDBHOST на 127.0.0.1 вместо localhost, то оно должно идти по третьем сценарию

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Упс, забыла добавить MariaDB в автозагрузку, добавила, вопрос по socket'у снимается

php --ri pdo

PDO

PDO support => enabled
PDO drivers => mysql, sqlite

php -r 'try { $test = new \PDO(«mysql:host=localhost», «t», «t»); } catch ( PDOException $E ) {echo $E->getMessage();}'

SQLSTATE[28000] [1045] Access denied for user 't'@'localhost' (using password: YES)

php -r 'try { $test = new \PDO(«mysql:host=127.0.0.1», «t», «t»); } catch ( PDOException $E ) {echo $E->getMessage();}'

SQLSTATE[28000] [1045] Access denied for user 't'@'localhost' (using password: YES)

Теперь freepbx приписывает к localhost пользователя mysql:

Error!
Invalid Database Permissions. The error was: SQLSTATE[28000] 
[1045] Access denied for user 'aster'@'localhost' (using password: YES)

А у меня он по-любому будет через @192.168.% или @%. Или нет?

manik207 ()

Эммм. Так а база-то где стоит? А то он почему-то все на localhost щемит. На локальном тоже база есть? Фаервол кстати можно проверить через tcpdump. Чтоб просто убедиться что маршрутизация работает.

У меня он юзера приписывал к реальному адресу, pdo шлет только логин и пароль без уточнения хоста

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

Запуталась я со службами mariaDB...

Что есть:

1. Есть сервер, на котором ставлю freepbx. Тут же стоит mariabd, баз в ней нет, но сервер работает. (комп_1)

2. Есть сервер с mariaDB, он отдельный, в локалке, там базы данных есть и пользователь aster@192.168.% (комп_2)

Что на выходе:

1. Если на комп_1 отключаю mariaDB, при установке freepbx ругается на сокет.

2. Если на комп_1 запускаю службу mariaDB, freepbx ругается, что пользователя aster@localhost нет. Так его там и нет.

manik207 ()
Ответ на: Запуталась я со службами mariaDB... от manik207

Если на комп_1 отключаю mariaDB, при установке freepbx ругается на сокет

вот. именно этот момент и надо обойти. если отключить местную базу (желательно совсем, иначе мешает эксперименту) и оставить только ту что в локалке, настроить фаервол и запустить те тестовые однострочники - он во всех случаях в сокет лезет, или в случае 127.0.0.1 все-таки пытается юзать TCP?

Если во всех случаях - если опять же сделать однострочник заменив localhost на адрес внешнего интерфейса, и подбить правила под это дело, куда он будет щемить тогда?

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Поменяла localhost на 127.0.0.1 и отключила mariaDB - вы правы, стучит не в сокет

Error!
Invalid Database Permissions. The error was: SQLSTATE[HY000] [2003] Can't connect to MySQL server on '127.0.0.1' (111)
Если правильно поняла, то порт переброшен неправильно... Поискала темы с пробросами в firewalld - там капец, работающих правил проброса портов на удаленные компы для этой службы не найдено.

Поделитесь правилами для Iptables, может хоть copy-paste'ом получиться...

manik207 ()
Ответ на: комментарий от manik207
iptables -t NAT -A OUTPUT -p tcp -d 127.0.0.1 --dport 3306 -j DNAT --to 1.2.3.4:33060

вместо 1.2.3.4 - адрес куда надо перекинуть. Проверяется в простейшем случае так. iptables -t nat -L -v до коннекта, смотрим счетчик правила, далее mysql -h 127.0.0.1, отменяем через пару секунд и снова проверяем счетчик куда ушел запрос.

upcFrost ★★★★★ ()
Ответ на: комментарий от upcFrost

забыл, еще одно - iptables -t nat -A POSTROUTING -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

и еще вариант проверки если трафика мало - tcpdump -n -l

upcFrost ★★★★★ ()
Последнее исправление: upcFrost (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.