l2tp/ipsec搭建xxx

 

依赖环境

yum update
yum install make gcc gmp-devel xmlto bison flex libpcap-devel

 

openswan(ipsec)

 

yum install openswan

 

接下来配置ipsec。ipsec的配置文件是/etc/ipsec.conf,安装好openswan后,配置文件是默认内容。

config setup
    nat_traversal=yes
  #virtual_private=%v4:***客户端内网地址网段/24 virtual_private
=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off protostack=netkey conn 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=xxx.xxx.xxx.xxx leftprotoport=17/1701 right=%any rightprotoport=17/%any

 

上面有一行是left=xxx.xx.xx.xx,这里要把left的值改为你的服务器的ip地址,外网可以访问的IP地址。

接下来配置密钥。L2TP比PPTP多了一个密钥项,这也是它比PPTP更安全的原因之一。这个密钥其实就是一个密码,不同于用户的登录密码,它相当于一个设备之间通信的密钥。它的配置文件是/etc/ipsec.secrets,然后把下面的内容放到新建的配置文件中.

xxx.xxx.xxx.xxx %any: PSK "YourPSK"

同理,上面的xxx.xxx.xxx.xxx是服务器的公网IP,而后面的"YourPsk"中的YourPsk就是密钥的内容。你可以改为自己的任意字符串。反正在你连接登录VPN的时候,是需要这个PSK的。

 

运行ipsec

ipsec setup restart
systemctl enable ipsec

验证

ipsec verify

 

 只要没有failed就可以

 

PPP

PPP就是一个拨号软件,用来提供用户登录的用户名和密码验证用的。所以在上面那篇文章里,PPTP搭建的VPN也会用到PPP。所以,实际上,PPTP和L2TP是可以共存在一台服务器上的,而且它们还可以共享用户登录账号信息,因为它们都用PPP作为用户登录连接。

 

 

yum install ppp
vim /etc/ppp/chap-secrets
# vim /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server    secret                  IP addresses
    admin         *         admin                    *

有两个星号,第一个表示以后所有使用PPP作为用户认证的服务,都可以使用这个用户名和密码,包括PPTP和L2TP都可以使用loginname。第二个星号表示这个用户可以从任何IP登录。如果你希望控制一下,可以把星号改成具体的值来限制。

 

xl2tpd

就像pptp和pptpd一样,L2TP也依赖于xl2tpd。

yum install xl2tpd

安装好xl2tpd之后,我们进行配置。它的配置文件有两个,一个是/etc/xl2tpd/xl2tpd.conf一个是/etc/ppp/options.xl2tpd,其实第一个文件把第二个文件包含进来而已。

 

vim /etc/xl2tpd/xl2tpd.conf

[global]
ipsec saref = yes
listen-addr = xxx.xxx.xxx.xxx
[lns default]
#ip range = ***客户端内网起始IP地址-***客户端内网结束IP地址
#local ip = ***服务器内网IP地址
ip range = 192.168.1.2-192.168.1.100 local ip = 192.168.1.1 refuse chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes

 

和上面提到的一样xxx.xxx.xxx.xxx也要改成你自己的服务器外网IP。

 

vim /etc/ppp/options.xl2tpd

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

这样,xl2tpd的配置就好了。

启动xl2tpd服务:

systemctl start xl2tpd
systemctl enable xl2tpd

 

 

sysctl

 

sysctl的功能是开启转发。它能够将服务器内部的ip地址关系进行转发和映射,从而实现我们链接VPN之后的用户,能够通过内部的一些端口进行请求的转发。

 

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 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.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

 

sysctl --load

 

 

for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/accept_redirects
    echo 0 > $each/send_redirects
done

 

 

 

iptables

 

我以前已经比较详细的介绍过iptables了,虽然它是个防火墙软件,但是在上介绍PPTP的VPN搭建的时候,我已经说过了,我们需要iptables来作为外部请求的转发。sysctl帮我们解决的是,一个用户通过ppp连接到服务器之后,他发的请求在服务器内部是怎样实现映射的,所以,没有iptables,用户通过上面的那些配置,就可以登录连接到L2TP VPN了,但是很有可能是连接上无法上网,因为外部的请求还没有转发啊。所以,我们执行下面的这些命令,来使iptables实现转发。

iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT
iptables -A FORWARD -m policy --dir in --pol ipsec -j ACCEPT
iptables -t nat -A POSTROUTING -m policy --dir out --pol none -j MASQUERADE
iptables -A FORWARD -i ppp+ -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT
iptables -A INPUT -p udp --dport 500 -j ACCEPT
iptables -A INPUT -p udp --dport 4500 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

 

 

不过上面的操作可能并不是我们最终想要的结果,为什么呢?因为我们执行iptables -A这样的操作,会在iptables的规则文件中追加这条规则。但是如果你的配置中,原本就已经通过REJECT结束了规则的匹配怎么办?你新加的规则根本不起作用。我的解决办法就是查看iptables的真实规则,并把REJECT相关的规则放到末尾。iptables的规则文件是/etc/sysconfig/iptables,你可以打开看一下有没有出现我说的情况,如果有的话,调整一下规则顺序,把上面新加的规则全部移动到REJECT相关的行的前面去。如果你不懂iptables,最好先学习一下

 

总结

这个时候,我们在来运行一下:

ipsec setup restart
ipsec verify

 

这个时候,你可能就已经可以看到正常的信息了。

我们简单总结一下,我们这篇教程里面用到的软件有:

openswan(ipsec) : 提供一个密钥
ppp :提供用户名和密码
xl2tpd : 提供L2TP服务
sysctl : 提供服务器内部转发
iptables : 提供请求从服务器内部转向外部,外部响应转向服务器内部

 

 

Windows 7及以上系统连接L2TP over IPSec ***不稳定解决方法:

 

  • 新建.reg后缀名的文件,将下列内容添加至该文件并双击运行,之后重启电脑:*

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent]
"AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

 

posted @ 2020-09-11 14:28  ascertain  阅读(2530)  评论(0编辑  收藏  举报