2013年8月17日星期六

NIS 故障一例谈问题解决思路

        之前自己准备 RHCE 的其中一个笔记,分享一下。

        NIS 遇到防火墙,出现如下错误:
                [root@client ~]# su - nis1
                do_ypcall: clnt_call: RPC: Unable to receive; errno = No route to host
                su: user nis1 does not exist
                [root@client ~]# showmount -e server.example.com
                do_ypcall: clnt_call: RPC: Unable to receive; errno = No route to host
                showmount: can't get address for server.example.com
                [root@client ~]# showmount -e 192.168.65.10
                mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive
                [root@client ~]# showmount -e 192.168.65.10
                Export list for 192.168.65.10:
                /home       192.168.65.0/24
                /media      192.168.65.0/24
                /home1/nis1 192.168.65.0/24
                [root@client ~]# showmount -e 192.168.65.10     
                rpc mount export: RPC: Unable to receive; errno = No route to host


       导致出错 No route to host 的原因是防火墙把端口给封了,由于 NIS 服务的端口是动态的,每次服务启动都不一样,如果不固定就无法在防火墙开启的时候保证服务了。在网上看到的做法都(如NFS的一些服务端口) 是在 /etc/sysconfig/network 下添加,所以添加:
               YPSERV_ARGS="-p 834" YPXFRD_ARGS="-p 835"

然后再在防火墙上开放端口:
                iptables -A INPUT -p ALL -s! 192.168.65.0/24  --dport 834 -j DROP                
                iptables -A INPUT -p ALL -s! 192.168.65.0/24  --dport 835 -j DROP


这样 NIS 每次都用 834 和 835,是没有问题的。

       无意中看到一个老外写的文章里另外一种做法:通过rpcinfo 命令获取当前NIS(或者是NFS)的一些端口信息,将这些端口过滤出来后,放到 iptables 里开启,放在 rc.local 中:
             for tcpp in `rpcinfo -p | grep "ypserv" | cut -d " " -f16`; do iptables -I INPUT -p tcp --dport $tcpp -j ACCEPT; done
             for udpp in `rpcinfo -p | grep "ypserv" | cut -d " " -f16`; do iptables -I INPUT -p udp --dport $udpp -j ACCEPT; done 

       这里不谈论哪种方法好,只是希望通过遇到的问题,分享一下解决问题的思路和方法,希望TX 们在遇到问题时候,也能灵活处理。

没有评论:

发表评论