Chinaunix首页 | 论坛 | 博客
  • 博客访问: 871884
  • 博文数量: 72
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1693
  • 用 户 组: 普通用户
  • 注册时间: 2014-08-04 15:53
个人简介

主要从事Linux,云原生架构改造,服务网格,ELK,python,golang等相关技术。

文章分类

全部博文(72)

文章存档

2015年(52)

2014年(20)

分类: 服务器与存储

2015-03-08 11:34:54

    百度百科介绍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
  1. localip 192.168.1.10
  2. remoteip 192.168.2.100-110
localip: pptpd server 所在服务器IP地址,可以设置为服务器上绑定的任意一个IP地址
remoteip:设置客户端连接到pptpd server后可供分配的IP地址范围

添加测试用户:
[root@vm2 ~]# vim /etc/ppp/chap-secrets
  1. # Secrets for authentication using CHAP
  2. # client server secret IP addresses
  3. 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-mysqlfreeradius-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
  1. authorize {
  2. #files
  3. sql
  4. ....
  5. }
  6. accounting {
  7. #radutmp
  8. sql
  9. ....
  10. }
  11. session{
  12. #radutmp
  13. sql
  14. }
  15. post-auth {
  16. sql
  17. }
[root@vm2 raddb]# vim sql.conf
  1. sql {
  2. database = “mysql“
  3. driver = "rlm_sql_mysql"
  4. server = "localhost"
  5. login = "radius"
  6. password = "radpass"
  7. radius_db = "radius"
  8. ....
  9. }
[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配置完毕。





阅读(6119) | 评论(7) | 转发(2) |
给主人留下些什么吧!~~

dream_my_dream2015-08-05 12:09:32

china_Linux_hy:哎呀,妈呀,看来是同门啊

回复 | 举报

china_Linux_hy2015-08-04 22:24:25

dream_my_dream:westos

哎呀,妈呀,看来是同门啊

回复 | 举报

dream_my_dream2015-08-03 10:21:21

westos

china_Linux_hy2015-03-10 17:09:02

china_Linux_hy:改了一下名字竟然取消了文章推荐

回复 | 举报

china_Linux_hy2015-03-10 17:07:46

改了一下名字竟然取消了文章推荐