百度百科介绍vpn的作用:
VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。在传统的企业网络配置中,要进行远程访问,传统的方法是租用DDN(数字数据网)专线或帧中继,这样的通讯方案必然导致高昂的网络通讯和维护费用。对于移动用户(移动办公人员)与远端个人用户而言,一般会通过拨号线路(Internet)进入企业的局域网,但这样必然带来安全上的隐患。
让外地员工访问到内网资源,利用VPN的解决方法就是在内网中架设一台VPN服务器。外地员工在当地连上互联网后,通过互联网连接VPN服务器,然后通过VPN服务器进入企业内网。为了保证数据安全,VPN服务器和客户机之间的通讯数据都进行了加密处理。有了数据加密,就可以认为数据是在一条专用的数据链路上进行安全传输,就如同专门架设了一个专用网络一样,但实际上VPN使用的是互联网上的公用链路,因此VPN称为虚拟专用网络,其实质上就是利用加密技术在公网上封装出一个数据通讯隧道。有了VPN技术,用户无论是在外地出差还是在家中办公,只要能上互联网就能利用VPN访问内网资源,这就是VPN在企业中应用得如此广泛的原因。
下面是一个简单的拓扑图:
vpn工作原理
通常情况下,VPN网关采取双网卡结构,外网卡使用公网IP接入Internet。
1.网络一的终端A访问网络二的终端B,其发出的访问数据包的目标地址为终端B的内部IP地址。
网络一的VPN网关在接收到终端A发出的访问数据包时对其目标地址进行检查,如果目标地址属于网络二的地址,则将该数据包进行封装,封装的方式根据所采用的VPN技术不同而不同,同时VPN网关会构造一个新VPN数据包,并将封装后的原数据包作为VPN数据包的负载,VPN数据包的目标地址为网络二的VPN网关的外部地址。
2.网络一的VPN网关将VPN数据包发送到Internet,由于VPN数据包的目标地址是网络二的VPN网关的外部地址,所以该数据包将被Internet中的路由正确地发送到网络二的VPN网关。
3.网络二的VPN网关对接收到的数据包进行检查,如果发现该数据包是从网络一的VPN网关发出的,即可判定该数据包为VPN数据包,并对该数据包进行解包处理。解包的过程主要是先将VPN数据包的包头剥离,再将数据包反向处理还原成原始的数据包。
4.网络二的VPN网关将还原后的原始数据包发送至目标终端B,由于原始数据包的目标地址是终端B的IP,所以该数据包能够被正确地发送到终端B。在终端B看来,它收到的数据包就和从终端A直接发过来的一样。
5.从终端B返回终端A的数据包处理过程和上述过程一样,这样两个网络内的终端就可以相互通讯了。
通过上述说明可以发现,在VPN网关对数据包进行处理时,有两个参数对于VPN通讯十分重要:原始数据包的目标地址(VPN目标地址)和远程VPN网关地址。根据VPN目标地址,VPN网关能够判断对哪些数据包进行VPN处理,对于不需要处理的数据包通常情况下可直接转发到上级路由;远程VPN网关地址则指定了处理后的VPN数据包发送的目标地址,即VPN隧道的另一端VPN网关地址。由于网络通讯是双向的,在进行VPN通讯时,隧道两端的VPN网关都必须知道VPN目标地址和与此对应的远端VPN网关地址。
了解了VPN的作用及工作原理我们就进行一下Linux+pptpd+freeradius+mysql的配置
系统环境:RHEL6 x86_64 selinux and iptables disabled
网卡配置信息:
vm2(双网卡):eth0:192.168.1.10 或者vm2我们可以给它配置虚拟网卡 服务器
eth1:192.168.2.3
VM3(单网卡):eth0:192.168.1.11 客户端
软件下载:
安装和配置pptpd(点对点隧道协议)
[root@vm2 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
或者我们可以直接修改/etc/sysctl.conf这个配置文件
[root@vm2 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@vm2 ~]# sysctl -p 是配置立即生效
net.ipv4.ip_forward = 1
[root@vm2 ~]# yum install ppp -y
[root@vm2 mnt]# ls
pptpd-1.3.4-2.el6.x86_64.rpm
[root@vm2 mnt]# rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm
pptpd 的配置文件: /etc/pptpd.conf
[root@vm2 ~]# vim /etc/pptpd.conf
-
localip 192.168.1.10
-
remoteip 192.168.2.100-110
localip: pptpd server 所在服务器IP地址,可以设置为服务器上绑定的任意一个IP地址
remoteip:设置客户端连接到pptpd server后可供分配的IP地址范围
添加测试用户:
[root@vm2 ~]# vim /etc/ppp/chap-secrets
-
# Secrets for authentication using CHAP
-
# client server secret IP addresses
-
hy pptpd westos *
[root@vm2 ~]# /etc/init.d/pptpd start
Starting pptpd: [ OK ]
[root@vm2 ~]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1723 0.0.0.0:* LISTEN 1219/pptpd
接下来我们进行测试了
安装配置 freeradius
freeradius一般用来进行账户认证管理,记账管理,常见的电信运营商的宽带账户,上网账户管理,记账,都是使用的radius服务器进行鉴权记账的。
[root@vm2 mnt]# yum install freeradius -y
另外还需要安装freeradius-mysql、freeradius-utils这两个包,可以去网上找
[root@vm2 mnt]# yum localinstall freeradius-mysql-2.1.12-3.el6.x86_64.rpm freeradius-utils-2.1.12-3.el6.x86_64.rpm -y
[root@vm2 mnt]# tar zxf ppp-2.4.5.tar.gz
[root@vm2 mnt]# cd ppp-2.4.5
[root@vm2 ppp-2.4.5]# mkdir mkdir /etc/radiusclient
[root@vm2 ppp-2.4.5]# cp /mnt/ppp-2.4.5/pppd/plugins/radius/etc/* /etc/radiusclient/
[root@vm2 ppp-2.4.5]# cd /etc/radiusclient/
在 servers 文件中添加 radius 服务器的地址和密码
127.0.0.1 westos
修改 radiusclient.conf 文件中确保这个文件中所有与 radiusclient 相关的路径都是以/etc/radiusclient 开头的。
例如:
servers /usr/local/etc/radiusclient/servers
修改为:
servers /etc/radiusclient/servers
[root@vm2 radiusclient]# vim /etc/ppp/options.pptpd,
添加如下行:
plugin /usr/lib64/pppd/2.4.5/radius.so
[root@vm2 radiusclient]# cd /etc/raddb
[root@vm2 raddb]# vim clients.conf
client localhost {
ipaddr = 127.0.0.1
secret = westos (与/etc/radiusclient/servers 里设置的一致)
....
}
支持 mysql
[root@vm2 raddb]# vim radiusd.conf
$INCLUDE sql.conf #去掉注释
[root@vm2 raddb]# vim sites-available/default
-
authorize {
-
#files
-
sql
-
....
-
}
-
accounting {
-
#radutmp
-
sql
-
....
-
}
-
session{
-
#radutmp
-
sql
-
}
-
post-auth {
-
sql
-
}
[root@vm2 raddb]# vim sql.conf
-
sql {
-
database = “mysql“
-
driver = "rlm_sql_mysql"
-
server = "localhost"
-
login = "radius"
-
password = "radpass"
-
radius_db = "radius"
-
....
-
}
[root@vm2 raddb]# vim sql/mysql/dialup.conf 去掉如下行的注释:
simul_count_query = "SELECT COUNT(*) /
FROM ${acct_table1} /
WHERE username = '%{SQL-User-Name}' /
AND acctstoptime IS NULL"
安装和配置mysql
[root@vm2 raddb]# yum install mysql mysql-server -y
[root@vm2 raddb]# /etc/init.d/mysqld start
[root@vm2 raddb]# cd /etc/raddb/sql/mysql/
[root@vm2 mysql]# mysqladmin create radius
[root@vm2 mysql]# mysql radius < schema.sql
[root@vm2 mysql]# mysql radius < admin.sql
[root@vm2 mysql]# mysql
mysql> use radius;
mysql> insert into radgroupreply (groupname,attribute,op,value) values('user','Auth-Type',':=','Local');
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Service-Type',':=','Framed-User');
mysql> insert into radgroupreply (groupname,attribute,op,value) values('user','Framed-IP-Address',':=','255.255.255.254');
mysql> insert into radgroupreply (groupname,attribute,op,value) values ('user','Framed-IP-Netmask',':=','255.255.255.0');
mysql>insert into radgroupcheck (groupname,attribute,op,value) values('user','Simultaneous-Use',':=','1'); (限制一个帐号只能拨一次,可选)
添加用户:
mysql> insert into radcheck (username,attribute,op,value) values ('hy','User-Password',':=','westos');
mysql> insert into radusergroup (username,groupname) values ('test','user');
以后添加帐户只需要进行以下两步操作即可:
mysql> insert into radcheck (username,attribute,op,value) values ('test','User-Password',':=','test'); (添加帐户 test,密码 test)
mysql> insert into radusergroup (username,groupname) values ('test','user');
[root@vm2 mysql]# /etc/init.d/radiusd start
Starting radiusd: [ OK ]
[root@vm2 mysql]# /etc/init.d/pptpd stop
Shutting down pptpd: [ OK ]
[root@vm2 mysql]# /etc/init.d/pptpd start
Starting pptpd: [ OK ]
但是我在测试的时候出现了报错如下:
解决办法如下:
[root@vm2 radiusclient]# vim /etc/hosts 添加一条将自己的IP解析出来
192.168.1.10 vm2.example.com
下面是我们的测试结果:
这时我们看到rad_recv: Access-Reject packet from host 127.0.0.1 port 1812, id=242, length=20,意思是访问被拒绝,
这时查看日志文件发现如下错误:
解决办法:进入数据库删掉以前创建的test和hy用户信息,重新创建,问题解决。
重新测试结果如下:
看到 Access-Accept 字样即表示成功
下面我们通过VM3进行测试:
[root@vm3 mnt]# yum localinstall pptp-setup-1.7.2-8.1.el6.x86_64.rpm -y 所有的依赖性默认全部安装好
创建一个VPN,创建完成后自动获取一个IP:
我们可以看到VM3虚拟机获得了一个ip(192.168.2.100)
此时表明连接已经建立,可以使用ifconfig查看连接情况。
如果想删除连接,可以使用下面的命令来删除:
[root@vm3 ~]# cd /usr/share/doc/ppp-2.4.5/scripts/
[root@vm3 scripts]# chmod +x poff pon
[root@vm3 scripts]# cp pon poff /usr/bin/
[root@vm3 ~]# poff -a (断掉链接)
我们可以看到创建的ppp0已经停掉了。
但是在/etc/ppp/peers/会有openvpn这个文件,记得上面那个--create参数吗,再次链接就可以使用 pppd call openvpn
[root@vm3 peers]# pppd call openvpn
更多的操作信息我们可以查看/usr/share/doc/ppp-2.4.5/scripts/README。
为我们的ppp0添加一条路由
到这里我们的整个vpn配置完毕。
阅读(2221) | 评论(0) | 转发(0) |