分享
 
 
 

PPPOE + FreeRADIUS + MySQL+vlan

王朝幽默笑话·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

硬件环境: LH3000 CPU 2*PIII1000MHZ/MEM 2*1G/2*SCSI HDD 34G(raid1)/2*Intel(R) PRO/1000

软件环境: RHEL 3

网络环境:

eth0: 192.168.1.2/255.255.255.0 gw 192.168.1.1

路由1--eth0

路由1配置 ip route 192.168.0.0 255.255.0.0 192.168.1.2 (192.168.0.0/16的网段由pppoe分配)

eth1: (用户接入口,配vlan口)

eth1---(switch1)--用户pc1

switch1定义vlan

用到的包:

ppp-2.4.4.tar.gz 在http://ppp.samba.org/

linux-2.4.33.3.tar.bz2 在http://www.kernel.org/

ppp-2.4.3-mppe-mppc-1.1.patch.gz 和 linux-2.4.31-mppe-mppc-1.3.patch.gz 在http://mppe-mppc.alphacron.de/

(ppp-2.4.4-mppe-mppc-1.1.patch 由下文所述生成)

rp-pppoe-3.8.tar.gz 在http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php

mysql-5.0.24a.tar.gz 在http://dev.mysql.com

freeradius-1.1.3.tar.bz2 在http://www.freeradius.org

所有文件放在同一个目录下如:/root/package

1、重编译内核,加入PPP和PPPOE的支持;

首先解压内核源码,

tar xjvf linux-2.4.33.3.tar.bz2 -C /usr/src

ln -s /usr/src/linux-2.4.33.3 /usr/src/linux

cd /usr/src/linux

然后把MPPC+MPPE的补丁打上。

gzip -d linux-2.4.31-mppe-mppc-1.3.patch.gz

patch -p1 < linux-2.4.31-mppe-mppc-1.3.patch

之后就

cp /boot/config-2.4.21-4.ELsmp .config

make menuconfig

加入以下支持:

code maturity level options——>;

[*]prompt for development and/or incomplete code/drivers

networking options——>;

[*]packet socket

[*]packet socket:mmapped io

<M> 802.1Q VLAN Support

network device support——>;

<M> Bonding driver support (为以后着想,bonding可以增加网络带宽)

<M>;PPP (point-to-point protocol) support

[*]PPP multilink support (EXPERIMENTAL)

<M>;PPP support for async serial ports

<M>;PPP support for sync tty ports

<M>;PPP Deflate compression

<M>;PPP BSD-Compress compression

<M>;Microsoft PPP compression/encryption (MPPC/MPPE)

<M>;PPP over Ethernet (EXPERIMENTAL)

character devices——>;

[*]non-standard serial port support

[M]hdlc line discipline support

Cryptographic options--->;

[M]SHA1 digest algorithm

[M]ARC4 cipher algorithm

按照上面的配置重新编译内核,

make dep && make bzImage && make modules && make modules_install

然后安装内核,

cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.33.3

cp vmlinux /boot/vmlinux-2.4.33.3

cp System.map /boot/System.map-2.4.33.3

cd /boot

rm System.map

ln -s System.map-2.4.33.3 System.map

mkinitrd initrd-2.4.33.3.img 2.4.33.3

vi grub/grub.conf

加入

title Red Hat Enterprise Linux AS (2.4.33.3)

root (hd0,0)

kernel /vmlinuz-2.4.33.3 ro root=LABEL=/

initrd /initrd-2.4.33.3.img

并用它启动完毕后,备用。

2、确信/dev/ppp设备文件存在

ls /dev/ppp

若没有创建一个/dev/ppp 设备文件,这是ppp拨号所必需的。

mknod --mode=664 /dev/ppp c 108 0

3、确保 /etc/modules.conf 里面有如下几行:

alias char-major-108 ppp_generic

alias tty-ldisc-3 ppp_async

alias tty-ldisc-13 n_hdlc

alias tty-ldisc-14 ppp_synctty

alias net-pf-24 pppoe

alias vlan 8021q

#alias bond0 bonding

4、安装 ppp-2.4.3.tar.gz

解压缩之后,打上ppp-2.4.3-mppe-mppc-1.1.patch.gz 补丁,然后编译安装:

tar zxvf ppp-2.4.4.tar.gz

gunzip ppp-2.4.3-mppe-mppc-1.1.patch.gz

cd ppp-2.4.4

patch -p1 < ppp-2.4.3-mppe-mppc-1.1.patch (在打补丁ccp.c时有一处错误,手动修改即可,具体位置923-1300行)

cd ..

tar zxvf ppp-2.4.4.tar.gz -C ppp-2.4.4.orig

diff -ruN ppp-2.4.4.orig ppp-2.4.4 > ppp-2.4.4-mppe-mppc-1.1.patch (以后使用)

cd ppp-2.4.4

./configure

make

make install install-etcppp

5、安装rp-pppoe

tar zxvf rp-pppoe-3.8.tar.gz

cd rp-pppoe-3.8/src

./configure --prefix=/usr/local --enable-plugin=../../ppp-2.4.4

make

make install

6、把生成的rp-pppoe.so/radius.so等模块复制到ppp的配置目录里

cp /usr/local/lib/pppd/2.4.4/* /etc/ppp/plugins

7、配置 /etc/ppp/options

lock

crtscts

nobsdcomp

nodeflate

nopcomp

8、配置 /etc/ppp/pppoe-server-options

auth

require-pap (由于我的用户密码在mysql中是加密的,所有只能用pap方式认证)

#require-chap (用户密码是明文的话,可以使用eap,chap等方式)

default-mru

default-asyncmap

lcp-echo-interval 60

lcp-echo-failure 5

ms-dns 192.168.0.* (用户首选dns)

ms-dns 192.168.1.* (用户备用dns)

noipdefault

noipx

nodefaultroute

proxyarp

noktune

logfile /var/log/pppd.log

9、设置密码文件/etc/ppp/pap-secrets (先实现文本文件密码认证)

wys * 123456 *

10、启动pppoe拨入服务:

vi /root/1.txt

加入

192.168.1.250-254

/usr/local/sbin/pppoe-server -k -I eth1 -p /root/1.txt

* -k 使用PPP的kernel mode

* -I eth1 启动pppoe拨号接入的网卡设备

* -p 1.txt 只允许分配192.168.1.250-254的ip地址

11、启动IP转发,使客户端可以通过pppoe服务器访问外网。

echo 1 > /proc/sys/net/ipv4/ip_forward

启动之后就可以使用PPPOE拨号接入了。

客户端可以采用win2000+raspppoe或者WinXP自带的pppoe.

如果拨号之后无法访问拨号服务器,那就把客户端的PPP设置里面的启用软件压缩去掉,即可。

12、安装mysql

groupadd mysql

useradd -g mysql mysql

gunzip < mysql-5.0.24a.tar.gz | tar -xvf -

cd mysql-5.0.24a

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors

-fno-exceptions -fno-rtti" ./configure

--prefix=/usr/local/mysql --enable-assembler

--with-mysqld-ldflags=-all-static

--enable-thread-safe-client (freeradius要使用libmysqlclient_r.so的库)

make

make install

cp support-files/my-medium.cnf /etc/my.cnf

cd /usr/local/mysql

bin/mysql_install_db --user=mysql

chown -R root .

chown -R mysql var

chgrp -R mysql .

bin/mysqld_safe --user=mysql &

bin/mysqladmin -u root password 'yourpassword'

mysql/bin/mysql -u root -p

mysql>GRANT ALL PRIVILEGES ON *.* TO root@yourmanageIP IDENTIFIED by 'yourpassword' WITH GRANT OPTION;

(在windows下用mysql-cc管理mysql,删除多余用户和库)

mysql>quit;

13、把freeradius安装一下;

freeradius是个很周到的东西,考虑到了n多种后台,什么oracle,mssql, ldap,mysql都支持.

tar xvjf freeradius-1.1.3.tar.gz

cd freeradius-1.1.3

./configure --prefix=/usr/local/freeradius

make

make install

有一点要说明,freeradius需要openssl 库,所以如果系统里没安装的话,还是要事先安装一下的。

14、配置freeradius;

1) 修改 /usr/local/freeradius/etc/raddb/clients.conf

client 127.0.0.1 {

secret = 123456

shortname = localhost

nastype = other

}

这里secret = 123456 表示从127.0.0.1这个nas连接radius服务所需要用的密码。

2) 修改 /usr/local/freeradius/etc/raddb/naslist ,加入:

localhost local portslave

3) 编辑 /usr/local/freeradius/etc/raddb/users ,加入用户: (这个用户是保存在文本文件里的,做测试用)

wys Auth-Type:=local,User-Password==123456,

Service-Type = Framed-User,

Framed-Protocol = PPP

4) 启动radiusd,测试radiusd服务:

/usr/local/freeradius/sbin/radiusd -X

/usr/local/freeradius/bin/radtest wys 123456 localhost 0 123456

如果有类似 Access-Accept的字样出现,则表示radius开始工作了。下一步就是要培植radiusd用mysql

5) 先在mysql里面创建数据库;

/usr/local/mysql/bin/mysqladmin -u root -p create radius

/usr/local/mysql/bin/mysql -u root -p radius < freeradius-1.1.3/doc/examples/mysql.sql

6) 编辑 /usr/local/freeradius/etc/raddb/radiusd.conf 使其支持mysql认证;

authorize {

preprocess

chap

mschap

suffix

sql

...

}

accounting {

...

#radutmp (因为我要使用Simultaneous-Use:=1(同一用户一次只能登陆一台机器),用它在radiusd意外结束会有问题,所以禁用)

sql

...

}

session {

#radutmp (同上)

sql

}

7) 编辑 /usr/local/freeradius/etc/raddb/sql.conf,使radius可以访问mysql

sql {

driver = "rlm_sql_mysql"

server = "localhost"

login = "root"

password = "mysql的密码"

radius_db = "radius"

//剩下的配置就默认吧 (如果您要做用户帐号/网卡MAC/电话号码绑定之类的东西,那就例外,可以改下面的配置)

}

8) 向数据库里增加一些数据;

/usr/local/mysql/bin/mysql -u root -p radius

先加入一些组信息:

insert into radgroupreply (groupname,attribute,op,value) values ('user','Auth-Type',':=','Local');

insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type','=','Framed-User');

insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-Protocol','=','ppp');

insert into radgroupcheck (groupname, attribute, op, value) values ('user', 'Auth-Type', ':=', 'Crypt-Local');

insert into radgroupcheck (groupname, attribute, op, value) values ('user', 'Simultaneous-Use', ':=', '1');

因为用户密码是加密的,所以有Crypt-Local.

然后加入用户信息:

insert into radcheck (username,attribute,op,value) values ('wys','Crypt-Password','==','用户加密密码');

然后把用户加到组里:

insert into usergroup(username,groupname) values('wys','user');

9) 为了让radius能正确地调用mysql,还要指定一下库的位置:

echo /usr/local/freeradius/lib > /etc/ld.so.conf

ldconfig

10) 启动radiusd , 做一下测试:

/usr/local/freeradius/sbin/radiusd -X

/usr/local/freeradius/bin/radtest wys 用户密码 localhost 0 123456

看到 Access-Accept 之类的字样就表示OK了。 这时可以正式启动radiusd

/usr/local/freeradius/sbin/radiusd -X &

15、配置pppd,使其和radius一起工作;

1) 建立一个 /etc/ppp/radius 目录,用来存放radius的配置,然后把ppp-2.4.3里面的radius相关配置复制过来:

mkdir /etc/ppp/radiuds

cd ppp-2.4.4/pppd/plugins/radius/etc

cp * /etc/ppp/radius

2) 编辑 /etc/ppp/options, 加上radius 支持

plugin /etc/ppp/plugins/radius.so // 注意pppd安装时候radius.so的位置

radius-config-file /etc/ppp/radius/radiusclient.conf

3) 编辑 /etc/ppp/radius/radiusclient.conf 文件,如下:(主要是修改一些默认的文件路径,其他没什么要改的)

auth_order radius

login_tries 4

login_timeout 60

nologin /sbin/nologin

issue /etc/ppp/radius/issue

authserver localhost:1812

acctserver localhost:1813

servers /etc/ppp/radius/servers

dictionary /etc/ppp/radius/dictionary

login_radius /usr/local/sbin/login.radius

seqfile /var/run/radius.seq

mapfile /etc/ppp/radius/port-id-map

default_realm

radius_timeout 10

radius_retries 3

login_local /bin/login

4) 编辑 /etc/ppp/radius/servers ,设定radius 服务器的位置

localhost 123456 // 这里的123456是我前面设置的nas(localhost)访问radius服务器的密码

5) 编辑/etc/ppp/radius/dictionary ,修改一些路径设置,主要是最后一个dictionary.microsoft 的路径设置

..

...

INCLUDE /etc/ppp/radius/dictionary.microsoft

6) 可以拨号看看了,用数据库里面的帐号登录看看,应该是能登录了。所有的登录记录,都会保存在mysql的radacct表里面.

15、vlan及网络接口配置

1) /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

ONBOOT=yes

BOOTPROTO=static

IPADDR=192.168.1.2

NETMASK=255.255.255.0

GATEWAY=192.168.1.1

2) /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

ONBOOT=yes

3)/etc/sysconfig/network-scripts/ifcfg-eth1.2 (定义vlan 2,vlan定义从2开始,详见man vconfig)

DEVICE=eth1.2

ONBOOT=yes

VLAN=yes

其它vlan定义类似.

4)定义eth1连接的switch1的接口

switchport trunk encapsulation dot1q

5)定义switch上的vlan,并将端口分配给各个vlan.

如:

int f0/48

switchport access vlan 2

分配f0/48口给vlan 2.

15、未描述的工作:

PPPOE测试完成后,清除/etc/ppp/pap-secrets中的内容

Radius测试完成后,清除/usr/local/freeradius/etc/raddb/users中的内容

尝试在一块网卡上实现所有功能,但连接后最大ping包为1446,网络访问有问题.

正常使用时,修改/etc/sysctl.conf

net.ipv4.ip_forward =1

修改/etc/rc.local,加入

/usr/local/mysql/bin/mysqld_safe --user=mysql &

sleep 10

/usr/local/freeradius/sbin/radiusd -X &

sleep 10

/usr/local/sbin/pppoe-server -k -I eth1.2 -p /etc/ppp/radius/vlan2.txt

...

/usr/local/sbin/pppoe-server -k -I eth1.38 -p /etc/ppp/radius/vlan38.txt

...

生成/etc/ppp/radius/vlan2.txt等vlan ip分配文件.内容如下

192.168.2.1-254

修改switch1的普通端口,使端口之间不能互访。

如:

int f0/48

switchport mode protect

从http://www.intel.com 下载e1000驱动,编译安装.

16、其它

尚需加入802.1x支持,主要在设备端配置.尚需完成以radius为中心的统一认证平台(对内).还可以构建vpn,路由上或本机.

17.补充事项:

1)pppd-2.4.4本身支持eap,但不支持eap-tls相关补丁为http://eaptls.spe.net/download/ppp-2.4.3-eaptls-0.7.patch,插件radius只支持pap,chap,mschap几种认证方式,没有eap相关补丁.所以对于pppoe+eap-ttls+radius的认证方式(用户密码为md5或des加密的情况)只能自己写相关代码或等待了.

2)radius+eap-ttls方式的实现需要客户端安装SecureW2(http://www.securew2.com/uk/download/SecureW2_312.zip).

3)freeradius有一些内部attribute,有兴趣可以研究一下.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有