CentOS6.8下搭建Ipsec+L2TP VPN服务推荐

第二层隧道协议L2TP(Layer 2 Tunneling Protocol)是一种工业标准的Internet隧道协议,它使用UDP的1701端口进行通信。L2TP本身并没有任何加密,但是我们可以使用IPSec对L2TP包进行加密。

l2tp就用xl2tpd,官网:http://www.xelerance.com/services/software/xl2tpd/

IPSec就是openswan,提供IPSec加密,官网是:http://www.openswan.org/code/ ,在centos7 版本后, 提供ipsec 服务包由libreswan替代了openswan。

环境准备

硬件:服务器采用两张网卡,eth0用于连接内网,eth1用于VPN网关。

服务器外网地址eth1:10.15.44.132/24

VPN:10.0.0.1/16

软件:

openswan:提供IPSec加密

lsof:用于数据访问

ppp:提供用户名、密码 认证

xl2tp:提供L2TP VPN服务

编译环境:

[root@L2TP-VPN~]#yuminstall-ymakegccgmp-develxmltobisonflexxmltolibpcap-develvim-enhancedman

一、安装lsof:用于数据访问,没有安装下面配置完openswan验证时可能会报错

[root@L2TP-VPN~]#yuminstalllsof–y

二、安装 配置openswan

1、安装

[root@L2TP-VPN~]#yum-yinstallopenswan

2、配置

修改ipsec 主配置文件:

[root@localhost~]#cp/etc/ipsec.conf{,.20161207bak}[root@localhost~]#vim/etc/ipsec.conf#注意格式对齐configsetupnat_traversal=yesvirtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12oe=offprotostack=netkeyconn%defaultForceencaps=yesconnL2TP-PSK-NATrightsubnet=vhost:%privalso=L2TP-PSK-noNATconnL2TP-PSK-noNAT#定义一个VPN的连接,L2TP-PSK-noNAT是这个连接的名字authby=secretpfs=noauto=add#ipsec启动后,VPN1连接处于等待状态keyingtries=3rekey=noikelifetime=8hkeylife=1htype=transportleft=10.15.44.132#vpn服务器外网ipleftprotoport=17/1701#vpn服务器端口,17指协议号UDP协议1701指端口号right=%any#我们目前这种方式vpn比较简单,所以只配置了一方rightprotoport=17/%any#enableDPD(DeadPeerDectection)死连接检测dpddelay=40dpdtimeout=130dpdaction=clear#leftnexthop=%defaultroute #rightnexthop=%defaultroute[root@localhost~]#cp/etc/ipsec.secrets{,.20161207bak}[root@localhost~]#vim/etc/ipsec.secrets#设置IPSec预共享密钥include/etc/ipsec.d/*.secrets10.15.44.132%any:PSK PASSWORD #外网IP地址%any:PSK“预共享密钥”[root@localhost~]#foreachin/proc/sys/net/ipv4/conf/* echo0 $each/accept_redirects echo0 $each/send_redirects done[root@localhost~]#serviceipsecrestart#重启IPSec,此步同ipsecrestart,验证Missingcontrolfile/var/run/pluto/pluto.ctl-isplutorunning?StartingplutoIKEdaemonforIPsec:.[OK][root@localhost~]#ipsecrestartRedirectingto:serviceipsecstopShuttingdownplutoIKEdaemon002shuttingdownRedirectingto:serviceipsecstartStartingplutoIKEdaemonforIPsec:.[OK][root@localhost~]#ipsecverify#如果正常运行,将会得到类似下面的输出:VerifyinginstalledsystemandconfigurationfilesVersioncheckandipsecon-path [OK]Libreswan3.15(netkey)on2.6.32-642.el6.x86_64CheckingforIPsecsupportinkernel [OK]NETKEY:TestingXFRMrelatedprocvaluesICMPdefault/send_redirects [OK]ICMPdefault/accept_redirects [OK]XFRMlarvaldrop [OK]Plutoipsec.confsyntax [OK]Hardwarerandomdevice [N/A]Checkingrp_filter [ENABLED]/proc/sys/net/ipv4/conf/default/rp_filter [ENABLED]/proc/sys/net/ipv4/conf/lo/rp_filter [ENABLED]/proc/sys/net/ipv4/conf/eth1/rp_filter [ENABLED]rp_filterisnotfullyawareofIPsecandshouldbedisabledCheckingthatplutoisrunning [OK]PlutolisteningforIKEonudp500 [OK]PlutolisteningforIKE/NAT-Tonudp4500 [OK]Plutoipsec.secretsyntax [OK]Checking ip command [OK]Checking iptables command [OK]Checking prelink commanddoesnotinterferewithFIPS [PRESENT]Checkingforobsoleteipsec.confoptions [OK]OpportunisticEncryption [DISABLED]ipsecverify:encountered7errors-see manipsec_verify forhelp[root@localhost~]#chkconfigipsecon

遇到的问题:

1、Two or more interfacesfound, checking IP forwarding [Failed]

[root@localhost~]#vim/etc/sysctl.confnet.ipv4.ip_forward=1[root@localhost~]#sysctl-p

2、Checking that pluto isrunning [Failed]

[root@localhost~]#cd/var/run/pluto/[root@localhostpluto]#ipsecpluto[root@localhostpluto]#lspluto.ctlpluto.pid[root@localhostpluto]#ipsecverify

3、ICMP default/send_redirects [NOT DISABLED]

[root@L2TP-VPNxl2tpd-1.3.6]#ipsecverifyNETKEY:TestingXFRMrelatedprocvaluesICMPdefault/send_redirects [NOTDISABLED]Disable/proc/sys/net/ipv4/conf/*/send_redirectsorNETKEYwillactonorcausesendingofbogusICMPredirects!ICMPdefault/accept_redirects [NOTDISABLED]

根据提示,需要关闭sendredirects和acceptredirects:

[root@L2TP-VPNxl2tpd-1.3.6]#sysctl-a|grep-e accept_redirects net.ipv4.conf.all.accept_redirects=0net.ipv4.conf.default.accept_redirects=1net.ipv4.conf.lo.accept_redirects=1net.ipv4.conf.eth0.accept_redirects=1net.ipv6.conf.all.accept_redirects=1net.ipv6.conf.default.accept_redirects=1net.ipv6.conf.lo.accept_redirects=1net.ipv6.conf.eth0.accept_redirects=1[root@L2TP-VPNxl2tpd-1.3.6]#

根据网卡数量,选项个数无法确定#,其中也可能会包含IPv6的选项,IPv6的不需要改,可以直接通过下面的脚本把上面显示的所有IPv4的选项全部设置为 0

#!/bin/bashforeachin/proc/sys/net/ipv4/conf/*echo0 $each/send_redirectsecho0 $each/accept_redirectsdone

修改完成后,再进行一次 ipsec 验证即可看到结果

三、安装 配置ppp:提供用户名、密码 认证

[root@localhost~]#yum-yinstallppp[root@localhost~]#rpm-qa|grep-ippprp-pppoe-3.10-16.el6.x86_64ppp-2.4.5-10.el6.x86_64[root@localhost~]#vim/etc/ppp/options.xl2tpd#如果文件不存在直接新建就好了require-mschap-v2#用来支持windows7,windows8连接ms-dns192.168.100.189#分配给客户机的DNS地址ms-dns202.96.209.133#ms-wins192.168.1.2#ms-wins192.168.1.4noccp#asyncmap0crtscts#lock#hide-password#modemidle1800mtu1410mru1410nodefaultroutedebug#namexl2tpdproxyarpconnect-delay5000#lcp-echo-interval30#lcp-echo-failure4[root@localhost~]#vim/etc/ppp/chap-secrets#添加用户名/密码(客户端登陆时的用户名密码)#SecretsforauthenticationusingCHAP#clientserversecretIPaddresses#userserverpasswordipjustin*51cto*#justinxl2tpd51cto*#上面的xl2tpd对应上面etc/ppp/options.xl2tpd文件中的namexl2tpd

/etc/ppp/options.xl2tpd 如果文件不存在直接新建或者cpxl2tpd-1.3.6/examples/ppp-options.xl2tpd

四、安装 配置L2TP:提供L2TP VPN服务

1、安装

[root@localhost~]#yum-yinstallxl2tpdLoadedplugins:fastestmirror,refresh-packagekit,securitySettingupInstallProcessLoadingmirrorspeedsfromcachedhostfile*base:mirrors.aliyun.com*extras:mirrors.aliyun.com*updates:mirrors.tuna.tsinghua.edu.cnbase|3.7kB00:00extras|3.4kB00:00updates|3.4kB00:00Nopackagexl2tpdavailable.Error:Nothingtodo[root@localhost~]#wget[root@localhost~]#yuminstall-ylibpcap-devel^C#xl2tpd的一个依赖,不然编译会报错[root@localhost~]#tarzxvfxl2tpd-1.3.6.tar.gz[root@localhost~]#cdxl2tpd-1.3.6[root@localhostxl2tpd-1.3.6]#make[root@localhostxl2tpd-1.3.6]#makeinstall[root@localhostxl2tpd-1.3.6]#mkdir/etc/xl2tpd[root@localhostxl2tpd-1.3.6]#cpdoc/l2tpd.conf.sample/etc/xl2tpd/xl2tpd.conf[root@localhostxl2tpd-1.3.6]#cpdoc/l2tp-secrets.sample/etc/xl2tpd/xl2tp-secrets[root@localhostxl2tpd-1.3.6]#vim/etc/xl2tpd/xl2tpd.conf[global];port=1701#这个在文件是被注释掉的意思,如果要改端口号,改成1723是不行的,l2tp客户端好像不能改端口[lnsdefault]iprange=10.0.0.2-10.0.255.254#vpn连接成功之后,服务器给客户端分配的ip地址,这个不要与局域网ip段重合localip=10.0.0.1#不是外网地址,也不是内网地址,而是虚拟网关的IP地址,这个没有开启客户端连接时候会提示localhostpppd[3929]:CouldnotdeterminelocalIPaddresslengthbit=yesrequirechap=yesrefusepap=yesrefuseauthentication=yespppdebug=yesname=LinuxVPNserverpppoptfile=/etc/ppp/options.xl2tpd[root@localhostxl2tpd-1.3.6]#

xl2tpd.conf也可以使用默认示例配置文件examples/xl2tpd.conf,这个文件更加简洁。centos7后的libreswan在global中开启ipsec saref = yes #启用xl2tpd的ipsec支持,listen-addr = 1.2.3.4 #1.2.3.4为对外提供连接的服务器地址

启用包转发

[root@localhost~]#vim/etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.default.rp_filter=0net.ipv4.conf.default.accept_source_route=0kernel.sysrq=0kernel.core_uses_pid=1net.ipv4.tcp_syncookies=1kernel.msgmnb=65536kernel.msgmax=65536kernel.shmmax=68719476736kernel.shmall=4294967296net.core.xfrm_larval_drop=1[root@localhost~]#sysctl-p

防火墙配置

[root@localhost~]#iptables-AINPUT-pudp--destination-port1701-jACCEPT[root@localhost~]#iptables-tnat-APOSTROUTING-s10.0.0.0/24-oeth0-jMASQUERADE[root@localhost~]#iptables-AINPUT-jACCEPT[root@localhost~]#iptables-AOUTPUT-jACCEPT[root@localhost~]#/etc/init.d/iptablessave[root@localhost~]#/etc/init.d/iptablesrestart

iptables -t nat -A POSTROUTING -j MASQUERADE

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

iptables -A FORWARD -m state –state RELATED,ESTABLISHED -j ACCEPT

iptables -I FORWARD -s 10.0.0.0/24 -j ACCEPT

iptables -I FORWARD -d 10.0.0.0/24 -j ACCEPT

iptables -A FORWARD -j REJECT

iptables -A INPUT -p udp -m state –state NEW -m udp –dport 1701 -j ACCEPT

iptables -A INPUT -p udp -m state –state NEW -m udp –dport 500 -j ACCEPT

iptables -A INPUT -p udp -m state –state NEW -m udp –dport 4500 -j ACCEPT

启动

参数D表示让l2tpd在前台运行,显示整个l2tpd的运行信息,如果不加D,l2tpd在后台运行;其它参数查看目录下的README*/

[root@localhostxl2tpd-1.3.6]#./xl2tpd-Dxl2tpd[2144]:setsockoptrecvref[30]:Protocolnotavailablexl2tpd[2144]:L2TPkernelsupportnotdetected(trymodprobingl2tp_pppandpppol2tp)xl2tpd[2144]:open_controlfd:Unabletoopen/var/run/xl2tpd/l2tp-controlforreading.[root@localhostxl2tpd-1.3.6]#mkdir/var/run/xl2tpd/[root@localhostxl2tpd-1.3.6]#touch/var/run/xl2tpd/l2tp-control[root@localhostxl2tpd-1.3.6]#./xl2tpd-Dxl2tpd[2275]:setsockoptrecvref[30]:Protocolnotavailablexl2tpd[2275]:L2TPkernelsupportnotdetected(trymodprobingl2tp_pppandpppol2tp)xl2tpd[2275]:xl2tpdversionxl2tpd-1.3.6startedonlocalhost.localdomainPID:2275xl2tpd[2275]:WrittenbyMarkSpencer,Copyright(C)1998,Adtran,Inc.xl2tpd[2275]:ForkedbyScottBalmosandDavidStipp,(C)2001xl2tpd[2275]:InheritedbyJeffMcAdams,(C)2002xl2tpd[2275]:ForkedagainbyXelerance(www.xelerance.com)(C)2006xl2tpd[2275]:ListeningonIPaddress0.0.0.0,port1701[root@localhostxl2tpd-1.3.6]#netstat-naptlu|grepxl2tpdudp000.0.0.0:17010.0.0.0:*3695/./xl2tpd[root@localhostxl2tpd-1.3.6]#vim/etc/init.d/xl2tpd#!/bin/sh#xl2tpdThisshellscripttakescareofstartingandstoppingl2tpd.#chkconfig:-8030#description:Layer2TunnellingProtocolDaemon(RFC2661)#processname:xl2tpd#config:/etc/xl2tpd/xl2tpd.conf#pidfile:/var/run/xl2tpd.pid#ServicenameSERVICE=xl2tpd#Sourcefunctionlibrary../etc/rc.d/init.d/functions#Sourcenetworkingconfiguration../etc/sysconfig/networkif[${NETWORKING}= no ]exit0[-x/usr/local/sbin/$SERVICE]||exit0RETVAL=0start(){echo-n Starting$SERVICE: if[!-d/var/run/xl2tpd]mkdir/var/run/xl2tpddaemon/usr/local/sbin/$SERVICERETVAL=$?[$RETVAL-eq0] touch/var/lock/subsys/$SERVICEecho return$RETVALstop(){echo-n Stopping$SERVICE: killproc$SERVICERETVAL=$?[$RETVAL-eq0] rm-f/var/lock/subsys/$SERVICEreturn$RETVALrestart(){start#Seehowwewerecalled.case $1 instart)startstop)status)status$SERVICERETVAL=$?restart|reload)restartcondrestart)[-f/var/lock/subsys/$SERVICE] restart||:echo Usage:$SERVICE{start|stop|status|restart|reload|condrestart} exit1[root@localhostxl2tpd-1.3.6]#chmod+x/etc/init.d/xl2tpd[root@localhostxl2tpd-1.3.6]#chkconfig--addxl2tpd[root@localhostxl2tpd-1.3.6]#chkconfig--addpppoe-server[root@localhostxl2tpd-1.3.6]#chkconfig--addipsec[root@localhostxl2tpd-1.3.6]#chkconfigxl2tpdon[root@localhostxl2tpd-1.3.6]#chkconfigpppoe-serveron[root@localhostxl2tpd-1.3.6]#chkconfigipsecon[root@localhostxl2tpd-1.3.6]#/etc/init.d/pppoe-serverrestart[root@localhostxl2tpd-1.3.6]#/etc/init.d/ipsecrestart[root@localhostxl2tpd-1.3.6]#/etc/init.d/xl2tpdrestart[root@localhostxl2tpd-1.3.6]#/etc/rc.d/rc.local/etc/init.d/xl2tpdstart[root@localhostxl2tpd-1.3.6]#

日志信息:

[root@localhostxl2tpd]#tail-f/var/log/messagesDec912:13:02localhostxl2tpd[2457]:WrittenbyMarkSpencer,Copyright(C)1998,Adtran,Inc.Dec912:13:02localhostxl2tpd[2457]:ForkedbyScottBalmosandDavidStipp,(C)2001Dec912:13:02localhostxl2tpd[2457]:InheritedbyJeffMcAdams,(C)2002Dec912:13:02localhostxl2tpd[2457]:ForkedagainbyXelerance(www.xelerance.com)(C)2006Dec912:13:02localhostxl2tpd[2457]:ListeningonIPaddress0.0.0.0,port1701

五、测试拨号是否成功

端口测试:

一般我们用telnet测试端口连通性,但是telnet使用的是tcp协议,也就是说telnet只能检测tcp的这个端口打开了没。除了telnet以外,还有一个命令nc也可查看端口是否打开,它可以检测tcp和udp端口连通性。

[root@localhostppp]#nc-vuz192.168.100.2431707Connectionto192.168.100.2431707port[udp/vdmplay]succeeded![root@localhostppp]#nc-vuz10.10.2.8080Connectionto10.10.2.8080port[udp/http]succeeded![root@localhostppp]#

-i 延迟秒数 设置时间间隔,以便传送信息及扫描通信端口。

-l 使用监听模式,管控传入的资料。

-n 直接使用IP地址,而不通过域名服务器。

-o 输出文件 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。

-p 通信端口 设置本地主机使用的通信端口。

-r 乱数指定本地与远端主机的通信端口。

-s 来源地址 设置本地主机送出数据包的IP地址。

-u 使用UDP传输协议。

-v 显示指令执行过程。

-w 超时秒数 设置等待连线的时间。

-z 使用0输入/输出模式,只在扫描通信端口时使用。

客户端连接测试:

windows server 2008下:L2TP客户端设置

1、右键选择创建好的VPN连接属性,点击“安全”

VPN类型:使用IPsec 的第2层隧道协议(L2TP/IPsec)

数据加密:需要加密(如果服务器拒绝将断开连接)

高级设置:使用预共享密钥作为身份验证,密钥对应/etc/ipsec.secrets中设置的密钥

2、修改注册表:运行:regedit.exe

开始 运行 regedit.exe找到下面这个路径:

HEKY_LOCAL_MACHINE/SYTEM/CUrrentCOntrolSet/Services/RasMan/Parameters,新增或修改ProhibitIpSec的值(类型DWORD)为1

完成后测试连接是否正常,若仍提示连接不上,重启电脑再次尝试。

如果还是无法连接查看服务端日志/var/log/messages

是清晰的又是朦胧的,是一杯苦茶,最后却品出清雅之香。

CentOS6.8下搭建Ipsec+L2TP VPN服务推荐

相关文章:

你感兴趣的文章:

标签云: