家里使用一台上网机,作为文件服务器。主板坏了,重新安装一下,做一些笔记,方便下一次处理。

需求:

PPPOE,绑定动态域名,(可以远程登陆);

作为网关,提供dhcp服务

 

1.动态域名用了三个,都有Linux版本,

http://www.dnsexit.com/ (国外的,中文版叫7维互联,http://www.7wei.com ),下载:http://www.dnsexit.com/Direct.sv?cmd=ipClients 

http://www.dnsdynamic.org 国外的,支持Linux,下载:http://sourceforge.net/projects/ddclient/ (这个网站调用Google验证码,这个需要FQ。该网站注册账号需要FQ,而且发送邀请码信件非常慢

花生壳:http://www.oray.com/ 下载:http://hsk.oray.com/download/

驰卓科技:http://www.tridro.com/  下载:http://www.tridro.com/downloads

 

 

动态域名启动有一个Bug,因为启动的顺序在network (10)之后,在ftp/httpd/mail等服务之前,这需要修改动态域名的在/etc/init.d/中的启动文件顺序,

DNSExit:ipUpdate,/etc/init.d/ipUpdate

# chkconfig: 345 30 30
# description: DnsExit.Com dynamic dns client.
# processname: ipUpdate.pl

 

     第一行,# chkconfig: 345 30 30 ,把后面第二个数字,改成 大于 network 而小鱼http/ftp/mail 的数字,这个在network中,该项是10,在http/ftp/mail 中在50-70不等,这个选30。

 

    dnsdynamic:下载文件后,按照解压缩的,拷入对应的目录,包括 /bin 配置文件,启动文件。

      1.并修改启动顺序(如上)。

      2.配置文件按照 http://www.dnsdynamic.org/api.php 里面的范例修改。

      3.需要建立 /var/cache/ddclient 目录,否则无法启动。

      4.修改 server=www.dnsdynamic.org 

 

 

花生壳:花生壳的3.0版本,下载rpm包后,没有设置文件,无法配置信息。只好使用经典版2.0系列。经典版没有自启动服务,结合驰卓tridro,我写个一个自启动服务,保存在/etc/init.d/phddns 

花生壳主文件phddns 保存在/usr/bin ;配置文件phlinux.conf 保存于/etc ;

 

驰卓tridro 保存于/usr/local/tridro/ 目录中,

启动文件 /etc/init.d/phddns 如下:

#!/bin/bash
#
# chkconfig: 2345 30 30
# description:  will be start phddns with system reboot
#
# processname: phddns
#
# source function library
. /etc/rc.d/init.d/functions

PHDDNS=/usr/bin/phddns
TRIDRO=/usr/local/tridro/ddnsclient

RETVAL=0
start()
{
        echo -e $"Starting phddns : "
        $PHDDNS -d >/dev/null 2>&1 &
#       daemon $PHDDNS -d >/dev/null 2>&1

        cd /usr/local/tridro
        $TRIDRO > /var/log/tridro.log &
}

stop()
{
        echo -e $"Stop phddns : "
        killproc $PHDDNS
        killproc $TRIDRO
}

case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        *)
                echo $"Usage: $0 {start|stop}"
                RETVAL=1
esac
exit $RETVAL

 

最后,修改/etc/sysconfig/network-scripts/ifcfg-ppp0 , 配置 ONBOOT=yes ,确保pppoe拨号自启动;

chkconfig phddns on

chkconfig ipUpdate on

确保动态域名自启动。

 

由于政策和技术的原因,动态域名经常有问题。绑定中外三个,出现无法访问的概率就低很多了,三者中,还是最后的驰卓科技:http://www.tridro.com/ 最稳定迅速。

 

 

2.DHCPD 

dhcpd 是为了能绑定内网IP,做一些策略调整。

修改一下dhcpd 文件,我的内网是 eth1 

/etc/init.d/dhcpd  四处修改:

1.Start函数部分,增加内网eth1

daemon --pidfile=$pidfile $exec $DHCPDARGS eth1 2>/dev/null

 

2. dhcpd.lease保存到内存中。因为以前发生过2次,用了几个月的硬盘,在读取/var/lib/dhcpd.leases 的时候,硬盘报错作废。内网的手机会不停地刷dhcp服务,所以,这个文件读写频次很高。其实这个文件根本没啥用,保存在内存里就行。在 $statedir/dhcpd.leases 前面增加

#以下的if 代码为新增代码
if ! mount | grep $statedir > /dev/null ;then
   mkdir /dev/shm/dhcpd
   chmod  1777  /dev/shm/dhcpd
   mount --bind  /dev/shm/dhcpd /var/lib/dhcpd
fi

if [ ! -f $statedir/dhcpd.leases ] ; then

 

 

3.增加refreshdns,从ppp中获取的dns,增加一个refreshdns的函数, 保存位置,和start,end,等函数一起吧

refreshdns() {
        dnsfile=/etc/resolv.conf

        if [ -e $dnsfile ] ;then

          if  grep nameserver $dnsfile > /dev/null ;then

                dns1=`cat $dnsfile |grep nameserver | cut -d' ' -f2 |tail -n1 | head -n1`
                dns2=`cat $dnsfile |grep nameserver | cut -d' ' -f2 |tail -n2 | head -n1`

                sed -e "s/\(^[ \t]\+option domain-name-servers[ \t]\)\+.\+/\1 $dns1,$dns2;/g" /etc/dhcpd.conf > /etc/dhcpd.conf2
                mv -f /etc/dhcpd.conf2 /etc/dhcpd.conf
          fi
        fi
}

 

 

4.在start前面调用refreshdns,位于case的start前面:

case "$1" in
    start)
        refreshdns
        start
        ;;
    stop)
        stop
        ;;
    restart|force-reload)
        stop ; start
        ;;

 

 

这样dhcpd 就能自动获取从ppp的DNS