「L2TP」- 使用xl2tpd搭建隧道

  CREATED BY JENKINSBOT

要实现的功能

配置xl2tpd服务,实现VPN功能。

附加说明

关于L2TP与IPSec的关系

在L2TP over IPSec(L2TP/IPSec)中:

	* IPSec - 负责认证及网络层数据加密;
	* L2TP - 隧道协议,负责支持VPN功能;

什么意思呢?IPSec提供的是网络层的数据加密,而VPN功能实际上是由L2TP支持的。也就是说没有IPSec也是能够实现VPN功能的。

如果不使用IPSec加密,就表示你放弃了安全和数据保密。你的数据在网络中是以“明文”传输的。说“明文”也不准确,数据能否被解码还要看上层所使用的协议。

如果使用了IPSec加密,即使数据被监听,也不会被发现网络层中的数据信息(有几种情况例外)。而且IPSec也可以单独使用……

关于本文的一些内容

本文不讨论IPSec的使用及相关的内容,此教程也没有使用IPSec进行加密。

这里的L2TP服务,也没有开启认证(文中会提到开启认证的方法),没有开启认证的原因是NetworkManager里没法设置L2TP的认证密钥(或者有,没找到)。

环境概述

系统:CentOS Linux release 7.3.1611 (Core)

软件:xl2tpd 1.3.8

开始搭建……

#1 安装xl2tpd服务

#!/bin/bash

yum install -y xl2tpd.x86_64

#2 修改配置文件:/etc/xl2tpd/xl2tpd.conf

[global]
listen-addr = 0.0.0.0
port = 1701
access control = yes
; auth file = /etc/xl2tpd/l2tp-secrets
; max retries = 5

debug avp = yes
debug network = yes
debug packet = yes
debug state = yes
debug tunnel = yes

; ipsec saref = no
; saref refinfo = 30

[lns default]
;;;
exclusive = no
ip range = 192.168.1.2 - 192.168.1.10
assign ip = yes
; (no) lac =
; hidden bit =
local ip = 192.169.1.1
; local ip range =
; length bit =
require chap = yes
require pap = no
require authentication = no
unix authentication = no
hostname = Your Hostname
ppp debug = yes
pass peer = yes
pppoptfile = /etc/ppp/options.xl2tpd
; call rws =
; tunnel rws =
; flow bits =
challenge = no
; rx bps =
; tx bps =

上述配置文件的ip rangelocal ippppoptfile可能需要根据自己的情况修改。

指令challenge = no用于关闭L2TP认证。如果设置challenge = yes,则需要配置auth file指令来指定认证密钥。

#3 修改配置文件:/etc/ppp/options.xl2tpd

+mschap-v2
ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
mtu 1280
mru 1280
proxyarp
lcp-echo-failure 4
lcp-echo-interval 30
connect-delay 5000
name EnterYourUsername

#4 修改配置文件:/etc/ppp/chap-secrets

"EnterYourUsername" * "password" *

#5 启动xl2tpd服务

#!/bin/bash

# 启动服务
systemctl start xl2tpd.service

# 开机启动
systemctl enable xl2tpd.service

常见错误

Getting L2TP No Authorization errors

For no obvious reason connections are being denied by xl2tpd without any apparent checking of CHAP credentials, and setting access control and/or require authentication to no in xl2tpd.conf does not alleviate the problem. Log messages are also somewhat terse:

	xl2tpd[xxxxx]: control_finish: Denied connection to unauthorized peer xxx.xxx.xxx.xxx
	xl2tpd[xxxxx]: Connection 40447 closed to xxx.xxx.xxx.xxx, port 1701 (No Authorization)

This was caused by changing [lns default] in xl2tpd.conf to use a name other than default. Easiest thing is to change it back.

control_finish: Denied connection to unauthorized peer

在xl2tpd.conf文件中设置access control = no即可。

没有找到关于access control的更多说明,手册里说的也很简单。

参考文献

xL2TPd on Arch Linux and Ubuntu.
L2TP/IPSec VPN server setup
[SOLVED] suddenly no more l2tpd connection are allowed, but ipsec tunnel is still up