背景
VPN(virtual private network)虚拟专用网络,目前主要能接触到的协议包括PPTP(点对点隧道协议)和L2TP(2层隧道协议)
- PPTP(2层VPN) 由微软和3Com等公司组成的PPTP论坛开发的点对点隧道协议,基于PPP协议使用PAP或CHAP之类的加密算法。
- L2TP(2层VPN) 是IETF基于L2F (Cisco的第二层转发协议)开发的PPTP的后续版本,是一种工业标准 Internet 隧道协议,其可以为跨越面向数据包的媒体发送点到点协议 (PPP) 框架提供封装。
PPTP和L2TP都使用PPP协议对数据进行封装,然后添加附加包头用于数据在互联网络上的传输。PPTP只能在两端点间建立单一隧道。 L2TP支持在两端点间使用多隧道,用户可以针对不同的服务质量创建不同的隧道。L2TP可以提供隧道验证,而PPTP则不支持隧道验证。但是当L2TP 或PPTP与IPSEC共同使用时,可以由IPSEC提供隧道验证,不需要在第2层协议上验证隧道使用L2TP。PPTP要求互联网络为IP网络。L2TP只要求隧道媒介提供面向数据包的点对点的连接,L2TP可以在IP(使用UDP),桢中继永久虚拟电路 (PVCs),X.25虚拟电路(VCs)或ATM VCs网络上使用。
IPSec(3层VPN),隧道模式隧道是封装、路由与解封装的整个过程。隧道将原始数据包隐藏(或封装)在新的数据包内部。该新的数据包可能会有新的寻址与路由信息,从而使其能够通过网络传输。隧道与数据保密性结合使用时,在网络上窃听通讯的人将无法获取原始数据包数据(以及原始的源和目标)。封装的数据包到达目的地后,会删除封装,原始数据包头用于将数据包路由到最终目的地。
搭建环境
- OS, raspbian jessie
- 硬件,Raspbarry Pi 3B
- ppp,2.4.6
- pptpd,1.4.0
- openswan,2.6.38
- xl2tp,1.3.6
PPTP部署
软件安装
安装ppp
、pptpd
1 | sudo apt-get install ppp |
配置pptpd
在配置文件/etc/pptpd.conf
中,增加如下内容:
1 | localip 192.168.1.101 # 本地ip |
*** 注:ip地址不要有冲突 ***
配置ppp
在配置文件/etc/ppp/chap-secrets
中,增加用户名密码
格式: {用户名}<tab>*<tab>{密码}<tab>*
在配置文件/etc/ppp/options
中,设置MTU
1 | -mru # 关闭MRU协商 |
ip转发配置
如果需要通过VPN访问宿主机本地网络,需要开通ip转发功能,在/etc/sysctl.conf
中设置net.ipv4.ip_forward=1
。并执行sudo sysctl -p
使修改生效。
重启pptpd服务
sudo systemctl restart pptpd
IPsec over L2TP部署
软件安装
安装ppp
、xl2tpd
、openswan
1 | sudo apt-get install ppp |
IPsec配置及测试
配置
在/etc/ipsec.conf
中,增加:
1 | onn L2TP-PSK-NAT |
在/etc/ipsec.secrets
中增加预共享密钥{本地IP}<tab>%any: PSK<tab>"{密码}"
eg: 192.168.3.100 %any: PSK "lsjflsdkfj"
关闭内核ICMP重定向
1 | for abspath in /proc/sys/net/ipv4/conf/* |
修改/etc/sysctl.conf
中的配置
1 | net.ipv4.ip_forward = 1 |
执行sudo sysctl -p
立即生效
测试
使用ipsec verify
验证ipsec配置。在验证前,请先重启ipsec服务sudo systemctl restart ipsec
L2TP配置
在/etc/xl2tpd/xl2tpd.conf
中增加
1 | [global] |
PPP配置
options配置
新建xl2tpd专用options,并增加内容
1 | ipcp-accept-local |
账户配置
可复用PPTP部署中的PPP配置的账户
重启L2TP服务
sudo systemctl restart xl2tpd