(1) ***的作用:
              使用户可以不在公司内网中安全访问内网资源,或者连接国外网络.


(2)原理:

          1.说到***就必须谈到隧道技术(pptp、ipip、pppoe(adsl拨号上网经常使用)),隧道技术就是将其他数据包或者帧封装到一个数据包或者帧中,在这些数据帧中添加路由头部信息(如以太帧头部、ppp帧头部等)以便被封装的数据在互联网中传递,当然对客户来说这些都是透明的。

 

          2.***也使用了隧道技术(本文主要说pptp协议 ),数据包封装过程:将用户数据(ip数据包、ipx上数据报或者NetBEUI)封装 在ppp帧中,ppp帧在进一步添加GRE报头形成GRE报文(此为 pptp协议),然后tcp/ip协议将GRE报文进行封装既添加ip报头,然后进行数据链路层的封装,数据链路层封装根据物理网络而添添加链路层的报头与报尾。如:以太网  则添加以太帧的报头和报尾(目的/源mac  类型  数据   帧校验序列)进行链路层封装,如果ip数据包在点到点 wan上传输 则添加 ppp帧的报头和报尾(0x7e 0xff  0x03  协议  信息部分  帧校验码  0x7e)。如果将上面ppp帧理解为一个tcp/ip协议上层协议封装数据,则上面pptp协议的封装过程和一般的应用层数据封装过程相似。

 

          3.pptp的一些连接建立与ppp协议的一些身份验证与协商等就不在这多说了 ,详细过程资料一大堆。

 

           4.数据包通过网路经过各个路由最后到达***服务器,物理网卡接受以太帧后解帧后交给tcp/ip协议后解ip数据包与GRE报文然后将剩下的ppp帧发送给ppp0(***虚拟网卡)进行解密然后根据数据内容提交给上层协议进行处理。


           5.通过上面对数据封装与解包过程中我们可以感知到ppp帧中携带数据通过pptp搭建的隧道点对点的从***客户端传输到了***服务器。就好比在互联网中独自建立了一个高铁铁路,数据包在这条铁路中从起点(***客户端)坐到了终点(***服务器),然后下车根据站内的指示牌(路由)寻找出口。(脑补画面)。




(3) ***的搭建:

            redhat linux系统

            client:192.168.1.73

            server:  外:  192.168.1.92   内:172.25.45.1

            ***客户端地址:172.25.254.100 ~ 172.25.254.200

            ***服务器开启路由转发: echo “1” > /proc/sys/net/ipv4/ip_forward

        

需要安装ppp、pptp : 一个是对将要传输的数据封装为ppp帧,一个是将ppp帧添加GRE报头封装为GRE报文,然后将该报文提交给tcp/ip协议进行下一步的封装。


配置ppp和pptp的文件:

        vim  /etc/ppp/chap-secrets  #这个就是ppp协议进行身份验证的依据文件

                ***client   pptpd  ‘westos’*    #第一行为用户名  第二行为options.pptpd文件中name指定名字相同  第三行为密码  地四行指定客户端ip地址   ‘*’表示 全部可以接入

        

        vim  /etc/pptpd.conf  #pptp服务的主配置文件

                localip  192.168.1.92  #填写***的外网地址

                remoteip 172.25.254.100-200  #添加***客户端地址池

这样***的简单配置就完成了 。

但是这样配置的***还是有一些不尽人意的地方,如:连接上***后客户端无法访问外网,无法访问公司内网之类的问题。




(4)解决方法:

无法访问外网:

        ***客户端 : 

                route add -net 172.25.45.0 netmask 255.255.255.0 pppo  #添加目的网络(***服务器内网网段)为 172.25.45.0 ip数据包经过 pppo(虚拟网卡)出去            

            

        ***服务器:

                 此时***服务器需要在nat表POSTROUTING链做一个snat,当然你需要安装iptables(yum  install  iptables -y)。

       iptables  -t nat -A  POSTROUTING -s 172.25.254.0/24  -j SDNT -to  192.168.1.92    #在iptables上将出包时候源地址为***客户端地址改变为***外网ip

*********注: 以上两步根据实际情况添加


无法访问内网:

        ***服务器:

                route add -net  172.25.254.0 netmask 255.255.255.0   gw 172.25.45.1  #在***内网主机中设置 目标网络172.25.254.0 的网关为172.25.45.1