Linux 下架设 PPTP VPN服务器
1.1
所需软件及下载地址1.1.1
-----------------------------------------------------最稳定的linux
1.1.2
------------------------------------------2.6.19内核
1.1.3
--------------内核的mppe-mppc补丁
1.1.4
---------------------------------------------PPP主程序
1.1.5
------------------ppp的mppe-mppc补丁
1.1.6
-----------------------------------------PPTP-VPN主程序
1.1.7
-----------------------------------------问题解决
1.2
实现过程及功能特性首先编译内核,以加入对mppe和mppc的支持,然后架设PPTP VPN服务器,实现终结用户VPN拨号的功能。
linux服务器IP地址:192.168.1.251
windows客户IP地址:192.168.1.55
2
编译内核2.1.1
MPPE:MicrosoftPoint-to-Point Encryption,微软的点对点加密协议,可以对在点对点链路上传输的数据包进行加密,详细介绍请见RFC3078和RFC3079。
MPPC:MicrosoftPoint-to-Point Compression,微软的点对点压缩协议,可以对在点对点链路上传输的数据包进行压缩,详细介绍请见RFC21189。
我们需要编译内核及PPP,从而使它们都能够支持MPPE和MPPC。
2.1.2
DO
Remember that : use IE brower "Save as.." to download kernel patch!
安装CentOS5.2时采用自定义软件,然后选中“based”并取消其它全部选定,进行基本安装。安装完成进入系统,首先安装GCC。
[root@mm CentOS]#rpm -ivhU kernel-headers-2.6.18-92.el5.i386.rpm
[root@mm CentOS]#rpm -ivhU glibc-headers-2.5-24.i386.rpm
[root@mm CentOS]#rpm -ivhU glibc-devel-2.5-24.i386.rpm
[root@mm CentOS]#rpm -ivhU libgomp-4.1.2-42.el5.i386.rpm
[root@mm CentOS]# rpm -ivhUcpp-4.1.2-42.el5.i386.rpm
[root@mm CentOS]#rpm -ivhU gcc-4.1.2-42.el5.i386.rpm
查看一下:
[root@mm CentOS]#gcc -v
Using built-inspecs.
Target:i386-redhat-linux
Thread model:posix
gcc version 4.1.220071124 (Red Hat 4.1.2-42)
再查看当前内核版本:
[root@mm CentOS]#uname -r
2.6.18-92.el5
还需要安装如下RPM包,这个包是在#makemenuconfig 时必需的,否则报错:
[root@mm CentOS]#rpm -ivhU ncurses-devel-5.5-24.20060715.i386.rpm
2.1.3
下面开始编译内核:
[root@mm kernel]#tar zxvf linux-2.6.19.tar.gz
[root@mm kernel]#ln -s /home/kernel/linux-2.6.19 /usr/src/linux
[root@mm kernel]#cd /usr/src/linux/
下面的命令给内核打补丁
[root@mm linux]#bzcat /home/kernel/linux-2.6.19-mppe-mppc-1.3.patch.bz2 | patch -p1
还需要修改如下,否则编译时出错:
[root@mm linux]#vi scripts/kconfig/mconf.c
将static struct menu*current_menu;这 一行注释掉,
并添加struct menu*current_menu;如下:
//static structmenu *current_menu;
struct menu*current_menu;
把以前的配置文件拷贝到当前内核目录,以继承原有配置:
[root@mm linux]#cp /boot/config-2.6.18-92.el5 ./.config
[root@mm linux]#make mrproper
@@@删除不必要的文件和目录,初次编译内核不需要
[root@mm linux]#make clean
@@@删除不必要的模块和文件
[root@mm linux]#make menuconfig
@@@基于文本选单的配置界面,字符终端下推荐使用
选择相应的配置时,有三种选择,它们分别代表的含义 如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
1.Go to“Load an Alternate Configuration File” and choose “.config”
2.Go to “General setup” select “Local version …” and input “-default”
3.Go to “DeviceDrivers
--->”
“Network device support
--->”
然后以模块形式选中如下两项:
<M>
PPP BSD-Compress compression
<M>
Microsoft PPP compression/encryption(MPPC/MPPE)
然后保存退出内核配置模式。
[root@mm linux]#make dep
@@@链接程序代码和函数库
[root@mm linux]#make bzImage
@@@开始编译系统内核,此步大约需要25分钟
[root@mm linux]#make modules
@@@开始编译外挂模块,此步大约需要1个小时
[root@mm linux]#make modules_install@@@安装编译完成的模块
[root@mm linux]#make install
@@@将刚才编译完成的内核安装到系统里面
编译内核完成后,用新内核启动,然后进入系统,查看如下:
[root@mm pppoe]#modprobe -l | grep mppe
/lib/modules/2.6.19-default/kernel/drivers/net/ppp_mppe_mppc.ko
可以看到ppp_mppe_mppc.ko模块已经被编译了。
#lsmod 却看不到ppp_mppe_mppc,说明该模块还 没有被内核挂载,我们手动挂载:
#modprobe ppp_mppe_mppc
再次用#lsmod查看 ,已经成功被内核挂载了
只有当ppp_mppe_mppc模块被挂载到内核以后,PPPOE服务器才能够支持mppc、mppe(压缩及加密功能)。
将模块添加为自启动:
因为我们是以模块方式来安装补丁的,所以每次系统启 动时都需要加载模块才行,因此我们要在/etc/rc.d/rc.local里面写入一行:
/sbin/modprobe ppp_mppe_mppc
3 架设PPTP-VPN服务器3.1查看是否有/dev/ppp 设备文件,这是ppp拨号所必需的。若没有则如下创建一个:
# mknod --mode=664/dev/ppp c 108 0
3.2确保 /etc/modules.conf 里面有如下几 行: aliaschar-major-108 ppp_generic
alias tty-ldisc-3ppp_async
alias tty-ldisc-13n_hdlc
alias tty-ldisc-14ppp_synctty
alias net-pf-24pppoe
alias ppp-compress-18ppp_mppe_mppc
3.3安装 ppp-2.4.3.tar.gz
解压缩之后,打上ppp-2.4.3-mppe-mppc-1.1.patch.gz补丁,然后编译安装:
# tar zxvfphp-2.4.3.tar.gz
# patch -p0 -ippp-2.4.3-mppe-mppc-1.1.patch.gz
# cd ppp-2.4.3
# ./configure --prefix=/usr/local/ppp
# make
# make install
# cp/usr/local/ppp/sbin/pppd /usr/sbin/pppd
3.4安装pptpd
# tar zxvfpptpd-1.3.4.tar.gz
# cd pptpd-1.3.4
# ./configure
# make
# make install
3.5 配置文件:将pptpd-1.3.4/samples/下的文件
pptpd.conf 拷贝至/etc下
chap-secrets 拷贝至/etc/ppp下
options.pptpd 拷贝至/etc/ppp下
3.5.1 配置文件/etc/pptpd.conf
它是Poptop的配置文件
# cp
/home/pptp-vpn/pptpd-1.3.4/samples/pptpd.conf /etc/pptpd.conf
#vi
/etc/pptpd.conf
内容修改如下:
ppp /usr/sbin/pppd
option/etc/ppp/options.pptpd
debug
Logwtmp
localip
192.168.1.251
//实际的VPN服务器该IP地址总为一个公网地址,除非采用了NAT
remoteip172.17.0.1-254
netmask255.255.255.0
//指定子网掩码,不 过我配置上好像没作用,仍然是32位掩码
3.5.2 配置文件/etc/ppp/options.pptpd,它是Poptop的选项文件
# cp/home/pptp-vpn/pptpd-1.3.4/samples/options.pptpd /etc/ppp/options.pptpd
# vi /etc/ppp/options.pptpd
内容修改如下:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
mppe required
#require-mppe-128
ms-dns 10.0.0.1
ms-dns 10.0.0.2
proxyarp
lock
# DisableBSD-Compress compression
#nobsdcomp
nologfd
3.5.3 配置文件/etc/ppp/chap-secrets它 是Poptop的账号、密码文件
#vi
/etc/ppp/chap-secrets
如下添加用户:
# Secrets forauthentication using CHAP
# client
server
secret
IP addresses
test1
*
test1
*
pptptest1
pptpd
pptptest1
10.10.20.55
pptptest2
pptpd
pptptest2
*
其中IP地址这一列,我们可以为特定用户手工指定特定IP。
如果没有指定,为“*”,那么PPTP VPN服务器从/etc/pptp.conf文件中我们设定的remoteip中选择一个分配给客户端。
3.6 开启IP转发并挂载pptp服务所需的相应内核模块#echo
1
>/proc/sys/net/ipv4/ip_forward
#/sbin/depmod -a
#/sbin/modprobeip_tables
#/sbin/modprobeiptable_nat
#/sbin/modprobeipt_LOG
【知识】
depmod 命令用来创建模块依赖关系的列表
这个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行 了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;
# depmod -a 注:为所有列在/etc/modprobe.conf或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件;3WiLinux联盟
# depmod -e 注:列出已挂载但不可用的模块;3WiLinux联盟
# depmod -n 注:列出所有模块的依赖关系
3.7 启动pptpd服务#/usr/local/sbin/pptpd
连接过程如下:
上图中我们可以看到该VPN连接采用了MPPE-128加密,MPPC压缩。
下面的连接是pptptest1,获得的IP是我们事先设定好的:
下面的连接是pptptest2,获得的IP是从地址池中获得的:
【问题】1,
我在启动服务后发现不能连接VPN服务器,出错信息如下:
#cat /var/log/messeges
Dec 16 01:17:12 mmpptpd[6259]: MGR: Manager process started
Dec 16 01:17:12 mmpptpd[6259]: MGR: Maximum of 100 connections available
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Client 192.168.1.55 control connection started
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Starting call (launching pppd, opening GRE)
Dec 16 01:17:16 mm pppd[6261]:/usr/lib/pptpd/pptpd-logwtmp.so: cannot open shared object file: No such fileor directory
Dec 16 01:17:16 mmpppd[6261]: Couldn't load plugin /usr/lib/pptpd/pptpd-logwtmp.so
Dec1601:17:16mm pptpd[6260]: GRE:read(fd=6,buffer=8058f40,len=8196) from PTY failed:status = -1 error =Input/output error, usually caused by unexpected termination of pppd, checkoption syntax and pppd logs
Dec 16 01:17:16 mmpptpd[6260]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Client 192.168.1.55 control connection finished
提示缺少pptpd-logwtmp.so文件,我们按照提示复制 到相关目录即可:
# mkdir /usr/lib/pptpd
# cp/home/pptp/pptpd-1.3.4/plugins/pptpd-logwtmp.so /usr/lib/pptpd/pptpd-logwtmp.so
再次连接,即可正常连接PPTP VPNServer。
所需软件及下载地址1.1.1
-----------------------------------------------------最稳定的linux
1.1.2
------------------------------------------2.6.19内核
1.1.3
--------------内核的mppe-mppc补丁
1.1.4
---------------------------------------------PPP主程序
1.1.5
------------------ppp的mppe-mppc补丁
1.1.6
-----------------------------------------PPTP-VPN主程序
1.1.7
-----------------------------------------问题解决
1.2
实现过程及功能特性首先编译内核,以加入对mppe和mppc的支持,然后架设PPTP VPN服务器,实现终结用户VPN拨号的功能。
linux服务器IP地址:192.168.1.251
windows客户IP地址:192.168.1.55
2
编译内核2.1.1
MPPE:MicrosoftPoint-to-Point Encryption,微软的点对点加密协议,可以对在点对点链路上传输的数据包进行加密,详细介绍请见RFC3078和RFC3079。
MPPC:MicrosoftPoint-to-Point Compression,微软的点对点压缩协议,可以对在点对点链路上传输的数据包进行压缩,详细介绍请见RFC21189。
我们需要编译内核及PPP,从而使它们都能够支持MPPE和MPPC。
2.1.2
DO
Remember that : use IE brower "Save as.." to download kernel patch!
安装CentOS5.2时采用自定义软件,然后选中“based”并取消其它全部选定,进行基本安装。安装完成进入系统,首先安装GCC。
[root@mm CentOS]#rpm -ivhU kernel-headers-2.6.18-92.el5.i386.rpm
[root@mm CentOS]#rpm -ivhU glibc-headers-2.5-24.i386.rpm
[root@mm CentOS]#rpm -ivhU glibc-devel-2.5-24.i386.rpm
[root@mm CentOS]#rpm -ivhU libgomp-4.1.2-42.el5.i386.rpm
[root@mm CentOS]# rpm -ivhUcpp-4.1.2-42.el5.i386.rpm
[root@mm CentOS]#rpm -ivhU gcc-4.1.2-42.el5.i386.rpm
查看一下:
[root@mm CentOS]#gcc -v
Using built-inspecs.
Target:i386-redhat-linux
Thread model:posix
gcc version 4.1.220071124 (Red Hat 4.1.2-42)
再查看当前内核版本:
[root@mm CentOS]#uname -r
2.6.18-92.el5
还需要安装如下RPM包,这个包是在#makemenuconfig 时必需的,否则报错:
[root@mm CentOS]#rpm -ivhU ncurses-devel-5.5-24.20060715.i386.rpm
2.1.3
下面开始编译内核:
[root@mm kernel]#tar zxvf linux-2.6.19.tar.gz
[root@mm kernel]#ln -s /home/kernel/linux-2.6.19 /usr/src/linux
[root@mm kernel]#cd /usr/src/linux/
下面的命令给内核打补丁
[root@mm linux]#bzcat /home/kernel/linux-2.6.19-mppe-mppc-1.3.patch.bz2 | patch -p1
还需要修改如下,否则编译时出错:
[root@mm linux]#vi scripts/kconfig/mconf.c
将static struct menu*current_menu;这 一行注释掉,
并添加struct menu*current_menu;如下:
//static structmenu *current_menu;
struct menu*current_menu;
把以前的配置文件拷贝到当前内核目录,以继承原有配置:
[root@mm linux]#cp /boot/config-2.6.18-92.el5 ./.config
[root@mm linux]#make mrproper
@@@删除不必要的文件和目录,初次编译内核不需要
[root@mm linux]#make clean
@@@删除不必要的模块和文件
[root@mm linux]#make menuconfig
@@@基于文本选单的配置界面,字符终端下推荐使用
选择相应的配置时,有三种选择,它们分别代表的含义 如下:
Y--将该功能编译进内核
N--不将该功能编译进内核
M--将该功能编译成可以在需要时动态插入到内核中的模块
1.Go to“Load an Alternate Configuration File” and choose “.config”
2.Go to “General setup” select “Local version …” and input “-default”
3.Go to “DeviceDrivers
--->”
“Network device support
--->”
然后以模块形式选中如下两项:
<M>
PPP BSD-Compress compression
<M>
Microsoft PPP compression/encryption(MPPC/MPPE)
然后保存退出内核配置模式。
[root@mm linux]#make dep
@@@链接程序代码和函数库
[root@mm linux]#make bzImage
@@@开始编译系统内核,此步大约需要25分钟
[root@mm linux]#make modules
@@@开始编译外挂模块,此步大约需要1个小时
[root@mm linux]#make modules_install@@@安装编译完成的模块
[root@mm linux]#make install
@@@将刚才编译完成的内核安装到系统里面
编译内核完成后,用新内核启动,然后进入系统,查看如下:
[root@mm pppoe]#modprobe -l | grep mppe
/lib/modules/2.6.19-default/kernel/drivers/net/ppp_mppe_mppc.ko
可以看到ppp_mppe_mppc.ko模块已经被编译了。
#lsmod 却看不到ppp_mppe_mppc,说明该模块还 没有被内核挂载,我们手动挂载:
#modprobe ppp_mppe_mppc
再次用#lsmod查看 ,已经成功被内核挂载了
只有当ppp_mppe_mppc模块被挂载到内核以后,PPPOE服务器才能够支持mppc、mppe(压缩及加密功能)。
将模块添加为自启动:
因为我们是以模块方式来安装补丁的,所以每次系统启 动时都需要加载模块才行,因此我们要在/etc/rc.d/rc.local里面写入一行:
/sbin/modprobe ppp_mppe_mppc
3 架设PPTP-VPN服务器3.1查看是否有/dev/ppp 设备文件,这是ppp拨号所必需的。若没有则如下创建一个:
# mknod --mode=664/dev/ppp c 108 0
3.2确保 /etc/modules.conf 里面有如下几 行: aliaschar-major-108 ppp_generic
alias tty-ldisc-3ppp_async
alias tty-ldisc-13n_hdlc
alias tty-ldisc-14ppp_synctty
alias net-pf-24pppoe
alias ppp-compress-18ppp_mppe_mppc
3.3安装 ppp-2.4.3.tar.gz
解压缩之后,打上ppp-2.4.3-mppe-mppc-1.1.patch.gz补丁,然后编译安装:
# tar zxvfphp-2.4.3.tar.gz
# patch -p0 -ippp-2.4.3-mppe-mppc-1.1.patch.gz
# cd ppp-2.4.3
# ./configure --prefix=/usr/local/ppp
# make
# make install
# cp/usr/local/ppp/sbin/pppd /usr/sbin/pppd
3.4安装pptpd
# tar zxvfpptpd-1.3.4.tar.gz
# cd pptpd-1.3.4
# ./configure
# make
# make install
3.5 配置文件:将pptpd-1.3.4/samples/下的文件
pptpd.conf 拷贝至/etc下
chap-secrets 拷贝至/etc/ppp下
options.pptpd 拷贝至/etc/ppp下
3.5.1 配置文件/etc/pptpd.conf
它是Poptop的配置文件
# cp
/home/pptp-vpn/pptpd-1.3.4/samples/pptpd.conf /etc/pptpd.conf
#vi
/etc/pptpd.conf
内容修改如下:
ppp /usr/sbin/pppd
option/etc/ppp/options.pptpd
debug
Logwtmp
localip
192.168.1.251
//实际的VPN服务器该IP地址总为一个公网地址,除非采用了NAT
remoteip172.17.0.1-254
netmask255.255.255.0
//指定子网掩码,不 过我配置上好像没作用,仍然是32位掩码
3.5.2 配置文件/etc/ppp/options.pptpd,它是Poptop的选项文件
# cp/home/pptp-vpn/pptpd-1.3.4/samples/options.pptpd /etc/ppp/options.pptpd
# vi /etc/ppp/options.pptpd
内容修改如下:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
mppe required
#require-mppe-128
ms-dns 10.0.0.1
ms-dns 10.0.0.2
proxyarp
lock
# DisableBSD-Compress compression
#nobsdcomp
nologfd
3.5.3 配置文件/etc/ppp/chap-secrets它 是Poptop的账号、密码文件
#vi
/etc/ppp/chap-secrets
如下添加用户:
# Secrets forauthentication using CHAP
# client
server
secret
IP addresses
test1
*
test1
*
pptptest1
pptpd
pptptest1
10.10.20.55
pptptest2
pptpd
pptptest2
*
其中IP地址这一列,我们可以为特定用户手工指定特定IP。
如果没有指定,为“*”,那么PPTP VPN服务器从/etc/pptp.conf文件中我们设定的remoteip中选择一个分配给客户端。
3.6 开启IP转发并挂载pptp服务所需的相应内核模块#echo
1
>/proc/sys/net/ipv4/ip_forward
#/sbin/depmod -a
#/sbin/modprobeip_tables
#/sbin/modprobeiptable_nat
#/sbin/modprobeipt_LOG
【知识】
depmod 命令用来创建模块依赖关系的列表
这个模块管理工具是创建模块依赖关系的列表,有几个参数我们注意一下就行了,目前的Linux 发行版所用的内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行 了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是udev ,在内核中有,但目前不太稳定;另一种办法是用usb-storage驱动,而usb-storage 依赖的模块是scsi 模块,所以我们要用usb-storage 的模块,也得把scsi 编译安装;
# depmod -a 注:为所有列在/etc/modprobe.conf或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件;3WiLinux联盟
# depmod -e 注:列出已挂载但不可用的模块;3WiLinux联盟
# depmod -n 注:列出所有模块的依赖关系
3.7 启动pptpd服务#/usr/local/sbin/pptpd
连接过程如下:
上图中我们可以看到该VPN连接采用了MPPE-128加密,MPPC压缩。
下面的连接是pptptest1,获得的IP是我们事先设定好的:
下面的连接是pptptest2,获得的IP是从地址池中获得的:
【问题】1,
我在启动服务后发现不能连接VPN服务器,出错信息如下:
#cat /var/log/messeges
Dec 16 01:17:12 mmpptpd[6259]: MGR: Manager process started
Dec 16 01:17:12 mmpptpd[6259]: MGR: Maximum of 100 connections available
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Client 192.168.1.55 control connection started
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Starting call (launching pppd, opening GRE)
Dec 16 01:17:16 mm pppd[6261]:/usr/lib/pptpd/pptpd-logwtmp.so: cannot open shared object file: No such fileor directory
Dec 16 01:17:16 mmpppd[6261]: Couldn't load plugin /usr/lib/pptpd/pptpd-logwtmp.so
Dec1601:17:16mm pptpd[6260]: GRE:read(fd=6,buffer=8058f40,len=8196) from PTY failed:status = -1 error =Input/output error, usually caused by unexpected termination of pppd, checkoption syntax and pppd logs
Dec 16 01:17:16 mmpptpd[6260]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Dec 16 01:17:16 mmpptpd[6260]: CTRL: Client 192.168.1.55 control connection finished
提示缺少pptpd-logwtmp.so文件,我们按照提示复制 到相关目录即可:
# mkdir /usr/lib/pptpd
# cp/home/pptp/pptpd-1.3.4/plugins/pptpd-logwtmp.so /usr/lib/pptpd/pptpd-logwtmp.so
再次连接,即可正常连接PPTP VPNServer。
顶(0)
踩(0)
- 最新评论
