 在Linux下建立PPPOE服务器的步骤
- j; ?6 P( m$ H; `建立环境:' E' J3 S3 b" ^2 ?( v1 T
操作系统:DEBIAN 2.2 升级到3.0" z( ? `% t" ~5 P1 `( b- S% Z
内 核:2.4.18
# t$ V( l) K8 o3 p硬件环境:赛扬3 1.1G ,内存 128M ,硬盘 40G ,主板芯片组 694T
7 c6 s5 w$ M2 X; ~0 }显 卡:ATI RAGE IIC(4M)
7 P7 I- E0 t8 q, g# n5 i+ APPPOE服务器:RP-PPPOE 3.4.14 U8 q) E1 o1 I1 M
RADIUS服务器:FREERADIUS 0.8
; k, p' J! j; Z数 据 库: MYSQL 3.23.56
?) E% q0 Q6 I/ n& k" W3 MPPPOE服务器认证的建立分三种认证方式,第一种方式为用RP-PPPOE自带的基于文本认证方式,第二种方式为建立在RADIUS认证服务器上的文本认证方式,第三种方式是基于MYSQL的数据库认证方式* s4 d2 c, j# v7 s8 K% a8 G7 W
一、编译内核
- |3 x6 T# }) G0 G. |9 }: w/ L0 X要建立PPPOE服务器,除了内核要支持PPP以外还需要内核支持PPPOE,不过在2.4.18里需要打开内核的不成熟代码才可以选择,内核的配置如下:
/ k9 c* I, v" D# n3 Kcode maturity level options——> prompt for development and/or incomplete code/drivers9 t: a: o4 i1 m- V8 z- n( M
networking options——> packet socket packet socket:mmapped io
2 r8 [ {+ k: ~5 P1 lnetwork device support——> ppp (point-to-point protocol) support ppp multilink support (experimental) ppp filtering ppp support for async serial ports ppp support for sync tty ports ppp deflate compression ppp bsd-compress compression ppp over Ethernet (experimental)
. C* O# Q7 Z8 ccharacter devices——> non-standard serial port support hdlc line discipline support/ W) r/ i8 B- _. j8 P
编辑/etc/modules.conf(redhat好象是conf.modules),如果没有就加入以下几行:& o/ G. J* N1 X& J
• alias char-major-108 ppp_generic
& q% o, v0 x6 v7 l1 p• alias /dev/ppp ppp_generic
" p1 V( J: `! i' o• alias tty-ldisc-3 ppp_async; M9 t% Z* z; t" P/ i& P2 [
• alias tty-ldisc-13 n_hdlc( S3 Q: i% G$ c# v4 ^( L/ x
• alias tty-ldisc-14 ppp_synctty
$ d* @* F# y* `* M. H# d$ [• alias ppp-compress-21 bsd_comp
$ |$ f7 J( S$ p$ p" [% w• alias ppp-compress-24 ppp_deflate
7 l# D+ G& I) Y5 ]7 G! D: g: ?8 c1 O• alias ppp-compress-26 ppp_deflate
9 m" M2 g1 t l! h- S完成以后就可以下一步,建立PPPOE拨号服务器了
( B9 P. w1 i8 a二、建立PPPOE服务器
' q- g$ Y* b3 y( K在建立拨号服务器之前,应确保你在内核中打开了IP转发功能:/ e2 N, x" W9 I- m, N1 N7 E: f. |
echo “1”>/proc/sys/net/ipv4/ip_forward! W U* V- i/ B0 A: b
编译PPPOE服务器很容易,就是按以下几步就可以了:
; K! z# J# A5 T6 L•使用configure
; r1 p0 B% ]' Q& m% T•使用make编译PPPD,这里有几个参数比较重要,要支持windows的客户端,应该在编译时加上选项USE_MS_DNS=1,如果你的系统shadow的话,你应该使用make HAS—SHADOW=1表示支持shadow密码
9 w! J+ e" y' D•编译完成后,将生成pppd、pppdump、chat和pppstats这几个文件,使用make install安装这些文件
" G/ ~& Z, i3 k5 o& v" y/ U•修改pppd的访问权限,允许由root启动服务进程 8 B' r c% q: c4 }! i7 y3 s
chmod u+s /usr/sbin/pppd+ ~4 K3 u4 f: h2 u B( [) S; A" |
三、建立PPPOE服务器
8 w- B# z! V' D1 a4 ^) qcd /rp-pppoe-3.4/src# T2 k% A) i' s7 j1 |. g
./configure
$ L8 o. o& L- \, f+ t8 j. rmake$ d; [: j: h- s# @" K
make install
0 v% s/ ?' ?( Z- x启动PPPOE进程:# T# \) Q2 @* {" f) H
pppoe-server –L 10.0.0.1 –R 10.0.0.2 –N 64 –k -u# O9 D' ^) n! k' Y. F! u, r
-L: 指定PPPOE服务器的IP地址
9 A" A! I. G. Y$ F; U9 \4 z-R: 指定PPPOE拨入服务器分配给客户端的IP地址段
# T# c* n: Y5 C: z# o5 z( ]-N: 允许客户端同时拨入的数量(默认是64 最大是65534)6 p2 ^2 Q8 H1 _9 D* o
-k: 使用内核方式(不过好象无法使用)' h' @7 j3 I3 L& T3 Z; D
修改/etc/ppp/options,查看有没有以下几行,没有就加进去:
}, c9 s* O( K+ u; s. F8 V2 llocal
- n% a0 G; m+ ?. g/ T) n# Trepaire-pap 4 o; ]' ~" R& Z8 i: }1 D2 h, b
login- w& u, ?* { j. M$ z4 Y
auth
- b( d' J9 t+ J: O; jdefaultroute
$ d' \/ Z! N3 x1 \hide-password7 F' |2 H( b- n t& y
ipcp-accept-local 5 U: u( B2 o2 j* n
ipcp-accept-remote - D& W, x% T. t; M' O4 G/ R/ e
10.0.0.1:10.0.0.255 / L3 t: M8 v& D; l7 ]
netmask 255.255.255.0
; \" H1 a" x' x2 B# [ms-dns 10.0.0.1
, ~9 U4 u6 L7 l) _9 x修改/etc/ppp/pppoe-server-options,将所有的行都注释掉! {! f4 b2 }3 a
添加用户到/etc/ppp/pap-secrets中,例如添加用户luo,密码为123456,允许从任何位置拨入:
e% G6 w1 A5 K#client server secret ip addresses t; I5 m$ T7 Q
luo * “123456” */ g! R' `3 Q, \+ s$ w: ?) U/ c
设置windows的用户名:luo 密码: 123456,如果连接成功就可以进行下一步. m) _9 ]) N2 z0 h, ` T
四、建立RADIUS认证服务器! A/ k$ Y$ K/ C: E8 I8 \
cd /freeradius-0.81
, k, I9 T3 m, g) u; j) b2 w! F./configure
# ~! I& l" L& \ m/ [& Y. V, T' \make$ A( _/ A6 O$ ^) l
make install
7 y X* r z# @ B2 I+ P2 Y" `编辑/usr/local/etc/raddb/clients,输入你的NAS(网络认证服务器)的IP地址和serect,本例中NAS为本机,serect为linux,看上去如下:
( d: Z2 r* ? B" j/ Q+ C" @localhost linux& K1 _: g3 Z2 l3 G
编辑/usr/local/etc/raddb/clients.conf,加入以下几行:
: y% p% E2 R5 j) Mclient 127.0.0.1{ ' X' W, m6 q6 F- C" h5 J
secret = linux
0 L2 ~# G# y5 G' H0 K6 G6 \shortname = localhost / L2 }2 W& n" Z! z$ Q s
}) T/ c2 d/ c. _$ F
nastype = other 5 f* F: T0 L2 H
编辑/usr/local/etc/raddb/naslist,加入:% @1 _6 u- ^4 P
localhost local
/ u B/ R( \; O& F1 {0 t f编辑/usr/local/etc/raddb/users,加入用户:luo、密码:123456,显示如下:
' W, A( t* Z o& aluo Auth-Type:=local, User-Password==“123456”- D7 i ~2 J! `* e6 Q
Service-Type:= Framed-User,
4 N: {9 }+ z0 q& lFramed-Protocol = PPP
& U) r$ x( A9 w6 l% T4 a& t6 |Framed-IP-Address := 10.0.0.2
% P* Y3 k2 @+ e1 E4 ?' l0 m, VFramed-IP-Netmask := 255.255.255.0 启动RADIUS服务、测试帐号' l# w/ F' J. f$ B) L- r
启动调试模式
& ^+ `' |6 \/ H# @ L, K; DRADIUS –X 6 A7 ?; E7 _& d- I; P# S( g6 W. B
进行帐号测试
5 A6 h& S7 k, k4 A+ JRadtest luo 123456 localhost 0 linux
; R& m$ O2 d: r, {如果能看到应答,说明RADIUS设置成功了6 U* f6 P5 v7 B& x) |1 H2 c# n
要使PPPD进程能够使用RADIUS进行认证,需要加入RADIUS认证的插件
; G( `: i' c# E" l9 @cp radius.so /usr/lib
: @/ I/ V2 i+ ~* J编辑/etc/ppp/options,加入以下到文件:
' b B; R# m. Q; @8 p0 F& Aplugin /usr/lib/radius.so: e2 e5 T- y( D+ m8 r7 z* z( [ U
radius-servers localhost:1812/1813 ; ], ^6 |; _/ D3 H" j, K/ M
radius-auth-key linux ( i2 ~/ t3 k \" X# {1 A
radius-ip-pool 10.0.0.2:10.0.0.255 # |* ~, o5 l& i, Z5 o
运行客户端进行登陆,如果能通过认证则成功了2 x" u) j4 z& U6 a) ?
五、建立MYSQL服务器, G O) a" P0 ^2 P1 E( i
tar zxvf mysql-3.23.56.tar.gz+ ~6 h& A* c, l5 Y. T: ^$ i
cd mysql-3.23.56$ w0 n9 V5 ]- ^( M; G1 U8 H1 r; O
./configure9 R6 R& j( C! L. |' o/ i
make" c5 d' X0 i+ w9 a: x
make install0 w" _- k; \7 s1 n' ?. ?
cd script
0 O M% q# W' O2 y8 O1 ~, y" w& R3 L./mysql_install_db
3 ?$ t$ } t; w7 {/usr/local/bin/safe_mysqld&
: Z& ?$ ]$ M5 K安装RADIUS数据库
% [9 I' G# X7 B; v# l: z4 Scd freeradius-0.81/src/modules/rlm_sql/drivers/rlm_sql_mysql
& D" I$ K5 M+ X% Z. \4 p% X7 d& wmysql –u root –p 密码 radius<db_mysql.sql3 ~8 y6 S3 j9 M+ H
编辑/usr/local/etc/raddb/radius.conf使其支持SQL,修改后如下:
" Q# |% B1 J- R! L, v: bauthorize{
: U4 E2 I0 b! s) }preprocess s2 L# S% o9 i) ^
chap; L+ t0 G l2 I) g* Q
mschap
2 ~% w6 \0 }, X1 B2 }2 i0 E6 _suffix
& j7 S- y X) K' S; E7 Fsql6 g5 \/ q/ p# G0 o( ]. q# v( {) X; J
}
9 M; _, C" Y5 x" s2 a! `* c% O; Gaccounting{
6 I( V" j! B6 R: D……1 h: Y7 L# P# m% P; j8 p
sql
6 O. Y! z( \. j6 S" ]! n3 E……3 p+ m! t! O7 O
}4 m' j4 F. {1 n
修改sql.conf,如下所示:
( u. L2 e: a8 ~0 S Hserver="loclahost" login="root" password="mysql的root的密码"" }% f- T4 ~, q* N2 a
C+ P" k7 j# q2 \. E+ e! g
加入组帐号
1 |8 n. n0 N5 j3 f, N k6 fmysql –u root –p 密码 radius
+ a6 P3 t1 X+ X% r% n) o: sinsert into radgroupreply (groupname,attribute,op,value) values (‘user’,’Auth-Tyep’,’:=’,’local’);: q8 W+ F* z5 t+ e# f* {
insert into radgroupreply (groupname,attribute,op,value) values (‘user’,’Service-Type’,’:=’,’Framed-User’);
* q) f) x7 e7 \& o" E% R Ninsert into radgroupreply (groupname,attribute,op,value) values# |+ ?# L! _1 x* Q
(‘user’,’Framed-IP-Netmask’,’:=’,’255.255.255.0’);
8 C+ J- w3 H0 r1 E4 ]#设定拨入用户的掩码,本例只有PPPOE服务,所以可以与options中设定相同8 U3 r B8 I& {" L3 a9 @; E
加入用户帐号:
/ ~; o, | T% e% V1 M9 d: Q7 vinsert into radcheck (username,attribute,op,value) values- \% K: H/ B! D) [
(‘luo’,’User-Password’,’:=’,’123456’);, g6 g! n0 b8 U$ W
将用户帐号加入组帐号 B) f& l' `& ?: ?8 B" l; k
insert into usergroup(username,groupname) values(‘luo’,’user’);
, M; u4 v( x# F, W: E6 J如果提示无法找到rlm_sql_mysql文件,则:; H0 J9 q% }# q3 i. d8 J! e
cp /usr/local/lib /usr/lib$ H2 {+ l) j( _5 ~- p/ Z# q
测试:2 `; w; G2 ?+ l* T
radtest luo 123456 localhost 0 linux
; D: n* k5 T" d" Z* \5 V! P见到应答就OK了! |