分散されたKerio Connectサーバー間の共有フォルダ、連絡先、カレンダーの完全同期

こんにちは、ハブル!



仕事



私の組織では、Kerio Connectプラットフォームでメールサーバーが使用されており、ユーザーにサービスを提供するメールサーバーがさまざまな都市にインストールされています。ドメインは第3レベルで異なり、サイトの都市を示しているため、当初、分散構造はありませんでした。すべてが機能し、誰もが幸せでした。ある晴れた日-経営陣は、すべてのサイト間で共通の業務カレンダーであるタスクを設定しました。



バックグラウンド



最初は、分散Kerioメールドメインを上げるというアイデアでしたが、彼はすべて自分で行います。分散ドメインが作成されたと言われましたが、そこにはありませんでした。サーバーは、同じサーバー上にあるドメイン間でカレンダー、フォルダー、連絡先を同期する準備ができていましたが、複数のサーバー間でデータを同期することはできませんでした。



もちろん、私はそのようなトリックを期待していなかったし、長い間、必要な機能がないことを信じることができませんでした。後で私はこの事実の文書による確認を見つけました。私はとても困惑し、失望しました。



タスクはスムーズに問題に変わりました。



オプションは何でしたか



  • いくつかのサードパーティソフトウェアと必要なデータを交換する、異なるサーバー上に2つのクライアントを作成します。この機能を実装するサードパーティ製のソフトウェアを見つける必要がありました。私はそのようなレーキは好きではありませんが、これが唯一の迅速な解決策であるように思われました。
  • . , Kerio , , - , , - .


, Kerio , , — .



, “ ”, 6 :



  • – .
  • — .


, – DFS







  • , OS Windows. ( Linux. OS)
  • , — .
  • DFS .
  • Kerio, , , Kerio . ( )
  • DFS.
  • - ( )




( )



1. Kerio Distributed domain





Master , .



, Kerio , ,



:







, Master :









— .



! , ( — )



— , .

— ( ) .



2. Kerio



, . , , .



– , , , - , .



.



~DataMail\mail\#public\ \#msgs

~DataMail\mail\**Domain**\#public\ \#msgs



, , #msgs — , .



3. DFS



DFS, , .



DFS — Windows Server, ,

MS DFS



DFS – .







.





( — ) .



.



4.





(DFS), — - - , - .



, , . 6 – 12 .



, - , DFS, - , #msgs , .



Kerio , , 6 .

, index.fld, Kerio . , , , , , Kerio - index.fld

— - - .



, - — , , , .



?



.





, —



. , - #msgs, , . .



, , (15 ) 3-4 .



, , .



Kerio API







, , –

session = callMethod("Domains.checkPublicFoldersIntegrity",{}, token)



, , - , .



, , , .





CMD



Re-index.bat



@echo off
set dir=%~dp0
%dir:~0,2%
CD "%~dp0\"
md "%CD%\LOG\"
md "%CD%\Setup\"

ECHO -Start- >> "%CD%\LOG\%Computername%.log"
ECHO Start -> %Computername% %Date% %Time% >> "%CD%\LOG\%Computername%.log"

SetLocal EnableDelayedExpansion
for /f "UseBackQ Delims=" %%A IN ("%CD%\Setup\%Computername%.List") do (
  set /a c+=1
  set "m!c!=%%A"
)

set d=%c%
Echo Folder = %c%
ECHO Folder = %c% >> "%CD%\LOG\%Computername%.log"
ECHO.
ECHO. >> "%CD%\LOG\%Computername%.log"

:start
cls
if %c% LSS 1 exit
set /a id=1
set R=0

:Find
REM PF-Start
if "%id%" gtr "%c%" if %R% == 1 Goto Reindex 
if "%id%" gtr "%c%" timeout 60 && Goto start

For /F "tokens=1-3" %%a IN ('Dir "!m%id%!\#msgs\" /-C/S/A:-D') Do Set 2DirSize!id!=!DS!& Set DS=%%c
if "2DirSize!id!" == "" set 1DirSize!id!=!2DirSize%id%!

echo %id%
ECHO !m%id%!
echo Count        [ !1DirSize%id%! -- !2DirSize%id%! ]

if "!1DirSize%id%!" == "!2DirSize%id%!" ECHO Synk

REM DEL index.fld
if "!1DirSize%id%!" NEQ "!2DirSize%id%!" del /f /q !m%id%!\index.fld && del /f /q !m%id%!\indexlog.fld && del /f /q !m%id%!\search.fld && set R=1 && ECHO RE-index Count && ECHO RE-index Count %Date% %Time% - Delete !m%id%! >> "%CD%\LOG\%Computername%.log"

set 1DirSize!id!=!2DirSize%id%!

ECHO.
ECHO.

set /a id+=1
goto Find

:Reindex
ECHO. >> "%CD%\LOG\%Computername%.log"
ECHO --- RE-INDEX - Start - %Date% %Time% --- >> "%CD%\LOG\%Computername%.log"
ECHO. >> ----------------------------------- >> "%CD%\LOG\%Computername%.log"
call PublicFolders.py
timeout 60
goto start

exit


( , )



\Setup\%Computername%.List



%Computername% — ( .)



%Computername%.List – , , .



, , .



.



, , , : index.fld, indexlog.fld, search.fld — .



LOG .



インデックス作成

プロセスインデックス作成プロセスは、API関数Kerio

Session = callMethod( "Domains.checkPublicFoldersIntegrity"、{}、token)を実行するように縮小されています



実行例は

-python PublicFolders.pyにあります



import json
import urllib.request
import http.cookiejar
""" Cookie storage is necessary for session handling """
jar = http.cookiejar.CookieJar()
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(jar))
urllib.request.install_opener(opener)
""" Hostname or ip address of your Kerio Control instance with protocol, port and credentials """

server = "http://127.0.0.1:4040"
username = "user"
password = "password"

def callMethod(method, params, token = None):
    """
    Remotely calls given method with given params.
    :param: method string with fully qualified method name
    :param: params dict with parameters of remotely called method
    :param: token CSRF token is always required except login method. Use method "Session.login" to obtain this token.
    """
    data =  {"method": method ,"id":1, "jsonrpc":"2.0", "params": params}

    req = urllib.request.Request(url = server + '/admin/api/jsonrpc/')
    req.add_header('Content-Type', 'application/json')
    if (token is not None):
        req.add_header('X-Token', token)    

    httpResponse = urllib.request.urlopen(req, json.dumps(data).encode())

    if (httpResponse.status == 200):
        body = httpResponse.read().decode()
        return json.loads(body)

session = callMethod("Session.login", {"userName":username, "password":password, "application":{"vendor":"Kerio", "name":"Control Api-Local", "version":"Python"}})
token = session["result"]["token"]
print (session)

session = callMethod("Domains.checkPublicFoldersIntegrity",{"domainId": "test2.local"}, token)
print (session)

callMethod("Session.logout",{}, token)


http://127.0.0.1:4040はそのままにすることができますが、HTTPSが必要な場合、PythonはKerio証明書を信頼する必要があります。



また、ファイルでは、メールサーバーのこの機能(管理-共有メールフォルダー)を実行する権限を持つアカウントを指定する必要があります。



私の記事がKerio Connectの管理者に役立つことを願っています。




All Articles