Virtual Private Network虚拟专用网络-在Linux上搭建专用通道

一、VPN

VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网服务器资源,这种访问就属于远程访问。 

在传统的企业网络配置中,要进行远程访问,传统的方法是租用DDN数字数据网)专线或帧中继,这样的通讯方案必然导致高昂的网络通讯和维护费用。对于移动用户(移动办公人员)与远端个人用户而言,一般会通过拨号线路(Internet)进入企业的局域网,但这样必然带来安全上的隐患。 

让外地员工访问到内网资源,利用VPN的解决方法就是在内网中架设一台VPN服务器。外地员工在当地连上互联网后,通过互联网连接VPN服务器,然后通过VPN服务器进入企业内网。为了保证数据安全,VPN服务器和客户机之间的通讯数据都进行了加密处理。有了数据加密,就可以认为数据是在一条专用的数据链路上进行安全传输,就如同专门架设了一个专用网络一样,但实际上VPN使用的是互联网上的公用链路,因此VPN称为虚拟专用网络,其实质上就是利用加密技术在公网上封装出一个数据通讯隧道。有了VPN技术,用户无论是在外地出差还是在家中办公,只要能上互联网就能利用VPN访问内网资源,这就是VPN在企业中应用得如此广泛的原因.

常用的VPN技术

GRE,PPTP,L2TP+IPSec

常见的用途

网络fanqiang(不打拼音不让发呀);出差在外连接公司内部服务器;分公司之间的连接

 

二、GRE VPN

GRE VPN(Generic Routing Encapsulation)即通用路由封装协议,是对某些网络层协议(如IP和IPX)的数据报进行封装,使这些被封装的数据报能够在另一个网络层协议(如IP)中传输。如将ip协议的数据报包装成GRE协议的数据报,并在网络层协议中传输,这样对外来说ip协议数据报就会被隐藏

GRE是VPN(Virtual Private Network)的第三层隧道协议(ip网络层),即在协议层之间采用了一种被称之为Tunnel(隧道)的技术。

有两个知识必须先了解

[GRE协议]https://www.cnblogs.com/sky5hat/p/10470456.html

[IP隧道技术]https://baike.baidu.com/item/IP%E9%9A%A7%E9%81%93%E6%8A%80%E6%9C%AF/8518974?fr=aladdin

配置案例:

1.拓扑图

我们要实现Linux终端与VPN服务器互通,必须知道双方的ip并且做好配置,我们会利用它们的真实ip创造一个隧道,并且为这个隧道配置一个虚拟ip(任意的),这样我们就建立了一个一对一的网络连接

2.Linux终端配置

  1)加载ip_gre模块

  1. [root@client ~]# modprobe ip_gre
  2. [root@client ~]# lsmod | grep ip_gre            //确定是否加载了gre模块 

        2)建造网络隧道

  1. [root@client ~]# ip tunnel add tun0 mode gre  remote 201.1.2.5 local 201.1.2.10
  2. //ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
  3. //mode设置隧道使用gre模式
  4. //local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址

  3)启用隧道

  与网卡的up操作相似   

  1. [root@client ~]# ip link set tun0 up         //设置UP
  2. [root@client ~]# ip link show

  4)为VPN配置隧道IP地址

  1. [root@client ~]# ip addr add 10.10.10.10/24 peer 10.10.10.5/24  dev tun0
  2. //为隧道tun0设置本地IP地址(10.10.10.10.10/24)
  3. //隧道对面的主机IP的隧道IP为10.10.10.5/24
  4. [root@client ~]# ip a s //查看IP地址
  5. [root@client ~]# firewall-cmd --set-default-zone=trusted            //关闭防火墙

3.VPN服务器配置

  与Linux客户终端大致相同,VPN服务器一般充当跳板机的作用,作为访问内网的一个入口

  1)加载ip_gre模块

  1. [root@proxy ~]# modprobe ip_gre
  2. [root@proxy ~]# lsmod | grep ip_gre            //确定是否加载了gre模块 

        2)建造网络隧道

  1. [root@proxy ~]# ip tunnel add tun0 mode gre  remote 201.1.2.10 local 201.1.2.5
  2. //ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
  3. //mode设置隧道使用gre模式
  4. //local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址

  3)启用隧道

  与网卡的up操作相似   

  1. [root@proxy ~]# ip link set tun0 up         //设置UP
  2. [root@proxy ~]# ip link show

  4)为VPN配置隧道IP地址

  1. [root@proxy ~]# ip addr add 10.10.10.5/24 peer 10.10.10.10/24  dev tun0
  2. //为隧道tun0设置本地IP地址(10.10.10.10.10/24)
  3. //隧道对面的主机IP的隧道IP为10.10.10.5/24
  4. [root@proxy ~]# ip a s //查看IP地址
  5. [root@proxy ~]# firewall-cmd --set-default-zone=trusted            //关闭防火墙

4.ping命令测试连通性

  在两台机子上ping对方,用配置的隧道ip

  1. [root@proxy ~]# ping -c1 10.10.10.10    
  2. [root@client ~]# ping -c1 10.10.10.5    

我们查看一下路由表,会发现多了一个跳转地址,并且是以隧道的形式

[root@proxy ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.4.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
201.1.2.0       0.0.0.0         255.255.255.0   U     101    0        0 eth3

 

   5.补充

    我们可以多创建几个隧道,ip仍然可以随意配置,这么做只是让大家知道,隧道的ip只是一个虚拟ip,我们的目的是要建立这个隧道,这样我们需要达到几个条件:

1.两台终端之间的网络是互通的

2.两台终端必须有真实网卡

3.在两台主机之间建立一个隧道并且保证这条隧道是有效的

[root@proxy ~]# ip addr add 100.100.100.5/24 peer 100.100.100.10/24  dev tun0 //可以多添加一些隧道 并且使用这个隧道的ip去连接其他主机

[root@client ~]# ip addr add 100.100.100.5/24 peer 100.100.100.10/24  dev tun0

三、PPTP VPN

点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,它工作在第二层。通过该协议,远程用户能够通过 Microsoft Windows NT工作站、Windows xp 、 Windows 2000 和windows2003、windows7操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过 Internet 安全链接到公司网络。

[PPTP协议]https://baike.baidu.com/item/PPTP/610663

PPTP VPN提供了加密机制(通过MPPE),使数据传输更加安全

1.拓扑图

准备两台主机,windows终端和VPN服务器,实验用虚拟机就可以,保证他们有相同网段的虚拟网卡,这里使用201.1.2.0网段的地址

2.VPN服务器-Linux配置

  1)安装pptp软件包

  1. [root@proxy ~]# yum localinstall pptpd-1.4.0-2.el7.x86_64.rpm
  2. [root@proxy ~]# rpm -qc pptpd
  3. /etc/ppp/options.pptpd
  4. /etc/pptpd.conf
  5. /etc/sysconfig/pptpd

  2)修改配置文件

  1. [root@proxy ~]# vim /etc/pptpd.conf
  2. .. ..
  3. localip 201.1.2.5                                    //服务器本地IP
  4. remoteip 192.168.1.1-50                            //分配给客户端的IP池
  5.  
  6. [root@proxy ~]# vim /etc/ppp/options.pptpd
  7. require-mppe-128                                    //使用MPPE加密数据
  8. ms-dns 8.8.8.8                                    //DNS服务器
  9.  
  10. [root@proxy ~]# vim /etc/ppp/chap-secrets            //修改账户配置文件
  11. jacob         *          123456     *
  12. //用户名    服务器标记    密码    客户端
  13.  
  14. [root@proxy ~]# echo "1" > /proc/sys/net/ipv4/ip_forward    //开启路由转发

    3)启动服务

  [root@proxy ~]# systemctl start pptpd

  1. [root@proxy ~]# systemctl enable pptpd
  2. [root@proxy ~]# firewall-cmd --set-default-zone=trusted
  3. [root@proxy ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 -j SNAT --to-source 201.1.2.5 //翻墙设置,非必须

3.Windows终端配置

需要一台真机,可以与VPN服务器正常通信

或者启动一台Windows虚拟机,使windows虚拟机和VPN虚拟机的虚拟网卡一致,配置本地连接的IP地址为201.1.2.20。

1)设置新的连接或网络

2)连接到工作区

3)否,创建新的连接

4)使用我的Internet连接

5)连接到工作区

输入VPN服务器的配置文件中的ip地址,上面是201.1.2.5 

用户名密码输入在VPN服务器上添加的,域不填即可,完了之后点连接

4.测试连通性

在window上win+R 输入cmd打开终端,ping 192.168.1.1-50都可,以VPN服务器上分配的ip为准

四、L2TP+IPSec VPN

L2TP第二层隧道协议(英语:Layer Two Tunneling Protocol,缩写为L2TP)是一种虚拟隧道协议,通常用于虚拟专用网L2TP协议自身不提供加密与可靠性验证的功能,可以和安全协议搭配使用,从而实现数据的加密传输。经常与L2TP协议搭配的加密协议是IPsec,当这两个协议搭配使用时,通常合称L2TP/IPsec。

L2TP支持包括IP、ATM、帧中继、X.25在内的多种网络。在IP网络中,L2TP协议使用注册端口UDP 1701。因此,在某种意义上,尽管L2TP协议的确是一个数据链路层协议,但在IP网络中,它又的确是一个会话层协议。 

IPSec互联网安全协议(英语:Internet Protocol Security,缩写为IPsec),是一个协议包,通过对IP协议分组进行加密认证来保护IP协议的网络传输协议族(一些相互关联的协议的集合)。 [1] 

IPsec主要由以下协议组成:一、认证头(AH),为IP数据报提供无连接数据完整性消息认证以及防重放攻击保护;二、封装安全载荷(ESP),提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性;三、安全关联(SA),提供算法和数据包,提供AH、ESP操作所需的参数。

[L2TP]https://baike.baidu.com/item/L2TP/609253

[IPSec]https://baike.baidu.com/item/ipsec

1.拓扑图

2.VPN服务器配置

  1)部署IPSec服务

       分为三步:安装软件->修改配置文件-->启动服务   

注意:此处需要注意myipsec.conf 格式问题,可以在评论区留言,因为不方便在文章中写出

  1. [root@client ~]# yum -y install libreswan   ///安装软件
  2. [root@client ~]# cat /etc/ipsec.conf                //这是ipsec的主配置文件
  3. .. ..
  4. include /etc/ipsec.d/*.conf                    //加载该目录下的所有配置文件,我们需要修改的是下面的文件
  5.  
  6. [root@client ~]# vim /etc/ipsec.d/myipsec.conf            //新建该文件,基本配置如下   
  7. conn IDC-PSK-NAT
  8. rightsubnet=vhost:%priv                        //允许建立的VPN虚拟网络
  9. also=IDC-PSK-noNAT
  10.  
  11. conn IDC-PSK-noNAT
  12. authby=secret                                       //加密认证
  13. ike=3des-sha1;modp1024                         //算法
  14. phase2alg=aes256-sha1;modp2048                //算法
  15. pfs=no
  16. auto=add
  17. keyingtries=3
  18. rekey=no
  19. ikelifetime=8h
  20. keylife=3h
  21. type=transport
  22. left=201.1.2.10                                //重要,服务器本机的外网IP,本机网卡ip
  23. leftprotoport=17/1701
  24. right=%any                                    //允许任何客户端连接
  25. rightprotoport=17/%any
  26. [root@client ~]# cat /etc/ipsec.secrets                 //仅查看,不要修改该文件
  27. include /etc/ipsec.d/*.secrets
  28.  
  29. [root@client ~]# vim /etc/ipsec.d/mypass.secrets        //新建该文件
  30. 201.1.2.10 %any: PSK "randpass"             //randpass为预共享密钥 201.1.2.10是VPN服务器的IP
  31.                            
  32. [root@client ~]# systemctl start ipsec         //启动服务
  33. [root@client ~]# netstat -ntulp |grep pluto  //查看是否启动,端口号为3148
  34. udp 0 0 127.0.0.1:4500 0.0.0.0:* 3148/pluto
  35. udp 0 0 192.168.4.10:4500 0.0.0.0:* 3148/pluto
  36. udp 0 0 201.1.2.10:4500 0.0.0.0:* 3148/pluto
  37. udp 0 0 127.0.0.1:500 0.0.0.0:* 3148/pluto
  38. udp 0 0 192.168.4.10:500 0.0.0.0:* 3148/pluto
  39. udp 0 0 201.1.2.10:500 0.0.0.0:* 3148/pluto
  40. udp6 0 0 ::1:500 :::* 3148/pluto

    2)部署XL2TP服务

  大家需要下载XL2TP软件包https://pkgs.org/download/xl2tpd

  1. [root@client ~]# yum localinstall xl2tpd-1.3.8-2.el7.x86_64.rpm   //安装软件包
  2. [root@client ~]# vim /etc/xl2tpd/xl2tpd.conf                //修改主配置文件
  3. [global]
  4. .. ..    
  5. [lns default]
  6. .. ..
  7. ip range = 192.168.3.128-192.168.3.254                    //分配给客户端的IP池
  8. local ip = 201.1.2.10                                     //VPN服务器的IP地址
  9.  
  10. [root@client ~]# vim /etc/ppp/options.xl2tpd            //认证配置
  11. require-mschap-v2                                          //添加一行,强制要求认证
  12. #crtscts                                                     //注释或删除该行
  13. #lock                                                    //注释或删除该行
  14.  
  15. root@client ~]# vim /etc/ppp/chap-secrets                    //修改密码文件
  16. jacob * 123456 *                //账户名称 服务器标记 密码 客户端IP
  17. [root@client ~]# systemctl start xl2tpd       //启动服务
  18. [root@client ~]# netstat -ntulp |grep xl2tpd        
  19. udp 0 0 0.0.0.0:1701 0.0.0.0:* 3580/xl2tpd
  20. [root@client ~]# echo "1" > /proc/sys/net/ipv4/ip_forward  //设置路由转发,防火墙,仅实验修改
  21. [root@client ~]# firewall-cmd --set-default-zone=trusted
  22. [root@client ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24  -j SNAT --to-source 201.1.2.10 //翻墙设置 

3.客户机配置

启动一台Windows虚拟机,将虚拟机网卡桥接到public2,配置IP地址为201.1.2.20。

新建网络连接(参考案例2),输入VPN服务器账户与密码(参考PPTP VPN)。

设置VPN连接的属性,预共享密钥是IPSec配置文件中填写的randpass,往前的配置在PPTP VPN中已经展示过了,我们现在只需要修改一下欲共享秘钥即可,以VPN服务器中的配置为主

 

设置Windows注册表(不修改注册表,连接VPN默认会报789错误),具体操作如下:

  • 单击"开始",单击"运行",键入"regedit",然后单击"确定"
  • 找到下面的注册表子项,然后单击它:
  • HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\Rasman\Parameters
  • 在"编辑"菜单上,单击"新建"->"DWORD值"
  • 在"名称"框中,键入"ProhibitIpSec"
  • 在"数值数据"框中,键入"1",然后单击"确定"
  • 退出注册表编辑器,然后重新启动计算机
  • 6
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值