一、Linux;上的;PPP Linux;中已经包括了点对点协议PPP,其主体是;pppd;,如果你已经使用过;Windows95;或;NT;的拨号网络, 那么你已经具备了;PPP;的基本经验了。在;Windows95;的;PPP;在同;ISP;连接后,视;ISP;情况不同,会自 动为;Windows;客户机提供;IP;地址和;DNS;服务器地址,而;Linux;的;PPP;不会自动接收;DNS;地址,这是; Linux;与;Windows;的一点区别,所以,Linux;上的;PPP;在协议连接成功后,要多一步;DNS;的配置。; 二、Kernel;的准备 你的;Linux;系统必须在;kernel;中配置支持;PPP;功能。如果你的;kernel;目前不支持;PPP,你需要重新生 成一个支持;PPP;的;kernel。重新编译;kernel;的方法可看相关;Howto。; 三、用辅助脚本配置;PPP;拨号网络 我一开始想运行;pppd;来连接拨号网络,但很快发现这是太麻烦了,因为选项太多。后来我发现,其实在; Linux;上已经提供了几个;PPP;拨号程序模版,只要对这些模板略作修改,就可轻松联上;PPP;了。根据我 的经验,如果顺利的话,10分钟就能完成配置。; (1)拨号程序所在的目录; 对于;RedHat;5.0,这几个拨号程序(Script)在;/usr/doc/ppp-2.2.0f/scripts;下,如果要使用这些脚本, 需要把它们拷贝到正确的目录中,具体如下:; ppp-on:;PPP;连接脚本;拷贝到;/usr/sbin; ppp-off:;PPP;断开脚本;拷贝到;/usr/sbin; ppp-on-dialer:;PPP;登录会话脚本;拷贝到;/etc/ppp; ppp-redialer:;可轮循多个电话号码的登陆脚本;拷贝到;/usr/sbin;(本文不用); 对于;Slackware;的用户,这些脚本已经安装到正确的目录了,无需做什么。 假定你在你的系统上找不到上述文件,可直接在本文后面的附录中cut。; (2)创建自己的拨号程序; 假定现在我们要用;PPP;连接;163;网,我们就可以利用上述脚本来作很简单的配置。虽然我们可以直接在这 些模板上做修改,我还是建议为自己拷贝一份模板,在新的拷贝上作修改比较好。所以,我们先做如下拷贝:; cd;/usr/sbin cp;ppp-on;ppp.163 chmod;+x;ppp.163 cd;/etc/ppp cp;ppp-on-dialer;dialer.163 chmod;+x;dialer.163 此外,要保证;ppp-off;也是可执行的; (3)定制自己的拨号程序; 首先编辑你的;ppp.163,其中多数内容都不必改动,只要修改以下几处:; TELEPHONE=163 ACCOUNT= PASSWORD= DIALER_SCRIPT=/etc/ppp/dialer.163 另外,在最后的;exec;启动;pppd;一行里,注意提供你的;Modem;所在的串口设备文件(通常是 COM1;/dev/cua0;或;/dev/ttyS0,COM2;/dev/cua1;或;/dev/ttyS1),并设置串口的通信速度(缺省是;38400, 对于现在的高速;Modem,这个速度太低了,可设置成;57600以上)。完成后的;ppp.163;内容是:; #!/bin/sh # #;Script;to;initiate;a;ppp;connection.;This;is;the;first;part;of;the #;pair;of;scripts.;This;is;not;a;secure;pair;of;scripts;as;the;codes #;are;visible;with;the;'ps';command.;However,;it;is;simple. # #;These;are;the;parameters.;Change;as;needed. TELEPHONE=163;#;拨号号码 ACCOUNT=YourUserName;#;用户名; PASSWORD=YourPassword;#;口令,注意限制其他人读取本文件! LOCAL_IP=0.0.0.0;#;本地IP地址,0.0.0.0;表示动态分配 REMOTE_IP=0.0.0.0;#;原端IP地址,一般是;0.0.0.0 NETMASK=255.255.255.0;#;子网掩码 export;TELEPHONE;ACCOUNT;PASSWORD #; #;This;is;the;location;of;the;script;which;dials;the;phone;and;logs #;in.;Please;use;the;absolute;file;name;as;the;$PATH;variable;is;not #;used;on;the;connect;option.;(To;do;so;on;a;'root';account;would;be #;a;security;hole;so;don't;ask.) # DIALER_SCRIPT=/etc/ppp/dialer.163;#;拨号登录脚本文件名 # #;Initiate;the;connection #; #;I;put;most;of;the;common;options;on;this;command.;Please,;don't #;forget;the;'lock';option;or;some;programs;such;as;mgetty;will;not #;work.;The;asyncmap;and;escape;will;permit;the;PPP;link;to;work;with #;a;telnet;or;rlogin;connection.;You;are;welcome;to;make;any;changes #;as;desired.;Don't;use;the;'defaultroute';option;if;you;currently #;have;a;default;route;to;an;ethernet;gateway. # exec;/usr/sbin/pppd;debug;lock;modem;crtscts;/dev/ttycua0;57600; asyncmap;20A0000;escape;FF;kdebug;0;$LOCAL_IP:$REMOTE_IP; noipdefault;netmask;$NETMASK;defaultroute;connect;$DIALER_SCRIPT 然后,检查一下你的登录会话程序;/etc/ppp/dialer.163,在我所在的;163;ISP,这个从模板拷贝过来的 会话程序可直接使用,如果有以下情况,你需要对这个会话程序略作改动:; (1)如果拨号提示输入用户名的提示符不是;login:; (2)如果登录成功后还要用户再交互打入命令;,才启动;ppp;协议 本文后面的附录三是一个根据上述要求略加修改后的登录脚本。; 建议:假如你有多个;ISP;可连接,就创建多个拨号;PPP;连接脚本和相应的;PPP;登录脚本。; 四、启动;PPP;和断开;PPP 启动你的;PPP;连接唯一要做的就是开启;Modem,运行刚才写好的;ppp.163。你的;ppp.163;脚本将自动拨 号、送出登录信息、完成协议认证,等你看到你的;Modem;上的数据传输指示灯不再闪动并保持连接状态, PPP;连接就完成了,你可以打命令:; netstat;-r; 查看当前的路由表,如果;PPP;协议连接成功的话,路由表里就会有连接你的;ISP;的缺省路由。你的;PPP 已经配置成功了。; 如果没有成功,注意看一下;/etc/ppp;下的;PPP;出错记录文件。; 要断开;PPP;连接,运行;ppp-off。; 五、DNS;的配置 PPP;连接成功后,如果要使用;WWW;浏览器、Ftp、Telnet;等服务,必须正确配置;DNS;域名解析。所以, 一旦;PPP;连接完毕,应该在;/etc/resolv.conf;中加入一行:; nameserver; 注意;nameserver;后面的是你的;ISP;的;DNS;服务器的;IP;地址,并且这一行说明必须放在其他的; nameserver;说明之前,否则,你的;Linux;系统不会访问你的;ISP;的;DNS;服务器。然后,你就能使用各 项;Internet;服务了。; 六、自动配置;DNS;解析 本节内容并不是配置;PPP;必需的,但能对;PPP;的使用提供一些方便。; 由于你的;Linux;并不总是连在;Internet;上,所以在不连接;PPP;时,需要的;resolv.conf;是不同的。 所以,我们希望有一种办法能根据不同的情况,在;Linux;系统上自动设置合适的;resolv.conf;。; 在;/etc/ppp;下,有两个根据;PPP;连接状态自动运行的脚本,ip-up;和;ip-down,分别在;PPP;建立连接 和断开连接时运行,如果用户希望在;PPP;连接或断开时执行某些命令,可以在;/etc/ppp;目录下建立脚 本文件;ip-up.local;和;ip-up.local,在这两个文件中放入要执行的命令。当;PPP;建立连接后,ip-up; 会调用;ip-up.local,执行用户命令;当;PPP;断开连接后,ip-down;会调用;ip-down.local;,执行用户 命令。; 所以我们可以利用这个机制实现;DNS;解析的自动配置,方法如下:; (1)在;/etc;下编辑分别适用于;PPP;连接状态和正常本地状态的;DNS;解析配置文件,我们假定这两个 文件是;resolv.ppp;和;resolv.normal。; (2)在;/etc/ppp;下建立;ip-up.local,设置其执行权限,并在文件中加入:; cp;/etc/resolv.ppp;/etc/resolv.conf; (3)在;/etc/ppp;下建立;ip-down.local,设置其执行权限,并在文件中加入:; cp;/etc/resolv.normal;/etc/resolv.conf; 这样设置后,每当;PPP;连接成功后,/etc/resolv.conf;的内容就是;resolv.ppp,而;PPP;断开后, /etc/resolv.conf;被恢复成;resolv.normal;的内容。; 附录一:PPP;连接脚本模板;ppp-on #!/bin/sh # #;Script;to;initiate;a;ppp;connection.;This;is;the;first;part;of;the #;pair;of;scripts.;This;is;not;a;secure;pair;of;scripts;as;the;codes #;are;visible;with;the;'ps';command.;However,;it;is;simple. # #;These;are;the;parameters.;Change;as;needed. TELEPHONE=555-1212;#;The;telephone;number;for;the;connection ACCOUNT=george;#;The;account;name;for;logon PASSWORD=gracie;#;The;password;for;this;account LOCAL_IP=0.0.0.0;#;Local;IP;address;if;known.;Dynamic;=;0.0.0.0 REMOTE_IP=0.0.0.0;#;Remote;IP;address;if;desired.;Normally;0.0.0.0 NETMASK=255.255.255.0;#;The;proper;netmask;if;needed # #;Export;them;so;that;they;will;be;available;at;'ppp-on-dialer';time. export;TELEPHONE;ACCOUNT;PASSWORD #; #;This;is;the;location;of;the;script;which;dials;the;phone;and;logs #;in.;Please;use;the;absolute;file;name;as;the;$PATH;variable;is;not #;used;on;the;connect;option.;(To;do;so;on;a;'root';account;would;be #;a;security;hole;so;don't;ask.) # DIALER_SCRIPT=/etc/ppp/ppp-on-dialer # #;Initiate;the;connection #; #;I;put;most;of;the;common;options;on;this;command.;Please,;don't #;forget;the;'lock';option;or;some;programs;such;as;mgetty;will;not #;work.;The;asyncmap;and;escape;will;permit;the;PPP;link;to;work;with #;a;telnet;or;rlogin;connection.;You;are;welcome;to;make;any;changes #;as;desired.;Don't;use;the;'defaultroute';option;if;you;currently #;have;a;default;route;to;an;ethernet;gateway. # exec;/usr/sbin/pppd;debug;lock;modem;crtscts;/dev/ttyS0;38400; asyncmap;20A0000;escape;FF;kdebug;0;$LOCAL_IP:$REMOTE_IP; noipdefault;netmask;$NETMASK;defaultroute;connect;$DIALER_SCRIPT 附录二:PPP;登录脚本模板;ppp-on-dialer #!/bin/sh # #;This;is;part;2;of;the;ppp-on;script.;It;will;perform;the;connection #;protocol;for;the;desired;connection. # exec;chat;-v; TIMEOUT;3; ABORT;'nBUSYr'; ABORT;'nNO;ANSWERr'; ABORT;'nRINGINGrnrnRINGINGr'; '';rAT; 'OK-+++c-OK';ATH0; TIMEOUT;30; OK;ATDT$TELEPHONE; CONNECT;''; ogin:--ogin:;$ACCOUNT; assword:;$PASSWORD 附录三:一个稍作修改的;PPP;登录脚本 #!/bin/sh # #;This;is;part;2;of;the;ppp-on;script.;It;will;perform;the;connection #;protocol;for;the;desired;connection. # exec;chat;-v; TIMEOUT;3; ABORT;'nBUSYr'; ABORT;'nNO;ANSWERr'; ABORT;'nRINGINGrnrnRINGINGr'; '';rAT; 'OK-+++c-OK';ATH0; TIMEOUT;30; OK;ATDT$TELEPHONE; CONNECT;''; sername:--sername:;$ACCOUNT; assword:;$PASSWORD; nnex:;ppp 说明:(1)用户登录提示符从由;login:;改为;username:; (2)用户登录后,访问服务器出现提示符;annex:;,需要手工输入;ppp;命令; 附录四:可轮询拨号的;PPP;连接脚本模板;ppp-redialer #!/bin/sh ################################################################### # #;These;parameters;control;the;attack;dialing;sequence. # #;Maximum;number;of;attempts;to;reach;the;telephone;number(s) MAX_ATTEMPTS=10 #;Delay;between;each;of;the;attempts.;This;is;a;parameter;to;sleep #;so;use;"15s";for;15;seconds,;"1m";for;1;minute,;etc. SLEEP_DELAY=15s ################################################################### # #;This;is;a;list;of;telephone;numbers.;Add;new;numbers;if;you;wish #;and;see;the;function;'callall';below;for;the;dial;process. PHONE1=555-1212 PHONE2=411 ################################################################### # #;If;you;use;the;ppp-on;script,;then;these;are;passed;to;this;routine #;automatically.;There;is;no;need;to;define;them;here.;If;not,;then #;you;will;need;to;set;the;values. # ACCOUNT=my_account_name PASSWORD=my_password ################################################################### # #;Function;to;initialize;the;modem;and;ensure;that;it;is;in;command #;state.;This;may;not;be;needed,;but;it;doesn't;hurt. # function;initialize { chat;-v;TIMEOUT;3;'';AT;'OK-+++c-OK' return } ################################################################### # #;Script;to;dial;a;telephone # function;callnumber { chat;-v; ABORT;'nBUSYr'; ABORT;'nNO;ANSWERr'; ABORT;'nRINGINGrnrnRINGINGr'; '';ATDT$1; CONNECT;''; ogin:--ogin:;$ACCOUNT; assword:;$PASSWORD # #;If;the;connection;was;successful;then;end;the;whole;script;with;a #;success. # if;[;"$?";=;"0";];;then exit;0 fi return } ################################################################### # #;Script;to;dial;any;telephone;number # function;callall { #;echo;"dialing;attempt;number:;$1";>/dev/console callnumber;$PHONE1 #;callnumber;$PHONE2 } ################################################################### # #;Initialize;the;modem;to;ensure;that;it;is;in;the;command;state # initialize if;[;!;"$?";=;"0";];;then exit;1 fi # #;Dial;telephone;numbers;until;one;answers # attempt=0 while;:;;;do attempt=`expr;$attempt;+;1` callall;$attempt if;[;"$attempt";=;"$MAX_ATTEMPTS";];;then exit;1 fi; sleep;"$SLEEP_DELAY" done 附录五:PPP;断开脚本;ppp-off #!/bin/sh ###################################################################### # #;Determine;the;device;to;be;terminated. # if;[;"$1";=;"";];;then DEVICE=ppp0 else DEVICE=$1 fi ###################################################################### # #;If;the;ppp0;pid;file;is;present;then;the;program;is;running.;Stop;it. if;[;-r;/var/run/$DEVICE.pid;];;then kill;-INT;`cat;/var/run/$DEVICE.pid` # #;If;the;kill;did;not;work;then;there;is;no;process;running;for;this #;pid.;It;may;also;mean;that;the;lock;file;will;be;left.;You;may;wish #;to;delete;the;lock;file;at;the;same;time. if;[;!;"$?";=;"0";];;then rm;-f;/var/run/$DEVICE.pid echo;"ERROR:;Removed;stale;pid;file" exit;1 fi # #;Success.;Let;pppd;clean;up;its;own;junk. echo;"PPP;link;to;$DEVICE;terminated." exit;0 fi # #;The;ppp;process;is;not;running;for;ppp0 echo;"ERROR:;PPP;link;is;not;active;on;$DEVICE" exit;1 |
标签: linux