學習xl2tpd VPN時,網上搜到的教程上來就貼一堆不明所以的配置,照葫蘆畫瓢折騰成功后很快又忘了。
現在結合官方提供的說明文檔,由簡入繁地一步步記錄下來,以加強鞏固。
環境
客戶端 192.168.0.207 CentOS 6.3
服務器 192.168.0.213 CentOS 7.2
軟件
pppd
實現PPP會話的軟件,在l2tp VPN中,其數據包經由L2TP隧道傳輸,兩者結合即PPPoL2TP(Point-to-Point Protocol over L2TP),可類比PPPoE(Point-to-Point Protocol over Ethernet)。
客戶與服務器都需要安裝pppd,下載源碼解壓后執行:
./configure
make
sudo make install
通過源碼安裝的執行文件一般在/usr/local/sbin目錄下。
xl2tpd
https://github.com/xelerance/xl2tpd
構建L2TP隧道的軟件,L2TP隧道負責傳輸pppd生成的PPP數據包,一個xl2tpd進程可開啟多個pppd進程,對應多個PPP會話。xl2tpd與其啟動的pppd進程間通過偽終端(pseudo-tty)進行數據通信,兩者關系可參考《Linux偽終端設備及其在L2TP中的應用》一文。
客戶端與服務器都需要安裝xl2tpd,下載源碼解壓后執行:
make
sudo make install
通過源碼安裝的執行文件一般在/usr/local/sbin目錄下。
配置
服務器
服務器xl2tpd配置文件:
/etc/xl2tpd/xl2tpd.conf
簡單配置如下:
[lns default] ip range = 172.16.0.1-172.16.0.254 local ip range = 172.17.0.1
LNS(L2TP Network Server)信息為服務端的主要配置,LNS可以有多個,以 [lns xxx] 格式為名,[lns default] 為默認的LNS配置。
本次配置中LNS包含以下兩項信息:
ip range,分配給L2TP隧道彼端(客戶端)的IP地址范圍,注意不能像PPTP那樣寫成172.16.0.1-254這樣的格式,起始地址和結束地址都要使用完整的IP描述。
local ip range,與彼端IP相對應的L2TP隧道本地IP地址范圍,注意這是一個范圍,可以配置成172.17.0.1-172.17.0.254,也可以僅僅配置一個IP。
xl2tpd.conf文件中以分號";"作為注釋開頭。
客戶端
客戶端xl2tpd配置文件:
/etc/xl2tpd/xl2tpd.conf
[lac vpntest] lns = 192.168.1.213
LAC(L2TP Access Concentrator)為客戶端配置信息,格式為[lac xxx] ,xxx即LAC的名字,可以配置多個LAC信息。若是改動了LAC的名字,需要重啟xl2tpd服務方能生效。
本次的LAC配置中只包含一項信息:lns, 即該LAC所連接LNS的IP地址或域名,不同的LAC能連接不同的LNS
測試
1)在客戶端和服務端的機器上分別執行xl2tpd命令,xl2tp服務會以后台方式運行,在第一次運行前確認/var/run目錄是否存在,若/var下沒有run目錄,需要手動創建,否則xl2tp服務會啟動失敗(在/var/log/message中會有日志提示)。
2)在客戶端機器上執行命令:echo 'c vpntest' > /var/run/xl2tpd/l2tp-control,xl2tpd從l2tp-control文件中收到命令會創建ppp進程,如果成功在客戶端和服務端會各自生產一個pppX的虛擬網卡,如下圖所示:
客戶端:
服務端:
172.16.0.1和172.17.0.1是可以相互通信的。
關閉客戶端的命令為: echo 'd vpntest' > /var/run/xl2tpd/l2tp-control
'c vpntest'與'd vpntest'中的vpntest即配置文件/etc/xl2tpd/xl2tpd.conf中[lac xxx]相應的LAC名xxx。
另外,只要相關配置存在,一個xl2tpd既可以作為LAC也可以作為LNS。
取消數據壓縮
上述配置中,PPP協議默認對數據進行了壓縮,不利於捕包觀察和調試,可通過如下方式取消壓縮:
方法一,通過服務器配置取消壓縮:
1)在服務器編輯pppd的配置文件/etc/ppp/options.xl2tpd,增加一行“noccp”;
#不要對數據進行壓縮
noccp
pppd的配置文件中以"#"作為注釋開頭。
2)在服務器編輯xl2tpd的配置文件/etc/xl2tpd/xl2tpd.conf,增加pppd的配置文件路徑:
[lns default] ip range = 172.16.0.1-172.16.0.254 local ip range = 172.17.0.1 ;pppd配置文件路徑 pppoptfile = /etc/ppp/options.xl2tpd
方法二,通過客戶端配置取消壓縮:
編輯客戶端的pppd配置文件/etc/ppp/peers/vpntest.xl2tpd,增加一行"noccp",然后在/etc/xl2tpd/xl2tpd.conf中相應的LAC配置節下增加vpntest.xl2tpd的路徑全名:
pppoptfile = /etc/ppp/peers/vpntest.xl2tpd
(這里的vpntest.xl2tpd與LNS的options.xl2tpd性質一樣都是pppd的配置文件,不過從網上的諸多教程看,LAC的pppd配置文件一般存放於/etc/ppp/peers目錄下,而LNS的pppd配置文件一般存放於/etc/ppp目錄下)
為tty設備加鎖
pppd使用tty設備與xl2tpd進行數據通信,tty默認沒有被加鎖。
在pppd的配置文件中(LNS為/etc/ppp/options.xl2tpd,LNC為/etcppp/peers/vpntest.xl2tpd),添加如下配置:
#為tty加鎖
lock
如此一來,當pppd打開一個tty設備后,就會生成一個UUCP類型的文件鎖以阻止其他進程訪問該設備。
更多參考
在安裝xl2tpd和pppd的系統中,可通過查閱man手冊來獲取更多的參考信息:
man xl2tpd,介紹xl2tpd程序的使用
man xl2tpd.conf,介紹xl2tpd.conf配置文件
man pppd,介紹pppd程序的使用,內容比較多,其中的OPTIONS各個選項可以寫入配置文件,然后在xl2tpd.conf中使用pppoptfile指明路徑名。