(1) ***的作用:
使用户可以不在公司内网中安全访问内网资源,或者连接国外网络.
(2)原理:
1.说到***就必须谈到隧道技术(pptp、l2tp、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