家里使用一台上网机,作为文件服务器。主板坏了,重新安装一下,做一些笔记,方便下一次处理。
需求:
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