(1) VNP的作用:
使用户可以不在公司内网中安全访问内网资源,或者通过vpn连接国外网络(vpn翻墙,玩一些服务器在国外,国内没有代理的游戏,比如大火的 “吃鸡”虽然我不吃)
(2)原理:
1.说到vpn就必须谈到隧道技术(pptp、l2tp、ipip、pppoe(adsl拨号上网经常使用)),隧道技术就是将其他数据包或者帧封装到一个数据包或者帧中,在这些数据帧中添加路由头部信息(如以太帧头部、ppp帧头部等)以便被封装的数据在互联网中传递,当然对客户来说这些都是透明的。
2.vpn也使用了隧道技术(本文主要说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.数据包通过网路经过各个路由最后到达vpn服务器,物理网卡接受以太帧后解帧后交给tcp/ip协议后解ip数据包与GRE报文然后将剩下的ppp帧发送给ppp0(vpn虚拟网卡)进行解密然后根据数据内容提交给上层协议进行处理。
5.通过上面对数据封装与解包过程中我们可以感知到ppp帧中携带数据通过pptp搭建的隧道点对点的从vpn客户端传输到了vpn服务器。就好比在互联网中独自建立了一个高铁铁路,数据包在这条铁路中从起点(vpn客户端)坐到了终点(vpn服务器),然后下车根据站内的指示牌(路由)寻找出口。(脑补画面)。
(3) vpn的搭建:
redhat linux系统
client:192.168.1.73
server: 外: 192.168.1.92 内:172.25.45.1
vpn客户端地址:172.25.254.100 ~ 172.25.254.200
vpn服务器开启路由转发: echo “1” > /proc/sys/net/ipv4/ip_forward
需要安装ppp、pptp : 一个是对将要传输的数据封装为ppp帧,一个是将ppp帧添加GRE报头封装为GRE报文,然后将该报文提交给tcp/ip协议进行下一步的封装。
配置ppp和pptp的文件:
vim /etc/ppp/chap-secrets #这个就是ppp协议进行身份验证的依据文件
vpnclient pptpd ‘westos’* #第一行为用户名 第二行为options.pptpd文件中name指定名字相同 第三行为密码 地四行指定客户端ip地址 ‘*’表示 全部可以接入
vim /etc/pptpd.conf #pptp服务的主配置文件
localip 192.168.1.92 #填写vpn的外网地址
remoteip 172.25.254.100-200 #添加vpn客户端地址池
这样vpn的简单配置就完成了 。
但是这样配置的vpn还是有一些不尽人意的地方,如:连接上vpn后客户端无法访问外网,无法访问公司内网之类的问题。
(4)解决方法:
无法访问外网:
vpn客户端 :
route add -net 172.25.45.0 netmask 255.255.255.0 pppo #添加目的网络(vpn服务器内网网段)为 172.25.45.0 ip数据包经过 pppo(虚拟网卡)出去
vpn服务器:
此时vpn服务器需要在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上将出包时候源地址为vpn客户端地址改变为vpn外网ip
*********注: 以上两步根据实际情况添加
无法访问内网:
vpn服务器:
route add -net 172.25.254.0 netmask 255.255.255.0 gw 172.25.45.1 #在vpn内网主机中设置 目标网络172.25.254.0 的网关为172.25.45.1