一、实验简介
VPN ,中文翻译为虚拟专有网络,英文全称是 Virtual Private Network 。现在 VPN 被普遍定义为通过 一个公用互联网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道,使用这条隧道可 以对数据进行深度加密达到安全使用互联网的目的,被广泛使用企业办公当中。
简单的说,VPN 就是为了大家在 互联网的连接和使用中,开辟一条临时的通道,最大程度保证传输数据的便捷以及安全性。本实验将介绍一些 VPN 服务器软件,以及安装配置一台 pptp 服务器。
1.1 知识点
- VPN 介绍
- 常见的 VPN 软件介绍
- pptp 安装和配置
- 简要介绍代理服务器
1.2 效果截图
二、VPN 概述
VPN 最初主要是针对企业内部网络的扩展,后来发展到可以帮助远程用户、公司分支机构、商业伙伴及供应商同公 司的内部网建立可信的安全连接,用于经济有效地连接到商业伙伴和用户的安全外联网、虚拟专用网,由于 VPN 是在 Internet 上临时建立的安全专用虚拟网络,用户就节省了租用专线的费用,在运行的资金支出上,除了购买 VPN 设备,企业所付出的仅仅是向企业所在地的 ISP(Internet Service Provider,互联网服务提供商,也就是电信,联通等等)支付一定的上网费用,提高了管理效率,安全性,也节约了一定的成本。
2.1 VPN 实现方式
虚拟专用网络能够利用 Internet 或其它公共互联网络的基础设施,将 IP 报文加密封装在另一个 IP 报文中的方式为用户创建一个通信的隧道,让两个没有实际物理连接的节点却在在逻辑上直接连接通信,以达到高效、安全的通信方式
2.2 为什么要使用VPN
- 需要访问的资源受限
- 内外网因防火墙而无法直接通信
- 专有网太贵
2.3 常见的VPN软件介绍
OpenVPN: OpenVPN 是一款基于 SSL 的开源 VPN 软件,它实现了利用 OpenSSL 加密库中的SSLv3/TLSv1协议函数库 来保证网络通讯安全性的目的,并且允许参与建立VPN的单点使用共享金钥,电子证书,或者用户名/密码来进行身份验证。同时避免了传统 SSL VPN 仅提供简单的 Web 应用的不足,它具有支持各种应用协议,以及支持 Windows,Linux,BSD,MAC OS 等多平台的特点。 通过阅读在ubuntu上安装OpenVPN 这篇文章,我们可以在自己的电脑搭建一台属于自己的 OpenVPN 服务器。
PPTP: 点对点隧道协议 (PPTP) 是由包括微软和 3Com 等多家公司组成的 PPTP 论坛开发的一种点对点隧道协,基于拨号使用的 PPP 协议使用 PAP 或 CHAP 等的加密算法,或者使用 Microsoft 的点对点加密算法 MPPE 。使其能通过跨越基于 TCP/IP 协议簇的数据网络结构创建 VPN,实现了按需的、多协议的虚拟专用网络,让远程客户端到专用企业服务器之间数据的安全传输。我们可以通过这篇学习安装配置PPTP服务器。
-
L2TP: 第 2 层隧道协议 (L2TP) 是 IETF 基于 L2F ( Cisco 的第二层转发协议)开发的 PPTP 的后续版本。是一种工业标准 的 Internet 隧道协议,其可以为跨越面向数据包的媒体发送点到点协议 (PPP) 框架提供封装。PPTP 和 L2TP 都使用 PPP 协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。
- PPTP 只能在两节点间建立单一隧道。 L2TP 支持在两节点间使用多隧道,用户可以针对 不同的服务创建不同的隧道。
- L2TP 可以提供隧道验证,而 PPTP 则不支持隧道验证。但是当 L2TP 或 PPTP 与 IPSEC 共同使用时,可以由 IPSEC 提供隧道验证,不需要再在第2层协议上验证隧道
- PPTP 要求互联网络为 IP 网络。L2TP 只要求隧道媒介提供面向数据包的点对点的连接,L2TP 可以在 IP(使用 UDP ),桢中继永久虚拟电路(PVCs),X.25虚拟电路(VCs)或 ATM VCs 网络上使用
三、搭建一个 pptp 服务器
在我们的环境里可以搭建一台 pptp 服务器,但由于实验环境的限制,客户端的拨号连接无法实现,感兴趣的同学想要实现服务器端与客户端连接,可以在实验后用自己的环境搭建 pptp 的客户端与服务端,同时能够加强理解。
3.1 安装 pptpd
- 打开终端。输入:
#安装 pptp 服务端
sudo apt-get install pptpd
- 然后打开并修改该文件
sudo vim /etc/pptpd.conf
,添加以下几行:
localip 192.168.10.1
remoteip 192.168.10.100-120
localip 是指服务器的 IP 地址,remoteip 是指分配给连接它的客户端的地址
- 接着在
sudo vim /etc/ppp/chap-secrets
中添加用户和密码,用于连接时的一些控制信息。
user1 pptpd 123 *
user2 pptpd 123 *
3.2 在 pptpd-options 中添加 DNS 服务器:
- 在 linux 中可以通过
cat /etc/resolv.conf
查看本机的 DNS 服务器 ip 地址:
- 然后添加到
sudo vim /etc/ppp/pptpd-options
:
ms-dns 10.202.72.116
ms-dns 10.202.72.118
- 完成了以上的配置,就可以打开 pptp 服务了:
sudo service pptpd restart
- 设置 ip 转发: 出于安全考虑, Linux 系统默认是禁止数据包转发的。现在打开系统的转发功能(本环境里默认是打开转发的)
less /proc/sys/net/ipv4/ip_forward,#该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。
echo "1" > /proc/sys/net/ipv4/ip_forward #修改文件内容,及时生效,重启网络服务或主机后效果不在。
echo "1" > /proc/sys/net/ipv4/ip_forward #写入启动脚本 /etc/rc.d/rc.local 中便可永久生效
- 给iptables 创建一个 NAT 规则(本实验环境不用加这步,但是在自己的电脑上需要)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save
3.3 安装客户端
以下操作只能在自己的电脑上运行了:
- 安装 pptp 客户端
#安装 pptp 客户端
sudo apt-get install pptp-linux
- 添加必要的 kernel 模块:
# ptpsetup 脚本在运行时会检查核心是否支持 MPPE 模块,以及 PPP 是否支持 MPPE 加密。用以下命令检查内核是否支持MPPE补丁
modprobe ppp_mppe
- 创建一个文件
sudo vim /etc/ppp/peers/pptpserver
并且添加以下几行(其中用户名与密码请自定义,若是本地搭建的服务端便是用127的 ip 地址,若不是请输入自己的 服务器端 ip 地址):
pty "pptp 127.0.0.1 --nolaunchpppd"
name user1
password 123
remotename PPTP
require-mppe-128
- 然后打开客户端,连接我们的服务器:
pppd call pptpserver
四、搭建一个代理服务器
进入内部网络,访问公司内部服务器,除了采用 VPN 的方式,也可以采用代理服务器的方式。
代理服务器英文全称是(Proxy Server),其功能就是作为用户的中转站去获取网络信息。代理服务器就好象一个大的 Cache,这样就能显著提高浏览速度和效率。这次介绍一个代理服务器的软件 *。 * 以下简称 ss ,它和 VPN 是有区别的,这里先介绍一下,我们主要是学习安装配置客户端和服务器端的流程。
4.1 * 介绍
* 是将以前通过 SSH 创建的 Socks5 协议拆开成 Server 端和 client 端,下面这个原理图能简单介绍其原理,基本上和利用 SSH tunnel 大致类似:
PC 客户端(即你电脑客户端)发出基于 Socks5 协议请求与 SS-Local 端进行通讯,SS-Local 和 SS-Server 两端通过多种可选的加密方法进行通讯,SS-Server 将收到的加密数据进行解密,还原初始请求,再发送到用户需要访问的服务网站,获取响应原路再返回 ,返回的数据包内容依然使用了加密,而 IP 报文看起来依然是普通 TCP 包,可成功穿过防火墙。 因此,* 的优点在于它解决了防火墙通对 IP 报文中一些特定的目的地址的排除,从而干扰的问题。
4.2 安装配置 ss 服务器端
- 由于 ss 加入了 python 官方的源,所以打开终端,输入以下命令安装即可:
sudo apt-get update
sudo apt-get install python-pip #实验楼的环境已安装了 pip
sudo pip install *
- 使用方法 :
sudo ssserver -p 443 -k password -m aes-256-cfb -p 是指服务器端口 -k 输入密码 -m 加密的方式
- 在后台运行 ss:
sudo ssserver -p 443 -k password -m aes-256-cfb --user nobody -d start
- 停止运行:
sudo ssserver -d stop
- 查看日志:
sudo less /var/log/*.log
4.3 安装配置 ss 客户端
ss 有 android,ios,Mac os,openWRT,linux 的客户端,能够让不同平台的人使用。 本次实验只使用终端,不用客户端,所以通过 firefox 的插件来检验效果。
- 建立配置文件
sudo vim /etc/ss.json
:
{
"server":"server_ip",
"server_port":443,
"local_port":1080,
"password":"password",
"timeout":600,
"method":"aes-256-cfb"
}
- 开启 ss 客户端:
sslocal -c /etc/ss.json
- 火狐浏览器配置: 设置→首选项→高级→网络→链接→设置→手动配置代理→socks主机:127.0.0.1 端口:1080→确定
- 在终端查看效果
- 关于chrome 安装SwitchySharp,情景模式→删除原有的情景模式,新建情景模式(原有的情景模式无socks代理)→手动配置→SOCKS代理:127.0.0.1 端口1080→保存 →ok。
五、实验总结
本实验介绍了一些常见的 VPN 软件 ,并安装配置了一下 pptp 服务器和 ss ,ss 和 VPN虽然都能完成我们的目的,但是原理并不相同。有兴趣的同学可以更深入的了解其原理,本实验仅介 VPN ,所有想进一步了解 VPN 的安装配置,可以在自己的电脑上安装试试。 ss 作为代理服务器工具,安装很简单,使用效果也不错。想进一步了解的,可去 github 查看。