L2TP/IPSec一键安装脚本

技术 秋水逸冰 2477907浏览 1097评论

Great Wall

本脚本适用环境:
系统支持:CentOS6+,Debian7+,Ubuntu12+
内存要求:≥128M
更新日期:2017 年 05 月 28 日

关于本脚本:
名词解释如下
L2TP(Layer 2 Tunneling Protocol)
IPSec(Internet Protocol Security)
IKEv2 (Internet Key Exchange v2)
能实现 IPsec 的目前总体上有 openswan,libreswan,strongswan 这3种。
libreswan 是基于 openswan 的 fork,所以现在各个发行版基本已经看不到 openswan 的身影了。
当然也有使用 strongswan 的。

之所以要更新 L2TP 一键安装脚本,是因为随着各个 Linux 发行版不断推陈出新,原有的脚本已经不适应现在的需求。
本脚本通过编译安装最新版 libreswan 来实现 IPSec(CentOS7 下则是全部 yum 安装),yum 或 apt-get 来安装 xl2tpd,再根据各个发行版的使用方法不同,部署防火墙规则。

隆重介绍 Docker 版 L2TP/IPsec

由于此脚本已经很久不更新,因此已经不推荐使用该脚本来安装了。OK,下面隆重介绍一下 Docker 版 L2TP/IPsec。
使用 Docker 的好处就是对当前系统的环境没有破坏性,随时可以新建或者删除容器,而且方便快捷,实在是居家必备。
具体请查看《介绍几款 Docker 镜像》此文中的【L2TP/IPsec VPN Server Docker Image】小节。
以及该项目的 Docker Hub 页面,或 Github 页面

写在前面:

基于 OpenVZ 虚拟化技术的 VPS 需要开启TUN/TAP才能正常使用,购买 VPS 时请先咨询服务商是否支持开启 TUN/TAP。

OpenVZ 虚拟的 VPS 需要系统内核支持 IPSec 才行。也就是说,母服务器的内核如果不支持的话那就没办法,只能换 VPS。
因此,一般不建议在 OpenVZ 的 VPS 上安装本脚本。脚本如果检测到该 VPS 为 OpenVZ 架构,会出现警告提醒。

如何检测是否支持TUN模块?
执行命令:
cat /dev/net/tun
如果返回信息为:cat: /dev/net/tun: File descriptor in bad state 说明正常

如何检测是否支持ppp模块?
执行命令:
cat /dev/ppp
如果返回信息为:cat: /dev/ppp: No such device or address 说明正常
当然,脚本在安装时也会执行检查,如果不适用于安装,脚本会予以提示。

使用方法:

root 用户登录后,运行以下命令:

wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/master/l2tp.sh
chmod +x l2tp.sh
./l2tp.sh

执行后,会有如下交互界面

L2TP

Please input IP-Range:
(Default Range: 192.168.18):
输入本地IP段范围(本地电脑连接到VPS后给分配的一个本地IP地址),直接回车意味着输入默认值192.168.18

Please input PSK:
(Default PSK: teddysun.com):
PSK意为预共享密钥,即指定一个密钥将来在连接时需要用到,直接回车意味着输入默认值teddysun.com

Please input Username:
(Default Username: teddysun):
Username意为用户名,即第一个默认用户。直接回车意味着输入默认值teddysun

Please input teddysun’s password:
(Default Password: Q4SKhu2EXQ):
输入用户的密码,默认会随机生成一个10位包含大小写字母和数字的密码,当然你也可以指定密码。

ServerIP:your_server_main_IP
显示你的 VPS 的主 IP(如果是多 IP 的 VPS 也只显示一个)

Server Local IP:192.168.18.1
显示你的 VPS 的本地 IP(默认即可)

Client Remote IP Range:192.168.18.2-192.168.18.254
显示 IP 段范围

PSK:teddysun.com
显示 PSK

Press any key to start…or Press Ctrl+c to cancel
按下任意按键继续,如果想取消安装,请按Ctrl+c键

安装完成后,脚本会执行 ipsec verify 命令并提示如下:

If there are no [FAILED] above, then you can connect to your
L2TP VPN Server with the default Username/Password is below:

ServerIP:your_server_IP
PSK:your PSK
Username:your usename
Password:your password

If you want to modify user settings, please use command(s):
l2tp -a (Add a user)
l2tp -d (Delete a user)
l2tp -l (List all users)
l2tp -m (Modify a user password)
Welcome to visit https://teddysun.com/448.html
Enjoy it!

如果你要想对用户进行操作,可以使用如下命令:
l2tp -a 新增用户
l2tp -d 删除用户
l2tp -m 修改现有的用户的密码
l2tp -l 列出所有用户名和密码
l2tp -h 列出帮助信息

其他事项:

1、脚本在安装完成后,已自动启动进程,并加入了开机自启动。
2、脚本会改写 iptables 或 firewalld 的规则。
3、脚本安装时,会即时将安装日志写到 /root/l2tp.log 文件里,如果你安装失败,可以通过此文件来寻找错误信息。

使用命令:

ipsec status (查看 IPSec 运行状态)
ipsec verify (查看 IPSec 检查结果)
/etc/init.d/ipsec start|stop|restart|status (CentOS6 下使用)
/etc/init.d/xl2tpd start|stop|restart (CentOS6 下使用)
systemctl start|stop|restart|status ipsec (CentOS7 下使用)
systemctl start|stop|restart xl2tpd (CentOS7 下使用)
service ipsec start|stop|restart|status (Debian/Ubuntu 下使用)
service xl2tpd start|stop|restart (Debian/Ubuntu 下使用)

更新日志

2017 年 05 月 28 日:
升级 libreswan 到版本 3.20。
修正 libreswan 的若干配置问题。
修正 xl2tpd 的端口监听配置问题。
修正在 CentOS 6 对 libevent2 的依赖问题,改为 yum 安装 libevent2-devel。
测试表明,在内网环境的 VPS 里(如AWS, IDCF,GCE,腾讯云,阿里云等)也可以正常使用了。

2017 年 02 月 25 日:
升级 libreswan 到版本 3.19。

2016 年 09 月 12 日:
修正了在 CentOS 6 下 libevent2 依赖的问题;
新增了一个 -m 选项,用以修改现有用户的密码。

2016 年 08 月 13 日:
修正 Debian 8 下的 sd-daemon.h: No such file or directory 问题,是由于缺少依赖包 libsystemd-daemon-dev 导致的。

2016 年 08 月 05 日:
升级 libreswan 到版本 3.18。

2016 年 06 月 10 日:
脚本在安装完成后,新增了几个命令,便于操作用户
l2tp -a 新增用户
l2tp -d 删除用户
l2tp -l 列出所有用户
l2tp -h 列出帮助信息

2016 年 04 月 25 日:
4、在 Vultr 的 Debian 7的系统模板下安装时,软件包 libcurl4-nss-dev 会出现依赖错误。如下所示:

The following packages have unmet dependencies:
libcurl4-nss-dev : Depends: libldap2-dev but it is not going to be installed
Depends: librtmp-dev but it is not going to be installed

而 libldap2-dev 和 librtmp-dev 又依赖了其他几种软件包。总之最后的依赖关系如下:

libldap2-dev : Depends: libldap-2.4-2 (= 2.4.31-2+deb7u1) but 2.4.31+really2.4.40+dfsg-1+deb8u1~bpo70+1 is to be installed
librtmp-dev : Depends: libgnutls-dev but it is not going to be installed
libgnutls-dev : Depends: libp11-kit-dev (>= 0.4) but it is not going to be installed
libp11-kit-dev : Depends: libp11-kit0 (= 0.12-3) but 0.20.7-1~bpo70+1 is to be installed

那么解决办法就是把最底层的依赖包 libp11-kit0 先卸载掉,然后再安装 libcurl4-nss-dev 即可。

apt-get -y remove libp11-kit0
apt-get -y --no-install-recommends install libcurl4-nss-dev wget

然后再运行脚本安装即可。

2016 年 04 月 22 日:
修复了在 Ubuntu 16.04 下因为默认缺少 python 命令而导致 ipsec verify 等命令不能用的问题。

2016 年 04 月 19 日:
修复了在 Debian 7 下因为 libnss3 和 libnspr4 的版本过低而导致编译 libreswan 失败的问题。

2016 年 04 月 18 日:
目前在 Debian 7 上测试的结果,因为 libnss3 和 libnspr4 的版本过低而导致编译 libreswan 失败。临时解决办法是 dpkg 安装 libnss3_3.17.2 和 libnspr4_4.10.7 的 deb 包后重试。

参考链接:
https://libreswan.org/wiki/3.14_on_Debian_Wheezy
https://github.com/libreswan/libreswan

转载请注明:秋水逸冰 » L2TP/IPSec一键安装脚本

发表我的评论
取消评论

请输入正确答案后提交评论 *超出时限。 请再次填写验证码。

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1097)

  1. 可以和openvpn共存不?
    Z8年前(2016-06-28)回复
  2. Checking ‘prelink’ command does not interfere with FIPS [IN USE] 也就是说prelink在对FIPS起作用这?..这个问题怎么解决呢..百度了好多也没有具体的解决办法
    elich8年前(2016-06-28)回复
    • 这个不影响使用的。只要结果里面没有 [FAILED] 那就表示是可以的。
      秋水逸冰8年前(2016-06-30)回复
  3. 感谢大神,l2tp和pptp都装好了,但是本地尝试访问的时候,pptp的总是提示800错误,l2tp则是619错误。是不是vps上还要做其他设置?谢谢! btw, 本地拨其他商用的pptp是可以通的。
    jetfree8年前(2016-06-26)回复
    • 为什么要都装? 装一个 L2TP 即可。
      秋水逸冰8年前(2016-06-26)回复
      • 装了pptp,不能用才又装了lt2p。可是还是不行啊,用了一个远程机器试(英国的),也不行,是不是服务器上还需要做其他配置啊?
        jetfree8年前(2016-06-26)回复
        • 重装系统,用干净的系统来安装。 VPS 最好是 KVM 或 Xen 架构。
          秋水逸冰8年前(2016-06-26)回复
          • 这个应该是干净的吧,特地买来装vpn的,kvmla的HK服务器,kvm架构的。 上面初始wget都没有
            jetfree8年前(2016-06-26)回复
  4. 你好,连接IOS好像经常断线。有什么办法优化下吗?
    XLL8年前(2016-06-25)回复
  5. 您好,用您的L2TP一键安装脚本总是不成功,所以改用了http://kanmenshu.blogspot.jp/2016/06/centosshandowsockspptpl2tp.html里提供的L2TP一键安装脚本,我看了一下脚本内容,貌似使用的是Strongswan。这个脚本的适配性貌似更好,您看能不能在此基础上做些优化,比如改成能在CentOS7上也可使用的版本呢?
    李丰欣8年前(2016-06-23)回复
    • Strongswan 和 libreswan 实现的都是 IPSec 其他的都是一样的。 不过你说的倒也在理。 改天试试看能不能整合一下。
      秋水逸冰8年前(2016-06-23)回复
  6. 安装后显示全部都OK,但就是没法连接上,请问什么问题呢?跑的是Vultr Centos 6.5
    KY8年前(2016-06-23)回复
    • 呃,这个最好还是发你的安装 log 到我邮箱才能看出点端倪来。 这么一句话,没人知道原因。
      秋水逸冰8年前(2016-06-23)回复
  7. 这个下载地址,有的VPS无法下载,建议换个地址
    Jarod8年前(2016-06-21)回复
    • 我不得不说,你可真会玩,邮箱填个假的就算了,还用我的域名来填。 没办法,我手上可拿来做下载的 VPS 寥寥无几而且都是在国外。 要不你赞助一个高可用的 VPS ?
      秋水逸冰8年前(2016-06-21)回复
  8. 大神能补充下客户端连接的教程不
    星条旗8年前(2016-06-21)回复
    • L2TP 实际上在各个流行的系统里都是默认支持的。无需特别的客户端即可使用。
      秋水逸冰8年前(2016-06-21)回复
  9. 我建议用curl来代替文章内的wget, cenotos7貌似默认不带wget了. 如果是小白,估计看到wget不行, 就不知怎么办了
    Danny8年前(2016-06-21)回复
    • 实话说,该脚本并不怎么适合小白(写的比较粗浅)。 要玩得转,至少得懂一点 Linux 或者 Shell 基础才好。
      秋水逸冰8年前(2016-06-21)回复
  10. 秋大,你好,我用的是亚马逊的一年免费的VPS,用的ubuntu14.0版本系统,安装的L2TP/IPSec一键安装脚本,安装时一切正常,没有什么报错,但为什么我链不上去,客户端的win10 64位安装版,链接时提示:l2tp 连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到一个处理错误 .我根据网上的解决办法,添加注册表ProhibitIpSec键值后还是不行,但提示不同,提示服务器没响应.现我把安装LOG发到你邮箱,麻烦您给我看看,找找原因。谢谢了。.
    剑雨8年前(2016-06-20)回复
    • AWS 应该还需要在控制面板里开启对应端口的吧。 需要用到 500,4500,1701 这 3 个端口。
      秋水逸冰8年前(2016-06-20)回复
      • 前两天我也试过亚马逊的服务器, 脚本安装后也不行,怀疑是网卡的问题, 亚马逊只有两个网卡. 系统为CentOS release 6.8 (Final) 网卡信息 [centos@AWSKR ~]$ ifconfig eth0 Link encap:Ethernet HWaddr 02:65:FE:51:A3:43 inet addr:172.31.2.68 Bcast:172.31.15.255 Mask:255.255.240.0 inet6 addr: fe80::65:feff:fe51:a343/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:1382538 errors:0 dropped:0 overruns:0 frame:0 TX packets:758476 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1378252846 (1.2 GiB) TX bytes:572140817 (545.6 MiB) Interrupt:155 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:154300485 errors:0 dropped:0 overruns:0 frame:0 TX packets:154300485 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:16553210465 (15.4 GiB) TX bytes:16553210465 (15.4 GiB) [centos@AWSKR ~]$
        Danny8年前(2016-06-21)回复
        • 实际上,我并没有在 AWS 下测试过该脚本。 而我也没有保证说,该脚本适用于任何一家 VPS 或 Cloud 环境。 没办法的事情,不能一一测试。 脚本还是比较粗浅的,安装的成功率还是取决于 VPS 的环境,不可能做到面面俱到。 实感抱歉!
          秋水逸冰8年前(2016-06-21)回复
          • 我也是用的aws的机子。同样怀疑是网卡的问题。亚马逊只有一个内网ip网卡。貌似是通过映射出去的。 尝试安装pptpd 安装正常 自己测试了下。确实只有aws的环境会有问题。但是shadowsocks-python脚本可以正常安装使用。自己再慢慢找原因吧。估计是iptables转发上面的问题。因为pptp同样设置了转发。 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE 是可以正常使用的。但是我发现l2tp脚本上面的规则是直接指定到了外网ip。怀疑是这个问题。之后有空再测试下。 最后还是非常感谢,提供了一键脚本。谢谢。
            Terry8年前(2016-06-21)回复
  11. 在KT机房的服务器安装出现这样的错误 环境centos 6.0 64位 到最后出现这个错误 make[3]: *** [unbound.o] Error 1 make[3]: Leaving directory `/root/l2tp/libreswan-3.17/OBJ.linux.x86_64/lib/libswan' make[2]: *** [local-base] Error 2 make[2]: Leaving directory `/root/l2tp/libreswan-3.17/lib/libswan' make[1]: *** [all] Error 2 make[1]: Leaving directory `/root/l2tp/libreswan-3.17/lib' make: *** [all] Error 2 libreswan-3.17 install failed.
    ipceshe8年前(2016-06-19)回复
    • 日志不全。 完整的日志发到我邮箱,可以帮你看下原因何在。
      秋水逸冰8年前(2016-06-20)回复
  12. 阿里云 香港可用区B Centos7 安装脚本后,可以使用, 但服务器重启后,则vpn连接成功但打不开任何网站. yum_install 的时候, firewalld加了转发规则, 但没给firewalld加开机自启动 开机自启动 systemctl enable firewalld 运行firewalld systemctl status firewalld
    Danny8年前(2016-06-19)回复
    • 感谢反馈,已经在 CentOS 7 下添加了自启动和相关确认的代码。
      秋水逸冰8年前(2016-06-19)回复
  13. Opportunistic Encryption 显示disabled iPhone 添加ipsecvpn无法连接 还是我手机设置ipsec有问题
    chinsan8年前(2016-06-18)回复
  14. 安装了无数次VPN,结果一次也没成功过。到现在使用你的自动安装包也没有成功过,不知道是为什么?能帮帮我吗?
    dudo8年前(2016-06-17)回复
  15. 您好,我在vultr.com的VPS上安装,有点问题,服务器环境 OS : CentOS Linux release 7.2.1511 (Core) Arch : x86_64 (64 Bit) Kernel : 3.10.0-327.18.2.el7.x86_64 下安装的时候报错: Error: INVALID_SERVICE: xl2tpd,如下文L2TP.LOG节选 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.lo.rp_filter = 0 success Error: INVALID_SERVICE: xl2tpd success success Created symlink from /etc/systemd/system/multi-user.target.wants/ipsec.service to /usr/lib/systemd/system/ipsec.service. Created symlink from /etc/systemd/system/multi-user.target.wants/xl2tpd.service to /usr/lib/systemd/system/xl2tpd.service. confirm ipsec status... ipsec.service loaded active running Internet Key Exchange (IKE) Protocol Daemon for IPsec confirm xl2tpd status... xl2tpd.service loaded active running Level 2 Tunnel Protocol Daemon (L2TP) Please wait a moment... Verifying installed system and configuration files 且FirewallD防火墙规则没有写入,得自己手工修规则。请问如何修改脚本文件呢,请指导,谢谢。
    TC8年前(2016-06-16)回复
    • 我写完这个脚本,是开 vultr 的 VPS 进行测试的。 我这里无法重现你这个问题。把完整日志 /root/l2tp.log 发我邮箱吧。
      秋水逸冰8年前(2016-06-17)回复
      • net.ipv4.ip_forward = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.rp_filter = 0 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.eth0.accept_source_route = 0 net.ipv4.conf.eth0.accept_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth0.rp_filter = 0 net.ipv4.conf.lo.accept_source_route = 0 net.ipv4.conf.lo.accept_redirects = 0 net.ipv4.conf.lo.send_redirects = 0 net.ipv4.conf.lo.rp_filter = 0 Created symlink from /etc/systemd/system/multi-user.target.wants/ipsec.service to /usr/lib/systemd/system/ipsec.service. Created symlink from /etc/systemd/system/multi-user.target.wants/xl2tpd.service to /usr/lib/systemd/system/xl2tpd.service. Checking firewalld status... trusted (default, active) interfaces: eth0 sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules: add firewalld rules... success Error: INVALID_SERVICE: xl2tpd success success Checking ipsec status... ipsec.service loaded active running Internet Key Exchange (IKE) Protocol Daemon for IPsec Checking xl2tpd status... xl2tpd.service loaded activating auto-restart Level 2 Tunnel Protocol Daemon (L2TP) Checking firewalld status... trusted (default, active) interfaces: eth0 sources: services: ipsec ports: masquerade: yes forward-ports: icmp-blocks: rich rules: success success Please wait a moment... Verifying installed system and configuration files 也是这种情况··················
        e3138年前(2016-11-30)回复