背景
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
2sudo apt-get install ppp
sudo apt-get install pptpd
配置pptpd
在配置文件/etc/pptpd.conf
中,增加如下内容:1
2localip 192.168.1.101 # 本地ip
remoteip 192.168.1.110-120 # 设置ip分配范围
注:ip地址不要有冲突
配置ppp
在配置文件/etc/ppp/chap-secrets
中,增加用户名密码
格式: {用户名}<tab>*<tab>{密码}<tab>*
在配置文件/etc/ppp/options
中,设置MTU1
2-mru # 关闭MRU协商
mru 1496 # 设置MTU值为1496
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
2
3sudo apt-get install ppp
sudo apt-get install xl2tpd
sudo apt-get install openswan
IPsec配置及测试
配置
在/etc/ipsec.conf
中,增加:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17onn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=192.168.3.100 # 本机ip
leftprotoport=17/1701
right=%any
rightprotoport=17/%any
在/etc/ipsec.secrets
中增加预共享密钥{本地IP}<tab>%any: PSK<tab>"{密码}"
eg: 192.168.3.100 %any: PSK "lsjflsdkfj"
关闭内核ICMP重定向1
2
3
4
5for abspath in /proc/sys/net/ipv4/conf/*
do
echo 0 > $abspath/accept_redirects
echo 0 > $abspath/send_redirects
done
修改/etc/sysctl.conf
中的配置1
2
3
4
5
6
7
8
9
10net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1
执行sudo sysctl -p
立即生效
测试
使用ipsec verify
验证ipsec配置。在验证前,请先重启ipsec服务sudo systemctl restart ipsec
L2TP配置
在/etc/xl2tpd/xl2tpd.conf
中增加1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[global]
listen-addr = 192.168.3.100
ipsec saref = yes
[lns default]
ip range = 192.168.3.120-192.168.3.123
local ip = 192.168.3.100
refuse chap = yes
refuse pap = yes
require authentication = yes
name = l2tp
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
PPP配置
options配置
新建xl2tpd专用options,并增加内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.3.1
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
debug
hide-password
modem
lock
proxyarp
账户配置
可复用PPTP部署中的PPP配置的账户
重启L2TP服务
sudo systemctl restart xl2tpd