在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中添加的用户就可以登录了。

ejabberd的多域名(domain)设置的更多相关文章

  1. 解决微信OAuth2.0网页授权回调域名只能设置一个的问题

    https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...

  2. 转载:解决微信OAuth2.0网页授权回调域名只能设置一个的问题

    项目地址:https://github.com/HADB/GetWeixinCode 说明:微信项目很多,但是回调域名有限,经常使用,做个笔记. 解决微信OAuth2.0网页授权只能设置一个回调域名的 ...

  3. 解析腾讯企业邮箱到自己域名,设置mail的cname

    之前注册了腾讯企业邮的免费邮箱,后来想把企业邮箱和域名绑定起来,发现了一些问题. 先来看正常的部分,假设你已经注册过了腾讯企业邮箱免费版,并且已经绑定好了域名. 然后在域名提供商那里设置域名解析的MX ...

  4. 解决微信授权回调页面域名只能设置一个的问题 [php]

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...

  5. 在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析

    ServerAlias:服务器别名,在Apache中可以用于设置虚拟主机接收到个域名,也可以用于接收泛解析的域名.具体的设置方法如下: 一.用于设置虚拟主机接收多个域名 一个虚拟主机常常会接收多个域名 ...

  6. CentOS6.5 服务器+apache5.3绑定多个域名+SELinux设置

    下面简单的介绍了如何通过设置Apache的http.conf文件,进行多个域名以及其相关的二级域名的绑定(假设我们要绑定的域名是minidx.com和ntt.cc,二级域名是blog.minidx.c ...

  7. 设置泛域名和设置IIS下面不同网站通过不同域名公用80端口的操作指引

    原文链接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?id=4be204ca-249b- ...

  8. HTML5 localStorage与document.domain设置问题

    localStorage的写入和读取,不能跨子域,否则在一些移动端浏览器上,会出现读取不到的情况. 最近开发一个移动端的播放记录功能,在pc端和android版的chrome测试很顺利通过了,但后来进 ...

  9. Linux:外网域名防火墙设置导致下载失败

    问题现象: 通过IE从服务器下载文件时,提示Can't read from connection: Connection reset by peer. 别的现场都是好的,只有该现场有这个问题.所以,一 ...

随机推荐

  1. main函数的正确格式

    main函数称之为主函数,一个C程序总是从main()函数开始执行的.在关于C语言的网贴和图书中,可以看到main函数的多种格式,这些格式,有的是正确的,有的是不正确的,为了避免错误,现归纳整理如下. ...

  2. web.xml常用元素

    web.xml文件是用来初始化配置信息:比如welcome页面.servlet.servlet-mapping.filter.listener.启动加载级别等.当你的web工程没用到这些时,你可以不用 ...

  3. wancms从apache迁移至nginx

    首先解决nginx1.2不支持pathinfo问题,见上一篇博文 其次是数据库的用户名变了之后,修改各种配置,wancms的,ucenter的,bbs的 还有一个是wacms的后台站点管理里面的uc配 ...

  4. Calendar GData API / Google Calendar Connectors deprecation

    http://googleappsupdates.blogspot.fr/2014/06/calendar-gdata-api-google-calendar.html

  5. js 获取 input file 文件 附给 image src

    var a=document.querySelector('input[type=file]'); a.onchange = function (e) { //var reader = new Fil ...

  6. 山东省第四届ACM大学生程序设计竞赛解题报告(部分)

    2013年"浪潮杯"山东省第四届ACM大学生程序设计竞赛排名:http://acm.upc.edu.cn/ranklist/ 一.第J题坑爹大水题,模拟一下就行了 J:Contes ...

  7. Form表单学习网站

    HTML表单 -- form标签 -- 与浏览者交互:http://www.dreamdu.com/xhtml/tag_form/

  8. Generating Huge reports in JasperReports

    There are certain things to care while implementing the Jasper Reports for huge dataset to handle th ...

  9. Qt xcode wrapper Qios OpenFly

    https://github.com/richardmg/QtWrapper https://github.com/richardmg/qios https://github.com/richardm ...

  10. GCC编译警告和错误

    1 error: expected expression before 'else' else之前无表达式. 2 error: lvalue required as left operand of a ...