L2TP/IPSec一鍵安裝腳本

該腳本由網友秋水逸冰製作,作者本人已經刪除原文,本文僅複製備份。
該腳本託管在Github上仍保留了master分支,所以腳本依然可用。

之所以要更新 L2TP/IPSec 一鍵安裝腳本,是因為隨着各個 Linux 發行版不斷推陳出新,原有的腳本已經不適應現在的需求。
本腳本通過編譯安裝最新版 libreswan 來實現 IPSec(CentOS7 下則是全部 yum 安裝),yum 或 apt-get 來安裝 xl2tpd,再根據各個發行版的使用方法不同,部署防火牆規則。

關於本腳本

本腳本適用環境:

  • 系統支持: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 的。 基於 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 列出幫助信息

其他事項

  • 腳本在安裝完成後,已自動啟動進程,並加入了開機自啟動。
  • 腳本會改寫 iptables 或 firewalld 的規則。
  • 腳本安裝時,會即時將安裝日誌寫到 /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 日:

  • 在 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