QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1089|回复: 1

(转)LINUX上的ADSL(好文)

[复制链接]
发表于 2005-4-10 00:27:08 | 显示全部楼层 |阅读模式
复旦大学北区的网络是网通铺设的,只和校园网互联,需要代理服务器才能够访问教育网和Internet。然而,代理并非唯一的途径,你当然可以交钱去买网通的拨号上网卡,然后享受冲浪的快感。本人由于工作和学习需要,经常需要访问google和hotmail等网站,代理的不稳定性实在让人头疼,权衡之下,一直都用网通的卡来访问互联网。

网通在北区设了一个接入点,好比是个adsl modem。拨号的时候就通过PPPOE协议与接入点通讯。PPPOE协议的全称是Point to Point Protocol Over Ethernet(以太网上的点对点协议),原理是用PPP协议在以太网上做tunnel,使得应用程序可以透明地访问网络。

Redhat9下的PPPOE软件叫做rp-pppoe,rpm的说明如下:

PPPoE (Point-to-Point Protocol over Ethernet) is a protocol used by many ADSL Internet Service Providers. This package contains the Roaring Penguin PPPoE client, a user-mode program that does not require any kernel modifications. It is fully compliant with RFC 2516, the official PPPoE specification。

rp-pppoe软件包中用于上adsl的几个主要工具如下:
adsl-setup,adsl-start,adsl-status,adsl-stop
顾名思义,setup是用来配置adsl的,start是开始拨号,status是查询状态,stop关闭连接。

首先来看adsl-setup的具体步骤:

1、运行adsl-setup后会出有如下的输出:
      Enter your Login Name (default root):   要求你输入用户名
用户名一般是上网卡上的ID,或者你的adsl帐号,一定要仔细阅读卡上的说明,搞清楚哪个是用户名。

2、然后要求输入连接到adsl modem的网络接口
     Enter the Ethernet interface connected to the ADSL modem。For Linux, it will be ethX, where 'X' is a number. (default eth0):
这个网络接口一般是eth0,表示第一个网卡。这里直接回车,缺省设置为eth0。

3、接着是一个比较关键的设置:

Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped.  If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses.  You may have some problems with demand-activated links.
Enter the demand value (default no):

这里表示你希望拨号一直持续下去呢,还是在某短时间过后,拨号连接自动关闭。缺省是保持连接。
如果你输入120,那么拨号成功后再过两分钟,连接自动关闭,这对于玩网络游戏和看在线电影无疑是个灾难,所以直接回车,选择保持连接。

4、DNS设置。

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide dynamic DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
Enter the DNS information here:

如果ADSL的服务商告诉你他们能够提供DNS服务器,那么直接输入server,否则你需要知道一个可用的DNS,然后输入该DNS的IP地址。如果你选择直接回车,那么adsl拨号将使用你本机上已经设置好的DNS服务器。
一般来说,adsl都会提供DNS服务器,所以输入server后回车。

5、接着就输入上网卡或者你的adsl帐号的密码

6、第六步的设置跟安全性有关:

USERCTRL
Please enter 'yes' (two letters, lower-case.) if you want to allow
normal user to start or stop DSL connection (default yes):

如果输入yes,那么非root用户也能用adsl-start来进行拨号,输入no,那么仅有root能够进行拨号。

7、第七步设置防火墙:

Please choose the firewall rules to use.  ……

The firewall choices are:
0 - NONE: This script will not set any firewall rules.  You are responsible           for ensuring the security of your machine.  You are STRONGLY recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway for a LAN
Choose a type of firewall (0-2):

如果选择0,那么不设置任何防火墙,所有数据包都可以自由进出。
1表示standalone模式,适合上网web冲浪,如果要下载或者聊天,会有一些问题。
2表示masquerade模式,如果你的机器是用做一个LAN的internet网关,那么选择2。
一般来讲,都选择0,不需要任何防火墙。

8、第八项是设定机器启动时是否自动拨号

Start this connection at boot time

Do you want to start this connection at boot time?
Please enter no or yes (default no):

一般选择no,除非你希望机器启动后就能上网。

9、第九步会打印部分你输入的信息,然后提示你输入“y"保存设置或者"n"放弃设置。
输入"y"后,会输出一些有用的信息,包括如何拨号,如何关闭拨号等。

Congratulations, it should be all set up!

Type '/sbin/ifup ppp0' to bring up your xDSL link and '/sbin/ifdown ppp0'
to bring it down.
Type '/sbin/adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp0'
to see the link status.

这里比需要清楚ifup ppp0和adsl-start的功能是一样的,同样ifdown ppp0和adsl-stop的功能也是一样的。

到这里,所有的设置就完毕了,启动adsl-start就开始拨号,拨号完成后可以用ifconfig 来查看是否新产生了一个ppp0的网络接口,以下是我的输出:

eth0      Link encap:Ethernet  HWaddr 00:0E:A6:0D:47:BE
          inet addr:10.100.166.24  Bcast:10.100.166.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:947521 errors:0 dropped:0 overruns:0 frame:0
          TX packets:955039 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:177253169 (169.0 Mb)  TX bytes:598733826 (570.9 Mb)
          Interrupt:5

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1635384 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1635384 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:667839088 (636.9 Mb)  TX bytes:667839088 (636.9 Mb)

ppp0      Link encapoint-to-Point Protocol
          inet addr:220.248.60.230  P-t-P:220.248.60.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1486  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:54 (54.0 b)  TX bytes:54 (54.0 b)

可以看到,adsl给我分配的IP地址是220.248.60.230。然后你就可以打开浏览器,打开gaim开始聊天了。
你马上就会发现,你仍然不能上网,浏览器打开了半天没反应,gaim一直在login,为什么呢?
问题出在你的路由表上。

输入route命令可以查看自己的路由表设置,路由表由一系列路由规则组成

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
220.248.60.1    *               255.255.255.255 UH    0      0        0 ppp0
10.100.166.0    *               255.255.255.0   U     0      0        0 eth0
default         10.100.166.250  0.0.0.0         UG    0      0        0 eth0

这里Destination是我们的目的地址,Gateway表示网关,Genmask表示子网掩码,Flags表示网关的类型,Metric表示你的机器到目的地址的hop数,也就是要经过几次网络设备的转发才能到达目的地址。Ref和Use意义不明,Iface表示这个路由规则是对哪个网络接口起作用。

adsl分配给我们的IP是220.248.60.230,我们必须把所有出去的数据包发送给这个IP,才能被转发到Internet上,因此,我们需要改掉路由表,使得220.248.60.230能够成为我们的缺省网关。
输入命令: route add default gw 220.248.60.230   

这样,我们的路由表就变成了:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
220.248.60.1    *               255.255.255.255 UH    0      0        0 ppp0
10.100.166.0    *               255.255.255.0   U     0      0        0 eth0
default         220.248.60.230  0.0.0.0         UG    0      0        0 ppp0
default         10.100.166.250  0.0.0.0         UG    0      0        0 eth0

再试试看,现在能上网了吧。别高兴太早,你打开了sohu,正在看新闻,突然想上厕所,你放下鼠标,上厕所去了。等你过会儿回来,突然发现网页再也打不开了,再ifconfig一下,发现ppp0不在了(即使在,它的ip也不是220.248.60.230),难怪上不了网了,怎么办?

别着急,一个最笨的办法是迅速观察更新后的IP,然后如发炮制route add default gw 220.248.60.230,又能上网了,但是不能持久,第二笨的办法是执行route add后,执行ping www.yahoo.com,然后再去看新闻。呵呵,这下可以了吧,虽然有些别扭,但至少不掉线了。有的人满足了,有的人还不满足,有没有聪明的办法?
好,继续往下看。

如果你上厕所的时间不超过20秒,回来以后你会发现可以继续上网。这是因为pppoe的默认设置在20秒后要断线,而你最初执行adsl-setup的时候选择了保持连接(请看第三步),所以过了20秒,连接断掉,adsl又自动开始重新连接,并给你分配一个新的IP,如果你走开一分钟,断开重连将会循环三次。这里要交给你一招
在文件 /etc/sysconfig/network-scripts/ifcfg-ppp0中有一行 PPPOE_TIMEOUT=20。这就是罪魁祸首,每20秒如果你没有任何数据传输,连接将会断开。在这里,我把这个值修改为1800,也就是半小时。这下上网就省心了。

你满意了吗?有人回答“不满意”,为什么?他们会说”我就想上个网,你让我又是修改路由表,又是修改配置参数,至于吗?“,好,我告诉你,懒人也有懒人的活法。

为了一步到位,我写了一个脚本,包括拨号,修改路由,全部搞定。脚本如下:

#!/bin/sh

#拨号
ifup ppp0           

#得到分配给我们的IP地址
IPADDR=`ifconfig | grep P-t-P | cut -d":" -f2 | cut -d" " -f1`   

#修改路由
route add default gw $IPADDR
#大功告成

#如果你还想添加其他的路由规则,可以在这里继续
route add -net 10.0.0.0/8 gw 10.100.166.250

把文件名存为adsl
然后chmod +x adsl 使得adsl变成可执行的脚本文件
最后cp adsl.sh /bin/adsl

这下,你只需要输入adsl就可以上网了,简单吧,呵呵,good luck
发表于 2005-4-10 09:14:21 | 显示全部楼层
好像把路由表清空就可以了吧?

不错,是篇好文章!
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-24 16:29 , Processed in 0.069091 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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