搭建L2TP/IPSEC模式vpn

4-15 1,287 views

写在前:上一个VPS搭建好的时候就安装了ssh和vpn(pptp vpn),但是非常不稳定,特别是vpn,经常连着连着服务就宕了。

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

提示:1、确定你用的是xen的vps;2、首先需要卸载已安装的openswan,因为yum install安装的openswan版本可能有bug,会导致莫名错误。

一、安装必备软件

yum install make gcc gmp-devel bison flex lsof

二、安装IPsec


wget https://download.openswan.org/openswan/openswan-2.6.50.tar.gz

tar zxvf openswan-2.6.50.tar.gz

cd openswan-2.6.50

make programs install

通过阅读INSTALL这个文件得知,安装命令为make programs install。

三、配置IPsec

编辑配置文件/etc/ipsec.conf

#备份
cp /etc/ipsec.conf /etc/ipsec.conf.bak
vim /etc/ipsec.conf
#修改如下
</pre>
<pre>config setup
 nat_traversal=yes
 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=YOUR.SERVER.IP.ADDRESS
 leftprotoport=17/1701
 right=%any
 rightprotoport=17/%any

其中一些设置含义可以参考/etc/ipsec.d/examples/l2tp-psk.conf

其中一些设置含义可以参考/etc/ipsec.d/examples/l2tp-psk.conf

 

四、设置共享密码PSK

编辑配置文件/etc/ipsec.secrets

vim /etc/ipsec.secrets[enter]
YOUR.SERVER.IP.ADDRESS %any: PSK “YourSharedSecret”

 

五、修改包转发设置

 

echo 1 >/proc/sys/net/core/xfrm_larval_drop

iptables -t nat -A POSTROUTING -j MASQUERADE

修改内核设置,支持转发,编辑/etc/sysctl.conf:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
net.ipv4.conf.eth1.rp_filter = 0
net.ipv4.conf.lo.rp_filter = 0

生效:/sbin/sysctl –p
service ipsec restart
ipsec verify
若还是显示
/proc/sys/net/ipv4/conf/all/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/default/rp_filter [ENABLED]
/proc/sys/net/ipv4/conf/eth0/rp_filter [ENABLED]
直接 echo “0” > /proc/sys/net/ipv4/conf/all/rp_filter
echo “0”/proc/sys/net/ipv4/conf/default/rp_filter
echo “0” /proc/sys/net/ipv4/conf/eth0/rp_filter

若显示

ICMP default/send_redirects [NOT DISABLED]

#!/bin/bash
for each in /proc/sys/net/ipv4/conf/*
do
    echo 0 > $each/send_redirects
    echo 0 > $each/accept_redirects
done
执行此脚本即可,然后重启ipsec 再次ipsec verify验证

六、重启IPSec

service ipsec restart

ipsec verify

结果显示如下:

ipsecVerify

提示:

如果出现:Pluto listening for IKE on udp 500 [FAILED]

安装lsof:yum install lsof

如果出现:Checking NAT and MASQUERADEing [N/A]

iptables -t nat -A POSTROUTING -j MASQUERADE

 

七、安装L2TP(xl2tpd和rp-l2tp)

xl2tpd是由Xelerance Corporation维护的l2tpd应用。但是xl2tpd没有l2tp-control,需要从rp-l2tp这个里面提取。所以要装这两个软件包。

安装必备软件:

yum install libpcap-devel ppp policycoreutils

安装xl2tpd和rp-l2tp:


wget http://sourceforge.net/projects/rp-l2tp/files/rp-l2tp/0.4/rp-l2tp-0.4.tar.gz
tar -zxvf rp-l2tp-0.4.tar.gz
cd rp-l2tp-0.4
./configure --prefix=/usr/local/rp-l2tp
make
cp handlers/l2tp-control /usr/local/sbin/
mkdir /var/run/xl2tpd/
ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control

wget https://github.com/xelerance/xl2tpd/archive/v1.3.11.tar.gz
tar -zxvf v1.3.11.tar.gz
cd xl2tpd-1.3.11
make
make install

新建配置文件

mkdir /etc/xl2tpd
vim /etc/xl2tpd/xl2tpd.conf

[global]
ipsec saref = yes

[lns default]
ip range = 10.82.88.2-10.82.88.254
local ip = 10.82.88.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

配置ppp,建立options.xl2tpd文件:

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

设置拨号用户名和密码:

vim /etc/ppp/chap-secrets
# Secrets for authentication using CHAP
# client server secret IP addresses
ycy * ycy123 *

添加iptables转发规则:

iptables --table nat --append POSTROUTING --jump MASQUERADE

/etc/init.d/ipsec restart

/usr/local/sbin/xl2tpd

/usr/local/sbin/xl2tpd -D 查看是否正常启动

连接了vpn但是不能上网:解决办法 右键vpn-属性-选择网络-ipv4-选择高级-取消“在远程服务器上使用默认网关”的勾选,重新连接vpn即可
iptables 开了的话也是不能访问,下面补充下需要开启那些端口才能访问。

ipsec/l2tp 需要用到udp 500 、4500、1701这几个端口


# iptables -A INPUT -p udp --dport 500 -j ACCEPT

# iptables -A INPUT -p udp --dport 4500 -j ACCEPT

# iptables -A INPUT -p udp --dport 1701 -j ACCEPT

# iptables -A FORWARD -s 192.168.29.0/24 -j ACCEPT
# iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT   (这两条forward是表示允许其他机器通过vpn通过此机器访问其他内网机器,一般用于数据库连接)

#iptables -t nat -A POSTROUTING -s 192.168.11.0/255.255.255.0 -o eth0 -j MASQUERADE
#让192.168.11.0网段的数据通过eth0转发出去 (注意在本地windows勾选远程服务器上使用默认网关)
#/etc/init.d/iptables save
#/etc/init.d/iptables restart

注意:若Iptables配置了禁止规则,以上5条规则需放置在禁止规则的上面,因为iptables是由上至下匹配的。
如配置了-A INPUT -j REJECT –reject-with icmp-host-prohibited 禁止规则

 

总结:

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

客户端连接vpn网上百度即可!

##iptables -t nat -A PREROUTING -p tcp -m tcp –dport 8055 -j DNAT –to-destination 172.16.29.157:8055

 

zabbix–api接口

Zabbix_api4.4官方文档 Zabbix_api3.4中文文档 一、初识api(zabbix4.4.4版本) API(Application Programming Interface,应用程序编程接口)是一些预先定义的...

阅读全文

将配置文件构造成json格式让zabbix自动发现监控项

一、简单介绍 上文我们使用了zabbix的自动发现的监控来监控服务的端口,重点写了zabbix的发现的一个原理和过程,但是实际上我们服务器的配置是比较复杂的,而...

阅读全文

zabbix自动发现监控项

一、应用场景及zabbix简单安装 游戏服务器,游戏程序经常开区,合区。导致监控项会时常变化(当然也可以写一个自动检测脚本,检测所有程序都正常,返回ok就行...

阅读全文

欢迎留言