LINUX下PPPOE服务器限制流量

来源:互联网 发布:淘宝头像图片大全 编辑:程序博客网 时间:2024/04/27 22:03

LINUX下配PPPOE服务器  此前,我们已经系统介绍了利用routeros软件来搭建PPPOE服务器,总体上感觉功能很强大,也比较容易实现(我和同事们交流了一下,一般来说具有计算机网络基础的人,看一遍成功的配置操作,自己就可以独立配置PPPOE服务器了),但是有一个不可回避的现实是:PPPOE服务器是商业软件,价格不菲,下一个试用版练练手还可以,但如果要正式应用到实际网络上作真正的服务器就不靠谱了,那么我们就将注意力转移到LINUX系统上,LINUX系统肯定是可以做PPPOE服务器,实际上祥子花了一下午的时间也在LINUX下把PPPOE服务器配置成功了,但是还是有几点感受要说一下:

  一、LINUX众多的版本造成了配置命令的不统一,而PPPOE软件又没有提供一份权威的官方配置教程,造成网上流传的PPPOE教程各执一词,初学者很难根据一份教程就掌握PPPOE配置的要领。

  二、LINUX毕竟是一个通用的操作系统,而不为专为PPPOE服务器设计的,所以在配置PPPOE服务器的时侯,有时会因为一点LINUX自身的小细节设置不当而影响了PPPOE服务器本身的设置(比如祥子这次就为LINUX的两块网卡一重启就与网络断开连接痛头不已,好在通过研究配置文件解决了)。

  三、LINUX系统自身集成网络服务应该是一个趋势,即一台LINUX服务器装好,各种网络服务也相应的装好了,到时侯就要启用即可,这样可以简化操作,提升使用者的兴趣,从而提高LINUX在服务器操作系统的占用率。

  感受说了这么多,还是介绍一下本次在LINUX系统下配置PPPOE服务器的过程,我本次选用的是红旗LINUX6.0桌面版,在虚拟机中安装,虚拟了两块网卡,采用的是PPPOE+IPTABLES(NAT)的上网解决方案,分三部分来介绍整个配置过程。

  网络拓扑如图1所示

 

 

  从图1看出,使用LINUX作PPPOE服务器与使用routeros作PPPOE服务器在网络拓扑上是没有区别的,我们本次是使用Eth1网卡连接外网(为其设置IP地址、子网掩码、网关:10.70.10.15/255.255.0.0 10.70.0.1),Eth0网卡连接内网(为了安全起见,不设置IP地址等信息)。

  LINUX自身的网络设置

  虽然也可以在图形界面中是为网卡设置IP地址,但是真正实现网卡IP地址等信息的准确可靠,还是要在相应的文件中作设置,我们本次要设置两块网卡,编辑好的文件内容如下:

  [root@localhost network-scripts]# pwd
  /etc/sysconfig/network-scripts
  [root@localhost network-scripts]# more ifcfg-eth0
  TYPE="Ethernet"
  BOOTPROTO="static"
  IPADDR="0.0.0.0"
  DEVICE="lan"
  HWADDR="00:0C:29:33:69:86"
  ONBOOT="yes"
  NETMASK="0.0.0.0"
  [root@localhost network-scripts]# more ifcfg-eth1
  TYPE="Ethernet"
  BOOTPROTO="static"
  IPADDR="10.70.10.11"
  DEVICE="wan"
  HWADDR="00:0C:29:33:69:90"
  ONBOOT="yes"
  NETMASK="255.255.0.0"
  GATEWAY="10.70.0.1"

  我们重点看一下ifcfg-eth1的配置文件,其中ONBOOT="yes"是必须的,可以保证系统启动网卡自动连接到网络上,网关的信息是我们手工添加进出去,保证有网关可以正常的访问外部网络,ifcfg-eth0文件中只要保证ONBOOT="yes"就可以了,当然象在routeros中一样,我们将外网口的名字定义为wan,将内网口的名字定义为lan。

  PPPOE服务的设置

  (一)检查本机有没有安装PPPOE服务

  [root@localhost network-scripts]# rpm -q rp-pppoe
  rp-pppoe-3.5-35

  以上信息说明安装了

  (二)配置必要的参数

  为了使LINUX中的配置过程比较好理解,我们以routeros下的配置过程作为参考。

  1、了解pppoe-server-options

这个文件有点类似于ROUTERS下的profile文件,在这个文件中定义了使用哪种验证方式:require-chap,

为用户分配的DNS服务器地址是多少:
  ms-dns 202.99.160.68
  ms-dns 219.150.32.132

  完整的pppoe-server-options文件如下所示

[root@localhost ppp]# more pppoe-server-options
  # PPP options for the PPPoE server
  # LIC: GPL
  require-chap
  login
  lcp-echo-interval 10
  lcp-echo-failure 2

ms-dns 202.99.160.68

ms-dns 219.150.32.132

  2、添加用户名和密码

  在相同的目录下有一个chap-secrets文件,在这里面可以添加用户名和密码

  [root@localhost ppp]# more chap-secrets
  # Secrets for authentication using CHAP
  # client server secret IP addresses
   chen * chen *

  3、允许本地验证

  也就是修改options文件,将而来默认的lock改为local即可。

  [root@localhost ppp]# more options
  #lock
  local

  4、开启PPPOE服务

  [root@localhost ppp]# more pppstart
  pppoe-server -I eth1 -L 192.168.0.1 -R 192.168.0.5 -N 10

  像以前一样,我将这条命令做成了一个脚本,这样操作测试其中的参数比较方便,我简单介绍一下这条命令中的各个参数的意思。

  I:指定响应PPPOE请求的端口,本例中是在lan口上。
  L:PPPOE服务器的IP地址,这是客户端所填的PPPOE服务器的地址。
  R:这是分配给客户端的地址池起始地址,本例中从192.168.0.5开始
  N:地址池的IP地址递增几个,本例中添增10,也就是从192.168.0.5开始,到192.168.0.14结束。

  做完以上的设置,我们再梳理一下routeros下建立PPPOE服务的步骤
  1、添加一个地址池
  2、添加一个profile文件
  3、添加拨号用户
  4、启动pppoe服务

  对照一下,可以看出我们在LINUX中将以上步骤都完成了,也就是说PPPOE服务准备好了,客户端PPPOE拨号,顺利的话就可以拨号成功了。

  当然现在客户端还不能上网,因为PPPOE服务器还没有启用NAT,我们用IPTABLES软件来实现,写一个这样的脚本即可:
  
  echo "1" >> /proc/sys/net/ipv4/ip_forward
  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 192.168.30.130

  第一行的作用是启用IP转发,第二行是启动IPTABLES进行NAT转换,下面是对各个参数的解释

  -t nat表示进行NAT转化
  -s 192.168.0.0/24表示源地址为192.168.0.0/24这个网段
  -j SNAT --to 192.168.30.130表示将源地址都转化成192.168.30.130这个外网地址
  同样的,我们可以对照routeros系统里NAT的设置来理解这条命令。启动NAT以后,这台PPPOE服务器就功能完整了,客户端不仅可以拨通服务器,拨通后还可以上网。

以上就是利用LINUX服务器来架设PPPOE服务器的过程,功能一点不差,而且还是免费的,大家有兴趣可以试一下

利用linux网关中的iptables 对网络内的用户做简单的限速。可以通过以下的脚本实现。

.

#!/bin/bash

for ((i = 1; i < 253; i++))

# 这里给一个变量,是对于网内一个IP地址段做限速

do

/sbin/iptables -A FORWARD -s 192.168.2.$i -m limit -limit 60/s -j ACCEPT

/sbin/iptables -A FORWARD -s 192.168.2.$i -j DROP

done

当流量小于60/s的时候,iptables 接受并转发。当流量大于60/s 的时候,iptables丢弃数据包。

for((i=2;i<255;i++));do

iptables -A FORWARD -s 192.168.0.$i -m limit --limit 20/s -j ACCEPT

iptables -A FORWARD -s 192.168.0.$i DROP

done

添加:

iptables -A FORWARD -s 192.168.0.11 -m limit --limit 20/s -j ACCEPT

iptables -A FORWARD -s 192.168.0.11 -j DROP

删除:

iptables -D FORWARD -s 192.168.0.11 -m limit --limit 20/s -j ACCEPT

iptables -D FORWARD -s 192.168.0.11 -j DROP

在RH9下搭建PPPOE-Server

因为在安装的时候会对安装的软件包进行选择,所以首先要查看原有系统是否已经安装了rp-pppoe。

  新建终端输入以下命令:
  # rpm -q rp-pppoe

  如果已经安装了该软件,将返回:
  ro-pppoe-3.5-2

  如果返回的不是上面或相关的内容,就需要重新安装了。Red Hat Linux 9系统安装盘上有自带该软件,只要插入相关的光盘,输入以下命令:
  # mount -t iso 9660 /dev/hdc/mnt/cdrom(找到光驱这个设备,其中hdb或是hdc视安装的具体情况而定)
  # cd /mnt/cdrom/RedHat/RPMS(找到软件包所在的位置)
  # rpm -Uvh rp-pppoe*(开始安装)
  等待系统安装。

  值得注意的是,网上很多资料指出在安装rp-pppoe之前需要对linux的内核进行编译,除非对linux内核十分熟悉,一般不推荐这种做法。在RH9下,系统已经提供了一个成熟完善的内核。

  配置

  检查配置文件/etc/ppp/pppoe-server-options内容应该如下(如果不是,则需要修改):
  require-pap
  require-chap
  login
  lcp-echo-interval 10
  lcp-echo-failure 2
  下一步就是最关键的,设置用户和密码对:
  设置的用户名和密码分别是:用户cpe,密码:cpe;用户user密码:user。注意server和IP addresses分别用*号代替(不能为空)。
  在文件/etc/ppp/chap-secrets中写入:
  # Secrets for authentication using CHAP
  # client server secret IP addresses
  "cpe" * "cpe" *
  "user" * "user" *
   .
   .
   .
  修改pppd的访问权限,允许由root启动服务进程,测试表明:每次修改、添加用户名和密码后,都需要重新键入下面的命令。
  # chmod u+s /usr/sbin/pppd

  测试验证

  1 网络连接

  说明:eth0、eth1分别是PPPoE Server的两块网卡,其中:
  eth0:连接公司局域网,地址设为自动获取;
  eth1:连接DSLAM,地址设为静态:
  IP:172.21.161.2
  Netmask:255.255.255.0
  GW:172.21.161.1

  2 开启服务
  命令行:
  pppoe-server -I eth1 -L 172.21.161.2 -R 172.21.161.3
  具体含义:eth1为提供PPPoE服务的网卡,本地地址172.21.161.2,为远程拨号分配的地址从172.21.161.3开始(默认数量:64)。
  打开IP转发功能:
  echo "1">/proc/sys/net/ipv4/ip_forward
  这样就可以进行拨号了!

  3 验证
  当PPPoE Server服务开启后,在客户端进行拨号(Win2000下使用EnterNet300,XP用系统自带拨号工具),观察拨号进程,拨号成功后,在Windows下用ipconfig查看是否获得指定IP(从172.21.161.3开始的地址段)。
  在服务器端可用命令:sniff-pppoe -I eth1查看PPPoE服务是否启动正常,或者是用less /var/log/messages查看系统启动日志中关于pppoe的进程,连接成功的话,将会看到PPPoE的几个阶段即PADI、PADO、PADR、PADS、PADT几个报文的传输情况。

  至此,PPPoE服务器已经配置成功,能够顺利的进行拨号了。但拨号连接正常后,客户端还是不能上网,所以下一步就是对Linux上两块网卡之间的数据转发进行配置。

  4 Iptables&路由配置
  Linux下两块网卡路由配置的基本原则就是:外网网关为默认网关,在内网中添加一条路由。
  具体操作:结合上面的组网环境,eth0为外网网卡,eth1为内网网卡。
  首先,查看linux上的路由设置:
  在终端敲入命令#route
  查看default是不是指向eth0,gw:10.5.3.250,如果不是就要删除现有的default路由,添加:route add -net default netmask 0.0.0.0 gw 10.5.3.250 dev eth0
  为内网添加一条路由:
  route add -net 171.21.161.0 netmask 255.255.255.0 gw 172.21.161.1 dev eth1
  添加完后就可用iptables进行nat配置了。具体操作:
  查看是否已经加载iptables模块:
  lsmod | grep ip_tables
  如果没有则执行:
  modprobe ip_tables
  然后执行:
  iptables -t nat -A POSTROUTING -o eth0 -s 172.21.161.2/24 -j MASQUERADE
  这一条命令的大概意思就是:对从源端172.21.161.2发来的数据包进行伪装,并从eth0出口送出。
  现在就可以实现两块网卡之间的数据转发了。
  如果需要进行ftp服务,还需在服务器端加载ftp模块,具体如下:
  modprobe ip_nat_ftp
  modprobe ip_conntrack_ftp
  至此,整个PPPoE Server就配置完成,可以模拟整个拨号上网的过程!

  5 开机自动启用PPPoE Server
  以上是整个配置过程,归纳所有步骤,把他们一并写入/etc/rc.local,实现开机后自动打开PPPoE Server的功能,在原有文件中追加以下命令:
  route del -net default netmask 0.0.0.0 gw 172.21.161.1 dev eth1
  route add -net default netmask 0.0.0.0 gw 10.5.3.250 dev eth0
  route del -net 172.21.161.0 netmask 255.255.255.0 gw 172.21.161.1 dev eth1
  pppoe-server -I eth1 -L 172.21.161.2 -R172.21.161.3
  echo "1">/proc/sys/net/ipv4/ip_forward
  iptables -t nat -A POSTROUTING -o eth0 -s 172.21.161.2/24 -j MASQUERATE
  modprobe ip_nat_ftp
  modprobe ip_conntrack_ftp

  6 浏览网页时IE的设置
  由于整个局域网采用代理上网的方式,在客户端通过拨号建立连接后,需要在IE中进行代理设置,确保能正常浏览网页,具体方法如下:
  1、 打开IE,选择"工具"→"Internet选项"→"连接",在"拨号和虚拟专用网络设置"下选择通过modem所建立的当前连接的名称(如"PPPoE"),点击"设置",填入代理服务器的地址、端口以及拨号的用户名和密码。
  2、 打开IE,选择"工具"→"Internet选项"→"连接",在"局域网(LAN)设置"下点击"局域网设置"

Powered by Zoundry Raven

原创粉丝点击