SuSELinux上部署pppoe-server服务,rp-pppoe

来源:互联网 发布:计算机服装排版软件 编辑:程序博客网 时间:2024/06/06 00:12

 

前言:

实验室的宽带是公网静态IP,上外网不需要拨号也不能拨号。 为了测试某款终端产品的拨号上网功能,调试时只能自己弄个pppoe-server了。

 

网上搜索了一下,解决方案有很多:RouterOS,Windows Server 2003上部署拨号服务软件,Linux pppoe-server等。有其他项目的同事以前搞过,给我发了一个模拟BAS,软件叫RASPPPOE啥的。

 

时间不等人,没有多的电脑设备,也倾向于使用linux,最后选来选去决定使用rp-pppoe来搭建一个PPPOE-Server

 

网上资料不是很多,国内的资料也总是抄来抄去或者不够详细,于是就有了这篇博客,希望能够帮助到后来人

 

-----------------------------------------------------

软件准备:

操作系统用的SuSELinux11
软件用的rp-pppoe,这个软件支持adsl拨号和pppoe-server,开源免费。

 

参考文档:

(1)Rehat上安装rp-pppoe:

这个文档不错,值得一读,很老的文章说明pppoe-server并不是什么高深的技术
http://www.quirxi.net/misc/howtos/Pppoe-Howto/Pppoe-Howto.html

(2)rp-pppoe自带的简单文档

再就是rp-pppoe doc目录下自带的简单的说明文档,至于配置项什么的在配置文件有些说明

(3)还有这个文档,网上贴的比较多

Linux 系统服务器配置文档—《PPPoE 篇》

 

 

具体操作:

一、安装
下载 rp-pppoe: http://www.roaringpenguin.com/products/pppoe

 

检查系统是否已安装PPPOE服务器: 网上介绍用rpm -q rp-pppoe,但下载下来的并不是一个rpm,用which pppoe-server直接看就可以了

检查linux内核版本:uname -r ,自带doc上介绍安装rp-pppoe需要内核2.2.9以上

 

rp-pppoe-3.11.tar.gz 下载后解压,解压后有README文件指导安装,可以快速安装或手动安装

我用的手动编译和安装

1) Unpack:

        $ tar xzvf rp-pppoe-xxx.tar.gz

2) Change to source directory:

        $ cd src

3) Configure:

        $ ./configure

4) Compile:

        $ make

4) Install (this step must be done as root)

        # make install
----------------------------------------------------------


二、配置

/etc/ppp/目录下有很多配置文件,改这3个就可以了

(1)vi /etc/ppp/pppoe-server-options   #可以先参考 pppoe-server-options-example

require-chap       #使用chap验证协议,如果使用pap验证协议,则此行为 require-pap

login              #使用系统的账号进行认证。 要求pppd的登录账号在系统和chap-secrets文件中均存在。

lcp-echo-interval 10

lcp-echo-failure 2

ms-dns 8.8.8.8      #分配给客户端的DNS

(2)添加身份验证账户
vi /etc/ppp/chap-secrets     #如果使用pap验证,则修改/etc/ppp/pap-secrets

# client        server        secret                  IP addresses
username         *            password                 *
其中username和password分别是用户名和密码
如果pppoe-server-options中使用了login项,需要在linux上用useradd命令创建同名帐户

(3)vi /etc/ppp/options   --- 是否要修改不确定,但改了下面这一项
local     #这个是pppoe拨号协议的一个开关,options文件内有说明


三、启动pppoe服务器

用eth0提供拨号服务,eth0没有配置地址。eth1已经配置好地址,可以上公网

(1)检查网卡

ifconfig eth0    #如果网卡没有起来,可以用ifconfig eth0 up

确保这个网口正常,最好接上一个设备,用ethtool eth0命令查看是否连接
linux:~ # ethtool eth0
        Link detected: yes

(2)提供pppoe-server的网卡上不能配IP地址
用ifconfig eth0 查看

(3)在网卡上启用pppoe-server服务
pppoe-server -I eth0 -L 192.168.1.1 -R 192.168.1.2 -N 10

-I eth0       指定pppoe服务器在那个网卡接口监听连接请求

-L 192.168.1.1       指定pppoe服务器的ip地址。(注意:此IP地址不是网卡的IP地址,而是PPPOE服务器的虚拟IP)

-R 192.168.1.2       pppoe服务器分配给客户端的IP地址,从192.168.1.2开始,递增

-N 10       指定最多可以连接pppoe服务器的客户端数量

-k: 使用内核模块
-L: 设置服务端IP地址
-R: 设置客户端启示IP地址
-x: 每个MAC地址能发起的session(这个似乎在新版本中才有)
-C:设置链接主机名字,默认是主机名
-S: 设置服务名
-I:设置需要监听的端口
-N: 设置最大客户端链接数,默认是64


启动pppoe-server后检查进程是否存在:ps -ef | grep -i pppoe

关闭pppoe所有服务(包括server服务): killall pppoe-server

pppoe-server的日志输出在/var/log/messages,这个日志是SuSELinux操作系统的日志

终端设备拨号成功后,用ifconfig命令可以在SuSELinux看到这样一个连接
其中inet addr:192.168.1.1是pppoe-server的ip, P-t-P:192.168.1.2是终端拨号成功获取到的ip
ppp0      Link encap:Point-to-Point Protocol 
          inet addr:192.168.1.1  P-t-P:192.168.1.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:34888 errors:0 dropped:0 overruns:0 frame:0
          TX packets:69929 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:2013508 (1.9 Mb)  TX bytes:90514273 (86.3 Mb)


四、使拨号的终端也能够上公网
拨号服务器有2块网卡:eth0用于PPPOE Server,eth1能上外网
为了使拨号的终端能上外网,还需要如下配置:
(1)开启IP转发,这样eth0的包才会被允许转发到eth1
# echo "1" > /proc/sys/net/ipv4/ip_forward

(2)将eth1出向包的源地址进行修改
如果eth1是静态地址:
# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.20.7.251

将输出到eth1的出向包的源地址修改为172.20.7.251,172.20.7.251是eth1的静态地址。

命令解释: -A POSTROUTING -o eth1是匹配(match)到网络包, -j 是指定nat时的具体动作。就是对match到的包做指定动作。


如果eth1是动态获取的地址:
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
将源地址修改为eth1实际获取到的地址,又称ip欺骗

 

配置后,查看iptables配置
linux:~ # iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination        

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination        
SNAT       all  --  anywhere             anywhere            to:172.20.7.251

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

如果要全清除iptables规则,使用iptables -t nat -F

 


五、补充问题

1.pppoe认证失败
PAP的用户名称(pap验证的ID、密码),不是任意的,必须与server系统的一个用户名、密码一致。
CHAP的用户名称是任意的,没有限制的。


在源代码里面有个doc目录:

F) Internal hosts can't see the Internet

Do you have masquerading set up?  I can't help you in great detail, but
see the IPCHAINS-HOWTO and the IP-Masquerade mini-HOWTO.

如果拨号成功的终端还是不能上网,需要同时对eth0和eth1抓包进行分析。比如抓到的网络包分别是cur_eth0.cap和cur_eth1.cap

第一步,查看发送给eth0的消息,有没有转发到eth1上。正常情况,同一个消息应该在cur_eth0.cap和cur_eth1.cap都存在。

第二步,查看终端发出来的消息有没有被SNAT,需要重点分析下cur_eth1.cap了

 

 

 

 

 

 

 

 

0 0
原创粉丝点击