ejabberd的多域名(domain)設置

在ejabberd中能夠支持多個domain,我講一下個人配置過程
個人ejabberd系統是:ejabberd server+sql server+openldap+gateway.
我總共使用了5臺機器,用兩臺機器組成了ejabberd cluster,另外3臺機器分別作sql server,openldap server和gateway。
gateway機器上能夠安裝多個不一樣的gateway軟件,這樣咱們就能夠同時使用多種服務,如icq,aim,msn,yahoo通等等。
我是在公司作的,sql server,openldap server和gateway能不能放到一臺機器上,我沒有試過。
我設置了兩個domain:im.yourcompany.com, im2.yourcompany.com.
設置兩個domain的目的是將不一樣的用戶羣分開管理,不一樣用戶羣的用戶之間仍是能夠互通。好比說我有兩個產品im和im2,我想把使用im和im2的用戶分開管理,就可使用
兩個domain對用戶進行區分,guest@im.yourcompany.com是使用im的用戶,而guest@im2.yourcompany.com是使用im2的用戶。
具體的用戶管理是用openldap進行的,它設置了兩個數據庫,分別對應兩個domain。
我是在fedora 6下進行安裝和配置的,按個人方法在其餘版本下可能會有問題,具體問題具體分析吧
並且只是針對多個domain的設置,不是完整的ejabberd系統設置。
寫的比較亂,有些東西是第一次接觸,可能有些錯誤,你們湊合着看吧。
ejabberd,sql server,openldap的具體安裝過程我就不說了。
(一)openldap設置
先講下openldap的設置,找到slapd.conf文件,打開這個文件,找到這一段
database        bdb
suffix          "dc=my-domain,dc=com"
rootdn          "cn=Manager,dc=my-domain,dc=com"
# Cleartext passwords, especially for the rootdn, should
# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw          secret
咱們把它改成
database        bdb
suffix          "dc=im,dc=yourcompany,dc=com"
rootdn          "cn=Manager,dc=im,dc=yourcompany,dc=com"
rootpw          password
directory       /usr/local/var/openldap-data
database        bdb
suffix          "dc=im2,dc=yourcompany,dc=com"
rootdn          "cn=Manager2,dc=im2,dc=yourcompany,dc=com"
rootpw          password
directory       /usr/local/var/openldap-data2
我設置了兩個ldap的database
database bdb 是數據庫的一種類型,還能夠設成其餘類型
suffix 根據domain分別設爲"dc=im,dc=yourcompany,dc=com"和 "dc=im2,dc=yourcompany,dc=com"
rootdn 是database的管理用戶
rootpw rootdn的密碼
directory    存放openldap數據的文件夾,爲兩個database分別設置不一樣的文件夾,不然會出錯,這兩個文件夾是本身建立的。
這樣slapd.conf文件就設置完了,啓動openldap
而後咱們新建4個文件,root.ldif,root2.ldif,users.ldif和users2.ldif
root.ldif
dn: dc=im,dc=yourcompany,dc=com
objectclass: dcObject
objectclass: organization
o: yourcompany
dc: im
root2.ldif
dn: dc=im2,dc=yourcompany,dc=com
objectclass: dcObject
objectclass: organization
o: yourcompany
dc: im2
admin.ldif
dn: uid=admin,dc=im,dc=yourcompany,dc=com
mail: admin@163.com
userPassword: adminpassword
uid: admin
accountStatus: Activated
objectClass: top
objectClass: person
sn: admin
cn: admin
im2admin.ldif
dn: uid=im2admin,dc=im2,dc=yourcompany,dc=com
mail: im2admin@163.com
userPassword: im2adminpassword
uid: im2admin
accountStatus: Activated
objectClass: top
objectClass: person
sn: im2admin
cn: im2admin
接着進行添加
ldapadd -x -D 「cn=Manager,dc=im,dc=yourcompany,dc=com」 -W -f root.ldif
ldapadd -x -D 「cn=Manager,dc=im,dc=yourcompany,dc=com」 -W -f admin.ldif
ldapadd -x -D 「cn=Manager2,dc=im2,dc=yourcompany,dc=com」 -W -f root2.ldif
ldapadd -x -D 「cn=Manager2,dc=im2,dc=yourcompany,dc=com」 -W -f im2admin.ldif
admin和im2admin分別是兩個domain的管理用戶,經過以上的操做咱們就爲2個domain分別添加了管理用戶並設置了密碼,用這種方法你還能夠添加其它用戶。
ok,openldap設置完畢,能夠用ldapsearch命令查找你剛纔添加的用戶是否存在。
(二)ejabberd server中的設置
首先在ejabberd.cfg中找到
{acl, admin, {user, "admin"}}.
這是設置ejabberd的管理用戶名,由於有兩個domain,須要設置兩個admin的user,便可設爲:
{acl, admin, {user, "imadmin"}}.
{acl, admin, {user, "im2admin"}}.
imadmin和im2admin就是前面咱們在openldap中添加的管理用戶。
admin用戶要有配置的權限,因此設置:
{access, configure, [{allow, admin}]}.
而後加入兩個domain
% Host name:
{hosts, ["im.yourcompany.com","im2.yourcompany.com"]}.
對兩個domain分別進行配置
%% Anonymous login support:
%%  auth_method: anonymous
%%  anonymous_protocol: sasl_anon|login_anon|both
%%  allow_multiple_connections: true|false
{host_config, "im.yourcompany.com", [{auth_method, [odbc,ldap]},
                            {ldap_servers,["192.168.0.10"]},
                                       {ldap_uidattr,"sn"},
                                       {ldap_base,"dc=im,dc=yourcompany,dc=com"},
                                 {ldap_rootdn,"cn=Manager,dc=im,dc=yourcompany,dc=com"},
                                       {ldap_password,"password"},
                                       {odbc_server, "DSN=ejabberd;UID=odbcuser;PWD=odbcpassword"}]}.
{host_config, "im2.yourcompany.com", [{auth_method, [odbc,ldap]},
                            {ldap_servers,["192.168.0.10"]},
                                      {ldap_uidattr,"sn"},
                                       {ldap_base,"dc=im2,dc=yourcompany,dc=com"},
                                 {ldap_rootdn,"cn=Manager2,dc=im2,dc=yourcompany,dc=com"},
                                       {ldap_password,"password"},
                                       {odbc_server, "DSN=ejabberd;UID=odbcuser;PWD=odbcpassword"}]}.
其中auth_method是認證的方法,咱們用odbc和ldap進行驗證,192.168.0.10是openldap server的ip,根據本身的狀況設置。
ldap_base是openldap中存儲用戶賬號的地方,ldap_rootdn是openldap的rootdn,ldap_password是rootdn的密碼,這些都在前面openldap中設置好了。
odbc_server是odbc的服務器,後面的配置與odbc的配置文件中相同。
監聽端口的設置
% Listened ports:
{listen,
 [{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper},
                {max_stanza_size, 65536},
                starttls_required, {certfile, "/etc/ejabberd/im.yourcompany.com.pem"}]},
  {5223, ejabberd_c2s,     [{access, c2s},
                {max_stanza_size, 65536},
                tls, {certfile, "/etc/ejabberd/im.yourcompany.com.pem"}]},
  % Use these two lines instead if TLS support is not compiled
  %{5222, ejabberd_c2s,     [{access, c2s}, {shaper, c2s_shaper}]},
  %{5223, ejabberd_c2s,     [{access, c2s}, ssl, {certfile, "./im.yourcompany.com.pem"}]},
  {5269, ejabberd_s2s_in,  [{shaper, s2s_shaper},
                {max_stanza_size, 131072}
               ]},
  {5280, ejabberd_http,    [http_bind, web_admin]},
{5390, ejabberd_service, [{host, "icq.im.yourcompany.com",[{password, "secret"}]}]},
{5391, ejabberd_service, [{host, "icq.im2.yourcompany.com",[{password, "secret"}]}]},
{5392, ejabberd_service, [{host, "aim.im.yourcompany.com",[{password, "secret"}]}]},
{5393, ejabberd_service, [{host, "aim.im2.yourcompany.com",[{password, "secret"}]}]},
{5395, ejabberd_service, [{host, "msn.im.yourcompany.com",[{password, "secret"}]}]},
{5396, ejabberd_service, [{host, "msn.im2.yourcompany.com",[{password, "secret"}]}]},
{5397, ejabberd_service, [{host, "yahoo.im.yourcompany.com",[{password, "secret"}]}]},
{5398, ejabberd_service, [{host, "yahoo.im2.yourcompany.com",[{password, "secret"}]}]}
]}.
端口5222監聽c2s鏈接,使用STARTTLS,5223也是監聽c2s鏈接,不過使用老的ssl。
5269監聽s2s鏈接,5280監聽http請求,經過5280可使用web進行管理。
5390-5398監聽icq,aim,msn,yahoo服務。經我測試,host後面的hostname應該是惟一且不可改,
如icq.im.yourcompany.com,icq代表是icq服務,im.yourcompany.com區分用戶羣,表示im的用戶,所以要設置兩個端口,分別進行監聽,如不設置5391,im2的用戶將沒法使用icq服務。
模塊設置
% Used modules:
{modules,
[  
{mod_register,   [{access, register}]},
  {mod_roster_odbc,     []},
  {mod_privacy,    []},
  {mod_adhoc,      []},
  {mod_configure,  []}, % Depends on mod_adhoc
  {mod_configure2, []},
  {mod_disco,      []},
  {mod_stats,      []},
  {mod_offline_odbc,    []},
  {mod_announce,   [{access, announce}]}, % Depends on mod_adhoc
  {mod_private,    []},
  {mod_irc,        []},
  {mod_vcard_odbc,      []},
  {mod_muc,        [{access, muc},
            {access_create, muc},
            {access_admin, muc_admin}]},
  {mod_pubsub,     [{access_createnode, pubsub_createnode}]},
  {mod_time,       []},
  {mod_last_odbc,       []},
%  {mod_http_bind,       []},
  {mod_version,    []}
 ]}.
以上是公共模塊
% Add modules :
{host_config, "im2.yourcompany.com", [{{add, modules}, [
  {mod_echo,       [{host, "echo.im.yourcompany.com"}]}
]}]}.
{host_config, "im2.yourcompany.com", [{{add, modules}, [
  {mod_echo,       [{host, "echo.im2.yourcompany.com"}]}
]}]}.
以上是添加各自的模塊
(三)gateway設置
client我是用的spark,一個開源的客戶端軟件,下面是它的網址
http://www.igniterealtime.org/projects/spark/index.jsp
它實際上是一個客戶端的平臺,能夠添加本身的用戶,還能夠將icq,msn,yahoo messenger等服務集成到一塊兒,它們底層的通訊協議都是同樣的,經過安裝和設置gateway軟件,將它們集成到一塊兒。
以icq爲例,安裝的是pyicq-t-0.8a.tar.gz
假設pyicq是你的安裝目錄
修改   pyicq/src/main.py中的
            import signal
            signal.signal(signal.SIGHUP, reloadConfig)
            # Load scripts for PID and daemonizing
         # from twisted.scripts import twistd
           try:
               from twisted.scripts import _twistd_unix as twistd
           except:
               from twisted.scripts import twistd
複製config.example.xml爲config.xml
打開config.xml,設置:
<jid> icq.im.yourcompany.com</jid>
<spooldir>/usr/local/gateway/spool</spooldir> spool文件夾的路徑,本身設置
<mainServer>192.168.1.2</mainServer> 你的ejabberd server的ip
<secret>secret</secret> 密碼
<port>5390</port> icq的監聽端口
這個與ejabberd.cfg中的設置對應,即
{5390, ejabberd_service, [{host, "icq.im.yourcompany.com",[{password, "secret"}]}]},
{5391, ejabberd_service, [{host, "icq.im2.yourcompany.com",[{password, "secret"}]}]},
{5392, ejabberd_service, [{host, "aim.im.yourcompany.com",[{password, "secret"}]}]},
{5393, ejabberd_service, [{host, "aim.im2.yourcompany.com",[{password, "secret"}]}]},
{5395, ejabberd_service, [{host, "msn.im.yourcompany.com",[{password, "secret"}]}]},
{5396, ejabberd_service, [{host, "msn.im2.yourcompany.com",[{password, "secret"}]}]},
{5397, ejabberd_service, [{host, "yahoo.im.yourcompany.com",[{password, "secret"}]}]},
{5398, ejabberd_service, [{host, "yahoo.im2.yourcompany.com",[{password, "secret"}]}]}
而後啓動icq的網關:python PyICQt.py
這樣im.yourcompany.com的用戶能夠應用icq服務了
gateway知道了server的ip和port,這樣它就能夠與服務器創建鏈接
要使im2.yourcompany.com的用戶也應用icq服務,新建pyicq2目錄,從新解壓安裝icq到pyicq2目錄
main.py的配置與上面的同樣,config.xml設置以下:
<jid> icq.im2.yourcompany.com</jid>
<spooldir>/usr/local/gateway/spool</spooldir> spool文件夾的路徑,本身設置
<mainServer>192.168.1.2</mainServer> 你的ejabberd server的ip
<secret>secret</secret> 密碼
<port>5391</port> icq的監聽端口
與ejabberd.cfg中的設置對應
而後啓動gateway,ok
以上是icq gateway的設置和啓動,其它的大同小異
不過我在設置msn的時候遇到了一點問題,msn的gateway裝好之後,登陸spark,提示消息連不上msn服務器,failure with no framework。查了一些資料,在config.xml文件中<host>.....</host>項,默認設爲本機<host>127.0.0.1</host>,本機若是處於NAT後的,設爲127.0.0.1就會連不上服務器,將其改成你的公網IP地址。能夠用 telnet messenger.hotmail.com 1863進行測試你的內網地址可否連上msn服務器。
有時候會登陸的時候會提示沒有註冊,not registered .....什麼的,這個跟你的spooldir的設置有關,更改spool的路徑後,原來添加的用戶找不到它的信息,就會提示沒有註冊,比較笨的方法是把原來的用戶刪除,再登陸如下就好了。
另外,好像msn的gateway在一臺機器上只能啓動一個,因此在一臺機器上無法監聽2個msn服務的端口,這個可能跟它的python程序有關,具體我也不知道。
ejabberd的雙domain系統就設置完了,最後須要在客戶端的機器,也就是你登陸的機器上的/etc/hosts中加入
192.168.1.2      im.yourcompany.com  im.yourcompany.com
192.168.1.2      im2.yourcompany.com  im2.yourcompany.com
這是添加服務器的ip和domain
而後在spark的服務器欄中寫入im.yourcompany或im2.yourcompany.com,用你在openldap中添加的用戶就能夠登陸了。node

相關文章
相關標籤/搜索