<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
А еще на сервере нужно разрешить коннектится к порту 1194 по UDP
круто! а если в филиале стоит одна машина с windows?
в смысле всего одна машина, или это шлюз? тогда ставишь опенвпн под винду — и точно так же коннектишься… если машина во внутренней сети — то никаких настроек на ней делать не надо…
(3)+ специфичные для суси тут только настройки файрволла, ну, и примерные скрипты и easy в винде в других местах будут находится
Слова «схема vpn сети» вижу. А где же непосредственно схема? 🙂
Пользовался и бросил, мегаглючная вещь
(5) боюсь все 6 точек и сотня компьютеров за ними долго рисовать…
(6) что глючило? у нас никаких проблем нету, терминальный сервер, опубликованный в ВПН у клиентов субьективно быстрее работает (время открлика) с теми же настройками, чем просто опубликованный в инете… файлы кидаются, принтеры печатают — никаких проблем… опять же проблему с длинными именами принтеров в 1С таким образом можно устранить — просто добавив сетевые принтеры на сервере терминалов (имена будут без имени клиента в скобках)…
(7) понимаю… 🙂
все это можно сделать 4 кликами в windows xp или windows 2003…. другое дело, люди ленятся читать …
как не считал — все равно больше четырех кликов получается… да и настройка для того, чтобы шлюз при соединении с впном не переопределялся — закопана еще кликов на 5… маршрутизация настраивается — еще во много кликов… аутентификация с сертификатами, или по имени и паролю — тоже много кликов… ИМХО быстрее не получится, получится только дороже (никогда не понимал людей, которые ставят винду на интернетовский шлюз)…
поясните, пожалуйста, зачем вам понадобился проброс L2, т.е. dev tap? Чем dev tun & topology subnet не устроил? Маршрутизация-то все равно на L3 происходит.
Кроме того, у вас ошибка в рисунке — неверно указана исключаемая маска, да и вообще исключаемые подсети для vpn-клиентов.
Не раскрыта тема конфигурации туннелей между офисами — маршруты-то к ним указаны, но гарантии, что шлюзам офисов будут присвоены именно указанные в маршрутах адреса, никакой. Если же Вы решили использовать те адреса, что первыми им присвоились — в конфиге сервера должно быть ifconfig-pool-persist
Да и Suse в качестве примера выбран неудачно — им почти никто не пользуется, а в распространенных дистрибутивах в ходу iptables.
Двойка, в общем.
(10)
Вы не любите кошек? Да вы их просто готовить не умеете!
Хотя в данном контексте, как ни странно, Вы в чем-то правы. У tap драйвера под Windows есть серьезные проблемы с производительностью. Исправить их open source community не может уже много лет. Что ж, в этом весь опенсорс.
(9) dima1c,
Без применения PPP/GRE инкапсуляции, пожалуйста. 😉 Вот в 7/2008 есть SSTP, а в указанных Вами ОС нету и не будет. А как GRE работает через NAT — ВЫ, думаю, не хуже меня знаете.
(1)
proto tcp поустойчивее, хотя и менее экономичен. Да и порт можно любой назначить.
И еще касательно адресации: админа, использующего в корпоративной среде 192.168.0.0/24, следует гнать из профессии ссаными тряпками. Ибо эта сеть используется у 99% домашних пользователей, и при подключении возникает конфликт адресации.
(11)
тем, что tap — это сетевой мост и мы используем один адрес на всех клиентов и частично избавлены от необходимости настраивать маршрутизацию.
В чем ошибка, как, Вы считаете, должно быть?
цитирую статью:»теперь нужно задать статические адреса для клиентов с внутренними адресами, для этого нужно в папке /etc/openvpn/ccd (см выше) создать файлы с именами сертификатов соответствующих клиентов, с примерно таким содержанием:»
SuseFirewall — это морда к iptables. Действительно, ничего не мешает добавить скрипт, изменяющий правила iptables вручную. мне же показалось проще и «правильнее» (применительно к используемому дистрибутиву opensuse) использовать его встроенные средства. Зачем это нужно — в комментариях к настройкам написано, как настроить susefirewall — в статье тоже указано.
Тут каждый сам для себя решает. 19 человекам, судя по всему, было полезно, а минуса от Вас я не вижу 🙂
при подключении через 3g по rdp поверх этого vpn — разница видна на глаз, и она не в пользу варианта с tcp. А надежность обеспечивается тем, что тот же самый tcp идет уже внутри туннеля.
(14)
Спасибо, Кэп!
(15)
Это Ваше право, если Вы — работодатель. О том, что будет конфликт адресов — я написал, человек, прочитавший статью сам может сделать вывод о том, нужно ему использовать свои адреса, или нет. Можно еще написать о том, что 10.8.0.0 у провайдера внутри может использоваться, и тогда тоже (в определенной ситуации) возможны косяки. В общем, много к чему можно придраться.
(16)
с topology subnet то же самое. Только бесполезных данных гоняется меньше.
Ограничение: внутренняя сеть клиентов не должна пересекаться со следующими сетями:
192.168.0.0/24
192.168.1.0/24
192.168.2.0/24
UPD как раз при сети клиента 192.168.0.0/28 большая часть хозяйства будет работать. Согласно правилу выбора маршрута по большей маске.
Постоянно пользуюсь с планшета, разницы не вижу, все вполне комфортно. dev tun, topology subnet, proto tcp, tun-mtu 1024.
Плюс в том, что при отвале 3G, к примеру, в дороге, реконнект происходит через 10-12 секунд против 20-30 с UDP. ping стоит 10
Вот как раз здесь косяки маловероятны, т.к. клиенту эта сеть не нужна. Да и маски различны. Провайдеры крайне редко используют /24 на серых сегментах, обычно маска меньше.
А сменить адресацию в одном сегменте — работы на полчаса. Если, конечно, сеть нормально настроена, без костылей в виде статических маршрутов на клиентах и т.п.
Впрочем, если предпочитаете ездить домой к сотрудникам перенастраивать роутеры — welcome. Но — в нерабочее время и бесплатно.
А что касается iptables — ни в одном никсовом howto Вы не найдете указания использовать дополнительные оболочки. Все на iptables -A. Ибо это универсальная команда, в отличие от.
А вот это, простите, проморгал.
(1)Есть сервер: ОС Майкрософт Windows 10 Pro, Версия 10.0.17763 Сборка 17763, Процессор Intel® Core(T …M) i7-4770K CPU @ 3.50GHz, 3501 МГц, ядер: 4, логических процессоров: 8, на нем установлено: 1С. Организован многопользовательский режим по RDPWrap-v1.6.2. К нему подключаются офисы по RDP через VPN подключение, все работает отлично, но очень медленно работает: касса ККМ Атол 77ф и терминал Verifone 820x. Подсказали, что если создать единую сеть и настроить обмен по IP, то будет все быстро работать. Начал настраивать OpenVPN, на сервере настроил все по инструкции, но при подключении выдает ошибку: «Options error: —pull-filter cannot be used with —mode server. Use —help for more information.» Не могу разобраться ни как…. на локальном компе вообще ни как не могу поставить клиента, ошибки. Кто поможет по тиму? и вообще в ту степь я полез??
(18) А касса не в демо режиме? какой пинг от точки до сервера?
(19) касса не в демо, а как измерить пинг?