LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3627|回复: 14

sendmail -d0 < /dev/null host显示配置问题

[复制链接]
发表于 2005-3-30 10:44:19 | 显示全部楼层 |阅读模式
sendmail的调试中有一段如下:
sendmail -d0 < /dev/null
调试
如果返回你的主机名为localhost,你可能错误配置了/etc/hosts文件。

我试了一下返回的正是localhost
(short domain name) $w = localhost
(canonial domain name) $j = localhost.localdomain
(subdomain name) $m = localdomain
(node name ) $k = vlin1

我的/etc/hosts文件如下
127.0.0.1    vlin1     localhost.localdomain    localhost

请问我该如何配置/etc/hosts文件?为什么?
 楼主| 发表于 2005-3-30 11:14:31 | 显示全部楼层
网络配置文件快速解读
时间:2003-10-6 11:12:41


来源:LinuxAid.com.cn 作者:5dmail 票数:380等级:点击:1258

在Linux系统中,TCP/IP网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作。系统中重要的有关网络配置文件为:

◆ /etc/sysconfig/network
◆ /etc/HOSTNAME
◆ /etc/hosts
◆ /etc/services
◆ /etc/host.conf
◆ /etc/nsswitch.conf
◆ /etc/resolv.conf
◆ /etc/rc.d/init.d/network

    接下来我们将对这些文件逐一讲述,这些文件都可以在系统运行时进行修改,不用启动或者停止任何守护程序,更改会立刻生效(除了/etc/sysconfig/network)。另外,这些文件都支持由"#"开头的注释,每一个文件都有在UNIX手册页中的第5部分中有一项,可以用man命令来获取它们。
   
◆ /etc/sysconfig/network 网络设置
    该文件用来指定服务器上的网络配置信息,包含了控制和网络有关的文件和守护程序的行为的参数。下面是一个例子文件:

NETWORKING=yes
HOSTNAME=machine1
GATEWAY=210.34.6.2
FORWARD_IPV4=yes
GATEWAYDEV=

    其中,NETWORK=yes/no 表示网络是否被配置;
    HOSTNAME=hostname hostname 表示服务器的主机名;
    GATEWAY=gw-ip gw-ip 表示网络网关的IP地址;
    FORWARD_IPV4=yes/no 是否开启IP转发功能;
    GAREWAYDEV=gw-dev gw-dw 表示网关的设备名,如:eth0等;
    为了和老的一些软件相兼容,"/etc/HOSTNAME"文件应该用和HOSTNAME=hostname相同的主机名。

◆ /etc/HOSTNAME 主机名

    该文件包含了系统的主机名称,包括完全的域名,如:

    192.168.0.1 machine1.domain machine1

    这个文件是在启动时从文件/etc/sysconfig/network中的HOSTNAME行中得到的,用于在启动时设置系统的主机名。

◆ /etc/hosts IP地址和主机名的映射

    /etc/hosts中包含了IP地址和主机名之间的映射,还包括主机名的别名,IP地址的设计使计算机容易识别,但对于人却很难记住它们,为了解决这个问题,创建了/etc/hosts这个文件。下面是一个例子文件:

    127.0.0.1 machine1 localhost.localdomain localhost
    192.168.1.100 machine7
    192.168.1.101 otherpc otheralias

    在这个例子中,本机名是machine1,otherpc还有别名otheralias,它可以指向otheralias。。一旦配置完机器的网络配置文件,应该重新启动网络以使修改生效,使用下面的命令来重新启动网络:

    /etc/rc.d/init.d/network restart

    /etc/hosts文件通常含有主机名、localhost和系统管理员经常使用的系统别名,有时候telnet到Linux机器要等待很长时间,可以通过在"/etc/hosts"加入客户的机器的IP地址和主机名的匹配项,就可以减少登录等待时间。在没有域名服务器情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的IP地址,否则,其他的主机名通常使用DNS来解决,DNS客户部分的配置在文件/etc/resolv.conf中。

◆ /etc/services

    /etc/services中包含了服务名和端口号之间的映射,不少的系统程序要使用这个文件,下面是RedHat 安装时缺省的/etc/services中的前几行:

tcpmux 1/tcp # TCP port service multiplexer
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
systat 11/tcp users

    最左边一列是主机服务名,中间一列是端口号,”/“ 后面是端口类型,可以是TCP也可以是UDP。任何后面的列都是前面服务的别名。在这个文件中也存在着别名,它们出现在端口号后面,在上述例子中sink和null 都是discard服务的别名。

◆ /etc/host.conf 配置名字解析器

    有两个文件声明系统到哪里寻找名字信息来配置UNIX名字解析器的库。文件/etc/host.conf由版本5的libc库所使用,而/etc/nsswitch.conf由版本6使用(glibc )。问题在于一些程序使用其中一个,而一些使用另一个,所以将两个文件都配置正确是必要的。

    /etc/host.conf文件指定如何解析主机名,Linux通过解析器库来获得主机名对应的IP地址。下面是RedHat安装后缺省的"/etc/host.conf"内容:

order hosts,bind
multi on

    ※"order " 指定主机名查询顺序,其参数为用逗号隔开的查找方法,支持的查找方法为bind、hosts和nis,分别代表DNS、/etc/hosts和NIS,这里规定先查询"/etc/hosts"文件然后再使用DNS来解析域名。
    ※"trim" 表明当通过DNS进行地址到主机名的转换时,域名将从主机名中被裁剪掉,trim可以被多个域包含多次,对/etc/hosts和NIS查询方法不起作用,注意在/etc/hosts和NIS表中主机名是被适当地(有或没有全域名)列出的。
    ※"multi" 指定是否"/etc/hosts"文件中指定的主机可以有多个地址,值为on表示允许,拥有多个IP地址的主机一般称为具有多个网络界面。
    ※"nospoof " 指是否允许对该服务器进行IP地址欺骗,值为on表示不允许,IP欺骗是一种攻击系统安全的手段,通过把IP地址伪装成别的计算机,来取得其它计算机的信任。
    ※"alert" 当nospoof指令为on时,alert控制欺骗的企图是否用syslog工具进行记录,值为on表示使用,缺省值为off。
    ※"rccorder" 如果被设置为on,所有的查询将被重新排序,所以在同一子网中的主机将首选被返回,缺省值为off。

◆ /etc/nsswitch.conf 配置名字解析器

    /etc/nsswitch.conf文件是由S u n公司开发并用于管理系统中多个配置文件查找的顺序,它比/etc/host.conf文件提供了更多的功能。/etc/nsswitch.conf中的每一行或者是注释(以#号开头)或者是一个关键字后跟冒号和一系列要试用的有顺序的方法。每一个关键字是在/etc/目录可以被/etc/nsswitch.conf控制的/etc文件的名字。下面是可以被包含的关键字:

※aliases 邮件别名;
※passwd 系统用户;
※group 用户组;
※shadow 隐蔽口令;
※hosts 主机名和I P地址;
※networks 网络名和号;
※protocols 网络协议;
※services 端口号和服务名称;
※ethers 以太网号;
※rpc 远程进程调用的名称和号
※netgroup 网内组

    下面也是可以包含的关键字:

    ※files 除了netgroup,对其他关键字都有效。在相应的/etc文件中寻找记录
    ※db 除了netgroup,对其他关键字都有效。在相应的/var/db数据库中寻找记录。对长文件很有效,如passwd文件已经 超过500项。要从标准/etc文件中产生这些文件,应改变目录到/var/db并运行run命令
    ※compat 兼容性模式,对passwd、group和shadow文件有效。在本模式中,将先在对应的/etc文件中查找。如果想进行NIS查找,需要第一个值(用户名或组名)为加号( + ),后面跟对应数量的冒号( : ) ( /etc/passwd为6个, /etc/group为3个, /etc/shadow为8个)。如在/etc/passwd文件中,下面一行应被包含在文件尾: + : * : : : : :
    ※dns 只对hosts有意义。像在/etc/resolvconf配置的,在DNS中进行查找
    ※nis 对所有的关键字都有意义。如NIS是可以用的,在NIS服务器中查找
    ※[ STATUS = action ] 控制名字服务的行为。STATUS是SUCCESS(操作被成功执行)、NOTFOUND (记录没找到)、UNAVAIL (所选择的服务不可用)和TRYAGAIN (服务暂时不可用,请重试)中的一个。action是return (终止查找并返回当前状态)或continue (继续这一行的其他项)中的一个。如hosts: dns nis [NOTFOUND=return] files将会首先在DNS中,然后在NIS中查找主机名。只有当前两项都不可用时才使用文件/etc/hosts

◆ /etc/resolv.conf 配置DNS客户

    文件/etc/resolv.conf配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。下面是一个例子文件:

search mydom.edu.cn
nameserver 210.34.0.14
nameserver 210.34.0.2

合法的参数及其意义如下:
    ※nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个I P地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver.
    ※domain 声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,删除所有在第一个点( . )前面的内容。
    ※search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。
    ※sortlist 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。Red Hat中没有提供缺省的/ e t c / r e s o l v. c o n f文件,它的内容是根据在安装时给出的选项动态创建的。
   
◆ /etc/init.d/network 主机地址、子网掩码和网关

    不像很多其他的UNIX和Linux操作系统, Red Hat当前并不能自动地通过/etc/hostname和/etc/hosts文件来配置网络。为了改变主机缺省的IP地址,必须直接编辑/etc/init.d/network脚本使其反映正确的网络配置。这个文件包括了声明IP地址、掩码、网络、广播地址和缺省路由器的变量。下面是这个文件中相应的部分:

IPADDR=192.168.1.100
NETMASK=255.255.255.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
回复 支持 反对

使用道具 举报

发表于 2005-3-30 11:17:39 | 显示全部楼层
你可以去修改/etc/hosts
127.0.0.1   yourhostname  yourhostname.yourdomain
但是yourhostname和yourdomain需要可以反解析到否则一样报错!
简单的方法是直接用hostname程序即时修改hostname
#hostname kevin
更多的信息请查看sendmail 的HOWTO!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-30 12:53:51 | 显示全部楼层
谢谢!kevin
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-30 13:01:01 | 显示全部楼层
kevin
我看了一下/etc/hosts 文件的一些说明,在没有DNS的情况下,机器通过hosts文件来找到相邻的计算机。在没有DNS的local network中,直接修改hosts文件是否可以使sendmail可用。
回复 支持 反对

使用道具 举报

发表于 2005-3-30 13:24:04 | 显示全部楼层
当然可以!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-3-30 15:12:49 | 显示全部楼层
我试过了,修改/etc/sysconfig/network 下的HOSTNAME,和/etc/hosts如下
127.0.0.1 vlin1  vlin1.vlin vlin1
192.168.0.1  vlin1 vlin1.vlin vlin1
192.168.0.2  vlin2 vlin2.vlin vlin2

然后自己给自己发mail 成功!
echo "hello vlin1 from vlin1" | mail -v -s hi root@vlin1

通过mail 可以看到这封信
回复 支持 反对

使用道具 举报

发表于 2005-3-31 17:04:42 | 显示全部楼层
Post by northwindrocker
kevin
我看了一下/etc/hosts 文件的一些说明,在没有DNS的情况下,机器通过hosts文件来找到相邻的计算机。在没有DNS的local network中,直接修改hosts文件是否可以使sendmail可用。



这句话是什么意思,是不是说不需要DNS也可以配置sendmail?
如果是,那么如何配置?
难道只需要修改/etc/hosts文件?如果是,那么如何修改?
谢谢帮助。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-2 10:52:24 | 显示全部楼层
Post by kevinlinux
这句话是什么意思,是不是说不需要DNS也可以配置sendmail?
如果是,那么如何配置?
难道只需要修改/etc/hosts文件?如果是,那么如何修改?
谢谢帮助。


是这样的!我是在作书上的sendmail实验,而书上的实验中sendmail的应用并未提到DNS,当然在实际的应用中必须用DNS的MX记录来解析mail 服务。但书上的实验中的讲解中的意思是通过/etc/hosts来实现简单的机器查找。而书上也确实是这样作的。所以我才有这么一问。有什么不对的地方请多指教!
回复 支持 反对

使用道具 举报

发表于 2005-4-2 11:42:46 | 显示全部楼层
好象sendmail一般是一定会找DNS的。当然你可以让它不找DNS。参见:http://www.sendmail.org/faq/section3.html#3.22

一般情况下sendmail会乎略/etc/host。而去找DNS。也就是说,就算你在/etc/hosts里定义了hostname,你甚至可以ping到这个hostname,但sendmail却无法向hostname发信。因为,sendmail会走nslookup这条路。

你定义的hsotname必须能dig到,能nslookup到,才能sendmail。
例如:

  1. [johnny@host ~]$ /usr/sbin/sendmail -d0 < /dev/null
  2. Version 8.13.1
  3. Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
  4.                 MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
  5.                 NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF STARTTLS TCPWRAPPERS
  6.                 USERDB USE_LDAP_INIT

  7. ============ SYSTEM IDENTITY (after readcf) ============
  8.       (short domain name) $w = host
  9.   (canonical domain name) $j = host.comanche.com
  10.          (subdomain name) $m = comanche.com
  11.               (node name) $k = host.comanche.com
  12. ========================================================

  13. Recipient names must be specified
  14. [johnny@host ~]$ dig comanche.com any

  15. ; <<>> DiG 9.2.5 <<>> comanche.com any
  16. ;; global options:  printcmd
  17. ;; Got answer:
  18. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30703
  19. ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

  20. ;; QUESTION SECTION:
  21. ;comanche.com.                  IN      ANY

  22. ;; ANSWER SECTION:
  23. comanche.com.           86400   IN      SOA     localhost.comanche.com. host.comanche.com. 42 10800 900 604800 86400
  24. comanche.com.           86400   IN      NS      localhost.comanche.com.
  25. comanche.com.           86400   IN      MX      10 mail.comanche.com.

  26. ;; ADDITIONAL SECTION:
  27. mail.comanche.com.      86400   IN      A       192.168.88.88

  28. ;; Query time: 1 msec
  29. ;; SERVER: 127.0.0.1#53(127.0.0.1)
  30. ;; WHEN: Sat Apr  2 11:34:51 2005
  31. ;; MSG SIZE  rcvd: 132

  32. [johnny@host ~]$ nslookup mail.comanche.com
  33. Server:         127.0.0.1
  34. Address:        127.0.0.1#53

  35. Name:   mail.comanche.com
  36. Address: 192.168.88.88
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表