C -17 阿尔莫拉大厦
新德里
110 049
印度
Lilytanmoy@id.eth.net
修订历史 | ||
---|---|---|
修订 1.0 | 2001年7月25日 | 修订者:坦莫伊·普拉萨德 |
最初由克里斯·斯内尔于 1996 年 6 月 23 日 17:55:14 MDT 起草 |
前言 & 免责声明
本文档之前无人维护。由于我也在类似领域工作,所以我决定维护本文档。最初由克里斯·斯内尔先生编写。任何想要参考旧版本文档的人都可以在寻呼机 FTP 站点://ftp.cs.unm.edu/pub/chris/paging 找到它
本文档的精神与克里斯·斯内尔所写的内容相同。我只对代码进行了细微修改,使其能够与最新的内核版本一起工作。我主要在 Redhat Linux 6.0,内核版本 2.2.5 和 Mandrake Linux 7.2 和内核版本 2.2.17 上进行了尝试。
如果您在尝试设置此项时炸毁了您的计算机/寻呼机/调制解调器或破坏了您的公司网络,请不要责怪我。很可能,您不会搞砸任何东西,但我应该警告您,sendmail 是一个棘手的东西,如果您遵循本文档,您肯定会与之打交道。
目的
这篇 mini-HOWTO 将描述如何在任何 Linux 机器上设置字母数字寻呼网关。您的网关将能够将来自万维网和互联网电子邮件系统的消息发送到您的字母数字寻呼机。这尤其方便,因为任何人都不需要特殊技能即可向您的寻呼机发送消息。他们所需要做的就是能够使用电子邮件或万维网。
**特别注意:**
本文档不涵盖寻呼网关的设置,这些网关旨在向非字母数字(即仅限数字)寻呼机或语音寻呼机发送消息。您需要从其他地方查找相关信息。
要求
一个或多个字母数字寻呼机(参见“关于字母数字寻呼机”部分)
一台运行 Linux 的机器
一个可工作的调制解调器(推荐手动配置!)
一条电话线
互联网连接(如果您希望使用 WWW 界面和全网电子邮件界面)
编译器工具(gcc、make 等以及一些基本的使用知识。)
sendmail 电子邮件处理程序(您可能已经有了)
- 一个可工作的 httpd(Web 服务器),如果您想创建一个 WWW 界面
关于字母数字寻呼机
字母数字寻呼机可以从大多数信誉良好的寻呼公司获得。您可以以非常合理的成本获得一个。现在,它通常与寻呼机订阅捆绑在一起。无论如何,成本因国家/地区而异,您可以咨询您的寻呼服务提供商。
以下是您在购买寻呼机时需要注意的一些事项
这是一个名牌(例如摩托罗拉或类似品牌)寻呼机吗?
**最重要** 这个寻呼机是否支持通过您的寻呼公司提供的拨号线路进行寻呼?(参见“拨号寻呼线路”部分)。
它的内存是否有足够的空间来存储您希望接收的页面?
这家公司信誉如何?(参见“拨号寻呼线路”部分)
我不为任何寻呼机制造商工作。我同意克里斯的建议,推荐摩托罗拉系列的寻呼机。正如克里斯·斯内尔所说,“我自己就有一个,并且可以证明它们的可靠性和耐用性。事实上,我的寻呼机曾多次掉到水泥地上,但外壳甚至都没有碎裂。”您可以在摩托罗拉的网站上找到这一系列的寻呼机:URL="http://www.mot.com/MIMS/MSPG/Products/Alpha/""
我使用过寻呼公司随订阅提供的寻呼机。我知道它不是摩托罗拉的,但在过去一年里我不得不更换一次。因此,请确保您购买的寻呼机的品牌和质量。
拨号寻呼线路
为了使您的网关工作,我们需要一种方法将消息传递给您的寻呼公司,该公司会对消息进行编码并通过无线方式将其传输到您的寻呼机。这是通过与您的寻呼公司建立拨号(调制解调器)连接来完成的。没有此连接,您将无法设置寻呼网关。因此,您的寻呼公司拥有这样的拨号线路非常重要。不幸的是,许多寻呼公司要么没有这样的拨号线路,要么不知道他们拥有的线路。在向寻呼公司询问这条线路时,我发现询问他们是否可以提供“用于发送字母数字寻呼的计算机软件”很有帮助。如果他们提供这样的软件,您可以肯定他们提供了使用该软件所必需的拨号线路。
关于拨号线路的细节
拨号线路只是远程计算机(或可能是某种专用盒子)上的一个调制解调器。调制解调器通常以 33.6/56.6 KBPS 的速度连接,但在寻呼公司的调制解调器拨号线路的情况下,它以 300-1200bps 的速度工作。有些可能使用 v.22b 提供高达 2400bps 速度的连接。一旦建立连接,您的计算机就会使用称为 TAP(以前称为 IXO)的协议将寻呼发送到寻呼中心。寻呼中心最终将消息发送到寻呼机。对于运行寻呼网关,您不需要了解此协议的详细信息,但如果您有兴趣,请查看以下 ftp 站点上的文档:ftp 站点:URL="ftp://ftp.cs.unm.edu/pub/chris/paging/ixo.txt"
您的网关将如何工作
在我们继续之前,我将简要解释一下电子邮件->寻呼机网关的工作原理。WWW 网关类似,稍后将进行解释。
有人通过电子邮件将旨在发送到您的寻呼机的消息发送到您 Linux 机器上的一个特殊地址。
您的机器使用 sendmail 接受消息并将其路由到一个过滤器程序,该程序会剥离消息的标头并解析出重要信息,例如发件人的姓名和电子邮件地址以及消息的主题。此过滤器还会剥离消息中的任何 .signature 行,以避免不重要的信息堵塞您的寻呼机。
寻呼过滤器将消息传递给“sendpage”寻呼软件,该软件将其排队等待发送。
然后 Sendpage 拨打您的寻呼公司的拨号线路,并(使用 TAP)将消息发送到寻呼中心。
您的寻呼公司的寻呼中心然后通过无线电波将消息发送到您的寻呼机。
开始设置
寻呼机网关的设置包括四个部分
设置 sendpage
(可选)为您的寻呼网关添加一个特殊的 DNS 条目
设置 Linux 以处理多个 IP 地址
设置 sendmail 以处理消息路由
设置万维网界面
获取软件
设置此产品所需的每件软件都可以从站点 ftp://ftp.cs.unm.edu/pub/chris/paging 获取。我将尝试将这些文件保存在其他备用站点。在不久的将来,我将尝试将其打包为 RPM,以便于安装。本文档的下一个版本可能会看到这种变化。
SENDPAGE 设置
Sendpage 是您的寻呼网关最重要的组件。要在此项目中取得任何进展,您需要获取此软件并在您的机器上编译它。Sendpage 软件可以通过 ftp://ftp.net.ohio-state.edu/pub/pagers/sendpage7a.tar.Z 或以下机器获取:ftp://ftp.cs.unm.edu/pub/chris/paging/sendpage/sendpage7a.tar.Z。
在您的机器上创建一个名为“paging”的子目录。获取此软件并使用命令“tar zxvf”在创建的 paging 子目录中解压缩它。
此时,我强烈建议您阅读 sendpage 包中的所有配置信息以及 README 和 INSTALL 文件。但是,忽略所有关于 sendmail 设置的讨论,而是依赖本文档中提供的步骤。按照 INSTALL 文件中的说明编译 sendpage。
以下是关于 sendpage.h 文件中设置的一些注意事项,您需要编辑这些设置
确保您已注释掉“#define ARSYSTEM_NOTIFIER”行(使用“/*”和“*/”),除非您拥有商业 Remedy 系统监视器软件包。
在 ARSYSTEM_NOTIFIER 行之后,有一些 Linux (POSIX) 特定的行需要定义
#define POSIX_SIGNALS
#define POSIX_OPEN
对于调制解调器定义,我建议使用:#define MODEM_DEV "/dev/modem" 或 "/dev/cua0" [com 1] 或 "/dev/cua1" [com 2]。在新的内核版本中,最好使用 "/dev/ttyS0" 或 /dev/ttyS1" 等... 如果您有新版本,请使用后者,否则使用前者。
对于调制解调器初始化,我使用简单的字符串并依赖 NVRAM 设置:#define MODEM_INIT ATEVXH。
我使用 RTS/CTS 流量控制:#define C_FLAG CTRSCTS|HUPCL。
和 DTR 切换 #define TOGGLE_DTR
*** 如果您有兴趣,我的 sendpage.cf 可以在以下 ftp 站点完整获取:ftp://ftp.cs.unm.edu/pub/chris/paging/sendpage/sendpage.h.example".
如果您的 Linux 内核版本是 2.2.x,请在以下文件中进行以下更改
client.c
config.c
deamon.c
deliver.c
sendpage.c
verify.c
配置您的调制解调器
我使用 D-Link DFM-560 E,它似乎可以很好地与 sendpage 一起工作。使用其他调制解调器,您的里程可能会有所不同(可能更好)。虽然您的寻呼公司的调制解调器(sendpage 称为“寻呼中心”)可能与我的非常不同,但您可能需要尝试此设置以查看它是否有效。您应该手头备有调制解调器手册,以作为正确初始化字符串的参考。以下是我设置的内容
调制解调器设置为 v.22bis 2400/1200 协议(*不* 自动协商)
串口设置为 1200bps
您的初始化字符串sendpage.h应该处理:- 数字(非文本)响应 [这些是必须的!],即
0 代表 “OK”
5 代表 “CONNECT 1200”
7 代表 “BUSY”
为了使 sendpage 工作,它必须能够访问调制解调器。这需要对调制解调器设备具有读/写权限。在我的系统中,sendpage 以 set-uid 运行,用户名为“sendpage”。在我的 /etc/group 文件中,我有一个名为“modem”的组,用户“sendpage”是该组的成员。我的调制解调器的设备文件 (/dev/ttyS1) 归用户“root”和组“modem”所有。所有者和组都可读写它 (chown root.modem /dev/cua1 ; chmod ug+w /dev/cua1)。
SENDPAGE MAKEFILE 设置
以下是我为 Linux 使用的构建选项
CC = gcc
CFLAGS = -DLINUX -O2 -m486 -I/usr/include
LIBS = -ldb -lbsd
*** 如果您有兴趣,Makefile 可以在以下 ftp 站点完整获取:ftp://ftp.cs.unm.edu/pub/chris/paging/sendpage/Makefile.example".
继续设置
希望您能够在第一次尝试时正确编译 sendpage。现在您必须设置 sendpage 以进行初始测试。按照 INSTALL 文件的说明,您将设置队列目录并开始设置 sendpage.cf 文件(我的文件保存在 /etc 中)。
关于设置 /etc/sendpage.cf 的一些注意事项
我必须注释掉(使用“#”)“both”的整个 trMap 部分,只留下“std”的 trMap 部分,才能使 sendpage 工作。
我的“全局选项”部分看起来像
global maxMsgSize=480 maxMsgSplit=5 syslogFacility=LOG_MAIL\
timeFormat=dayFirst replyToSender=no\
emailFrom="sendpage@e-expertsoft.com (UNM Pager Gateway)"
我的“寻呼中心定义”部分看起来像
pc name=RPGPaging phone=9632567892 speed=1200 parity=even\
databits=7 stopbits=1 protocol=pet-pg1 msgretries=10\
answertime=25 modemdial=atdt dialer=internal\
modeminit=atevxh modemdev=/dev/ttyS1trMap=std\
emailFrom="sendpage@e-expertsoft.com (UNM Pager Gateway)"
这是我的“别名”部分。“tanmoyauto”定义在发送寻呼时不会发送电子邮件回复,并且用于每小时发送到我的寻呼机的系统统计信息。
alias tanmoy 9632137604.RPGPaging trMap=std
alias tanmoyauto 9632137604.RPGPaging emailReply=no msgIncTime=yes trMap=std
alias expert 9632137690.RPGPaging trMap=std
最后,是“配置文件”部分
profile default emailReplyErr=yes emailReply=yes msgIncSender=yes\ msgIncDate=yes msgIncTime=yes
profile numeric emailReplyErr=yes emailReply=yes msgIncSender=no\ msgIncDate=no msgIncTime=no
set profile=default.
*** 如果您有兴趣,sendpage.cf 可以在以下 ftp 站点完整获取:ftp://ftp.cs.unm.edu/pub/chris/paging/sendpage/sendpage.cf.example".
继续前进...
此时,我假设您已经能够至少使用 sendpage 的命令行界面向您的寻呼机发送寻呼。如果您未能做到这一点,请重新阅读 INSTALL 文件并重新检查您的sendpage.h和sendpage.cf。如果所有其他方法都失败了,请给我发邮件。
设置特殊主机名
如果您想为您的寻呼网关设置一个特殊的虚拟主机名(例如 pager.yourcompany.com),您需要遵循几个步骤。如果您不想(或不能)设置额外的虚拟主机名,请跳到标题为 “设置 /etc/aliases” 的部分。
如果您只需要邮件->寻呼机网关 [没有 www],则无需设置单独的 IP 地址(如下所述)。如果这是您所需要的全部,请按照以下位置的说明进行操作:ftp://ftp.cs.unm.edu/pub/chris/paging/Sendmail-and-virtual-domains.txt 以便为您的寻呼主机名设置 MX 条目。完成此操作后,跳到 “设置 SENDMAIL” 部分。
设置新主机名时,您需要做的第一件事是要求您的网络管理员将新的 IP 地址和主机名添加到 DNS 表中。我建议使用主机名“pager”,但这实际上并不重要。现在您有了新的地址和关联的 IP 号码,您需要将其添加到您的机器中。这将通过两种方式之一完成,具体取决于您的 Linux 发行版的类型。
如果您使用 Linux 内核 1.2.xx 系列。从 ftp://ftp.cs.unm.edu/pub/chris/paging/ip_alias 获取 IP 别名补丁,并按照文件中的说明进行操作README.alias,用您新分配的 IP 地址和网关地址替换此README 文件.
* 如果您使用的是 Linux 内核 2.0.xx 及更高版本,请为您的内核启用以下选项并重新编译:网络别名 IP:别名支持。在您的启动脚本中(Slackware 用户为 /etc/rc.d/rc.inet1,RedHat 用户为 /etc/sysconfig/network-scripts/ifup-eth)添加以下行
ifconfig eth0:0 191.59.16.224
route add -host 191.59.16.224 dev eth0:0
将 191.59.16.224 替换为您的新 IP 地址
设置 SENDMAIL
我们需要创建一些别名,以便 sendmail 可以区分发送到 you@somemachine.dink.com 和 you@pager.dink.com 的消息,当“somemachine”和“pager”实际上是同一台机器时。为此,我们需要设置 sendmail 别名数据库。以下信息基于我从 Sendmail Link 获取的信息。
*** 创建一个文件 /etc/domainalias,其中包含从寻呼机主机名到“真实”主机名的转换。在我的机器 (mahavir) 上,我的转换文件如下所示<tanmoy@pager.com> <esc-pager@mahavir.esc>.<intest@pager.com> <guest-pager@mahavir.esc.in>。该文件就是这样。我们快完成了。我希望您有一个 sendmail 二进制文件,它是使用以下开关编译的:-DNDBM -DNEWDB。这些开关用于启用读取我们即将创建的 domainalias.db 文件所需的数据库处理代码。
确保您拥有 makemap 实用程序(sendmail 发行版的一部分)。如果您还没有,请像这样编译它:(这可能不是必需的,请检查是否支持 hash、dbm 或 btree,检查下一步如何执行此操作。)
# cd /usr/src/sendmail-8.7.x/makemap
# rm Makefile makemap
# make CFLAGS='-m486 -O2 -I../src -DNDBM -DNEWDB' LDFLAGS='-s
-lgdbm -ldb' makemap
# cp makemap /usr/bin
在您的/etc/sendmail.cf中添加一行,使 sendmail 接受新虚拟主机名的邮件:Cw pager.yourdomain.com 将 /etc/domainaliases 编译为数据库格式:makemap btreedomainaliases.db< domainalisaes
在您的/etc/sendmail.cf中添加另一行,告诉 sendmail 关于domainaliases.db我们刚刚编译的转换文件。Kdomainaliases btree/etc/domainaliases.db。现在对于规则集,请确保您将其完全键入到/etc/sendmail.cf..
中。条目由 TAB 字段分隔,而不是空格!!!!这些条目要插入到 S98 规则集中。
PRE 8.7.1 R$+ < @ $+ . > $: $1 < @ $2 > . R$+ < @ $+ . > $* $: (domainaliases $1@$2 $: $1 < @ $2 > $3 $) R$+ < @ $+ . > $* $: (domainaliases $2 $: $1 < @ $2 > $3 $) R$+ < @ $+ > . $: $1 < @ $2 . >
POST 8.7.1 R$+< $+. > $1< $2 > R$+< $+ > $: < > $(domainaliases $1$2 $) R< > $+ @ $* $: < $1 > $(domainaliases * @ $2 $) R< $+ > * $* $: < > $1 $2 R< > $* $: $>3 $1
现在您必须终止您的 sendmail 守护进程并重新启动它,以使新配置生效。
/sbin/killall sendmail
sendmail -bd -q15m
最后,测试您的新配置以确保您操作正确,检查 /var/log/maillog 中是否有任何可能的错误消息。
sevak~> sendmail -bt
地址测试模式(规则集 3 未自动调用)
输入 <规则集> <地址> >0 tanmoy@PAGER.com
rewrite: ruleset 0 input: tanmoy @ pager . com
rewrite: ruleset 98 input: tanmoy @ pager . com
rewrite: ruleset 98 returns: tanmoy @ pager . com
rewrite: ruleset 97 input: tanmoy @ pager . com
rewrite: ruleset 3 input: tanmoy @ pager . com
rewrite: ruleset 96 input: tanmoy < @ pager . com>
rewrite: ruleset 96 returns: tanmoy < @ pager . com. >
rewrite: ruleset 3 returns: tanmoy < @ pager . com. >
rewrite: ruleset 0 input: tanmoy < @ pager . com. >
rewrite: ruleset 98 input: tanmoy < @ pager . com. >
rewrite: ruleset 3 input: esc-pager @ sevak . esc . in
rewrite: ruleset 96 input: esc-pager < @ sevak .esc . in >
rewrite: ruleset 96 returns: esc-pager < @ sevak . esc . in . >
rewrite: ruleset 3 returns: esc-pager < @ sevak . esc. in . >
rewrite: ruleset 98 returns: esc-pager < @ sevak . esc .in . >
rewrite: ruleset 0 returns: $# local $: @ esc-pager
rewrite: ruleset 97 returns: $# local $: @ esc-pager
rewrite: ruleset 0 returns: $# local $: @ esc-pager
*** 如果这不起作用或者您只是不理解,请咨询您当地的 sendmail 专家。
设置 /etc/aliases
现在您需要设置您的 /etc/aliases 文件,以处理将电子邮件消息管道传输到将消息发送到 sendpage 的过滤器。在前一节中,我演示了如何使 tanmoy@pager.com 指向 pager@mahavir.esc.in。为了使其工作,我必须在我的 /etc/aliases 文件中添加一行,以将所有邮件发送到过滤器 esc-pager。该行是:esc-pager: "|/usr/local/bin/sendpagefilter tanmoy"^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^这是您创建的 这是寻呼过滤器的完整路径。 这是您在您在 sendpage.cf 中定义的别名。 (见下文) 用户名
本示例中使用的过滤器可以从 ftp://ftp.cs.unm.edu/pub/chris/paging/paging_filter.tar.gz 获取。阅读包含的 README 文件中的说明,编译过滤器,并将其放置在 /usr/local/bin 等目录中。您现在必须运行“newaliases”命令,以使 sendmail 重新读取 /etc/aliases 以使当前配置生效。完成此操作后,您的寻呼网关应该可以工作了。首先尝试将邮件发送到您在 /etc/aliases 中创建的别名(在我的示例中为 esc-pager)。如果这有效,请尝试将邮件发送到您在上一节中创建的虚拟邮件别名(在我的示例中为 tanmoy@pager.com)。如果这有效,您就完成了!!!
WWW 网关
我在这里不会写太多。我假设您具有一些 HTML 技能,并且以前使用过 CGI 脚本。您的网关将使用 CGI 脚本在 Web 浏览器和 sendpage 程序之间进行通信。示例脚本和 HTML 页面可在以下位置找到:URL="ftp://ftp.cs.unm.edu/pub/chris/paging/example_www_gateway.tar.gz"。
此脚本利用了两个额外的程序,uncgi(用于将 CGI 数据转换为 shell 环境变量,以便于 CGI 编程)和 d2utxt(用于剥离页面消息中的 ^M 字符,这些字符会导致 sendpage 阻塞)。这些实用程序在 ftp 站点上找到示例 HTML 的同一目录中提供。阅读随附的说明以编译它们。这应该很容易。
如果您使用的是 Apache Web 服务器,请访问 URL=" https://apache.ac.cn" 或参考 WWW-HOWTO 以获取有关设置 Web 服务器的更多信息。在 CGI 脚本中,即在 send_a_page 文件中,对您的寻呼中心的调制解调器号码和您的寻呼机号码进行适当的更改。
获取更多帮助
您可以给我发邮件至<Lilytanmoy@id.eth.net>。虽然我是一名忙碌的员工,但您仍然可以寻求帮助。我希望我能够解决您的问题。但我仍然不能保证解决您的问题。
坦莫伊·普拉萨德 <Lilytanmoy@id.eth.net>
专家软件顾问有限公司
C -17 阿尔莫拉大厦
新德里
110 049
印度