簡介
L2TP是一種工業標準的Internet隧道協議,功能大致和PPTP協議類似,比如同樣可以對網絡數據流進行加密。不過也有不同之處,比如PPTP要求網絡爲IP網絡,L2TP要求面向數據包的點對點連接;PPTP使用單一隧道,L2TP使用多隧道;L2TP提供包頭壓縮、隧道驗證,而PPTP不支持。
以上是來源於百度百科的專業術語解釋,當然看不懂也正常,看懂了說明你厲害,用人類看的懂的語言翻譯一下就是一種加密的傳輸協議,我們常常說×××出去上Facebook、YouTu這些其實就是連接了***,而***的傳輸協議其中就包括L2TP,常見的還有pptp。
協議結構
L2TP 命令頭 :12 16 32 bit
T L X X S X O P X X X X VER Length
Tunnel ID Session ID
Ns (opt) Nr (opt)
Offset Size (opt) Offset Pad (opt)
T ― T 位表示信息類型。若是數據信息,該值爲0;若是控制信息,該值爲1。
L ― 當設置該字段時,說明 Length 字段存在,表示接收數據包的總長。對於控制信息,必須設置該值。
X ― X 位爲將來擴張預留使用。在導出信息中所有預留位被設置爲0,導入信息中該值忽略。
S ― 如果設置 S 位,那麼 Nr 字段和 Ns 字段都存在。對於控制信息,S 位必須設置。
O ― 當設置該字段時,表示在有效負載信息中存在 Offset Size 字段。對於控制信息,該字段值設爲0。
P - 如果 Priority (P)位值爲1,表示該數據信息在其本地排隊和傳輸中將會得到優先處理。
Ver ― Ver 位的值總爲002。它表示一個版本1 L2TP 信息。
Length ― 信息總長,包括頭、信息類型 AVP 以及另外的與特定控制信息類型相關的 AVPs。
Tunnel ID ― 識別控制信息應用的 Tunnel。如果對等結構還沒有接收到分配的 Tunnel ID,那麼 Tunnel ID 必須設置爲0。一旦接收到分配的 Tunnel ID,所有更遠的數據包必須和 Tunnel ID 一起被髮送。
Call ID ― 識別控制信息應用的 Tunnel 中的用戶會話。如果控制信息在 Tunnel 中不應用單用戶會話(例如,一個 Stop-Control-Connection-Notification 信息),Call ID 必須設置爲0。
Nr ― 期望在下一個控制信息中接收到的序列號。
Ns ― 數據或控制信息的序列號。
Offset Size & Pad ― 該字段規定通過 L2F 協議頭的字節數,協議頭是有效負載數據起始位置。Offset Padding 中的實際數據並沒有定義。如果 Offset 字段當前存在,那麼 L2TP 頭 Offset Padding 的最後八位字節後結束。
與PPTP的區別
1.PPTP要求互聯網絡爲IP網絡。L2TP只要求隧道媒介提供面向數據包的點對點的連接。L2TP可以在IP(使用UDP),幀中繼永久虛擬電路(PVCs),X.25虛擬電路(VCs)或ATM VCs網絡上使用。
2.PPTP只能在兩端點間建立單一隧道。L2TP支持在兩端點間使用多隧道。使用L2TP,用戶可以針對不同的服務質量創建不同的隧道。
3.L2TP可以提供包頭壓縮。當壓縮包頭時,系統開銷(overhead)佔用4個字節,而PPTP協議下要佔用6個字節。
4、L2TP自身不提供隧道驗證,從L2TP的包頭可以看出。隧道認證是由PPP(pap或chap)協議提供!而PPTP則支持隧道驗證,PPTP自身就是PPP的擴展!但是當L2TP或PPTP與IPsec共同使用時,可以由IPsec提供隧道驗證,不需要在第2層協議上驗證隧道.
5.L2TP訪問集中器(L2TP Access Concentrator,LAC)是一種附屬在網絡上的具有PPP端系統和L2Tpv2協議處理能力的設備,它一般就是一個網絡接入服務器軟件,在遠程客戶端完成網絡接入服務的功能。
6.L2TP網絡服務器(L2TP Network Server,LNS)是用於處理L2TP協議服務器端的軟件。
實踐嘗試
部署有兩種方法:一種是一鍵腳本安裝搭建,另一種則是手動DIY安裝,前者比較適用於經典網絡的服務器,沒有區分內外網IP地址,做起來比較簡單,而後者相對比較複雜,比較適合中高級玩家打的副本;
安裝前的檢查
執行命令:cat /dev/net/tun
#檢測是否支持TUN模塊,如果返回信息爲:cat: /dev/net/tun: File descriptor in bad state 說明正常
執行命令:cat /dev/ppp
#檢測是否支持ppp模塊,如果返回信息爲:cat: /dev/ppp: No such device or address 說明正常
方法一:腳本安裝
cd /root wget http://lamp.teddysun.com/files/l2tp.sh #CentOS、Fedora或Redhat系統時執行 wget http://lamp.teddysun.com/files/l2tp_ubuntu.sh #Ubuntu系統時執行此命令 chmod +x *.sh ./l2tp.sh #CentOS、Fedora或Redhat系統時執行 ./l2tp_ubuntu.sh #Ubuntu系統時執行此命令
等待出現
[Please input IP-Range:]設置網段,一般回車即可
[Please input PSK:]設置你預共享密鑰。
執行後,一直等待成功,會顯示相關配置信息。
生成的密碼是隨機的,需要修改的話,執行
vim /etc/ppp/chap-secrets
方法二:手動安裝
首先,我們需要先準備準備
yum install -y make gcc gmp-devel xmlto bison flex xmlto libpcap-devel lsof vim-enhanced man yum install -y openswan ppp xl2tpd
然後我們一步一步的來配置
(1) 配置編輯/etc/ipsec.conf文件
vim /etc/ipsec.conf config setup protostack=netkey nhelpers=0 uniqueids=no interfaces=%defaultroute virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:!${iprange}.0/24 dumpdir=/var/run/pluto/ conn l2tp-psk 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=%defaultroute leftid=47.52.18.101 #這裏將IP地址修改爲服務器的外網地址 leftprotoport=17/1701 right=%any rightprotoport=17/%any dpddelay=40 dpdtimeout=130 dpdaction=clear sha2-truncbug=yes include /etc/ipsec.d/*.conf
(2) 配置編輯/etc/ipsec.secrets文件
vim /etc/ipsec.secrets include /etc/ipsec.d/*.secrets %any %any : PSK "123456" #"123456"這裏設置的是設置共享祕鑰
(3) 修改/etc/sysctl.conf,並使其生效
vim /etc/sysctl.conf vm.swappiness = 0 net.ipv4.neigh.default.gc_stale_time=120 # see details in https://help.aliyun.com/knowledge_detail/39428.html net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 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.default.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.icmp_ignore_bogus_error_responses = 1 net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_announce=2 net.ipv4.conf.all.arp_announce=2 # see details in https://help.aliyun.com/knowledge_detail/41334.html net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_tw_reuse = 0 net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_synack_retries = 2 kernel.sysrq = 1 sysctl -p #生效上面的修改使用如下命令
(4) 驗證ipsec運行狀態
ipsec restart ipsec verify
如果出現如下內容,說明已經成功:
Checking your system to see if IPsec got installed and started correctly: Version check and ipsec on-path [OK] Linux Openswan U2.6.32/K2.6.32-431.20.3.0.1.el6.centos.plus.x86_64 (netkey) Checking for IPsec support in kernel [OK] SAref kernel support [N/A] NETKEY: Testing for disabled ICMP send_redirects [OK] NETKEY detected, testing for disabled ICMP accept_redirects [OK] Checking that pluto is running [OK] Pluto listening for IKE on udp 500 [OK] Pluto listening for NAT-T on udp 4500 [OK] Checking for 'ip' command [OK] Checking /bin/sh is not /bin/dash [OK] Checking for 'iptables' command [OK] Opportunistic Encryption Support [DISABLED
(5) 配置編輯/etc/xl2tpd/xl2tpd.conf文件
vim /etc/xl2tpd/xl2tpd.conf [global] port = 1701 [lns default] ip range = 10.10.20.1-10.10.20.5 #這裏設置IP地址分配的地址段 local ip = 10.10.20.254 #設置網關地址 require chap = yes refuse pap = yes require authentication = yes name = l2tpd ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
(6) 配置用戶名,密碼:編輯 /etc/ppp/chap-secrets
vim /etc/ppp/chap-secrets # Secrets for authentication using CHAP # client server secret IP addresses Kemin l2tpd Kemin 10.10.20.1 # 用戶名 連接協議 密碼 指定IP地址
(7) 重啓xl2tp
service xl2tpd restart
(8) 添加自啓動
chkconfig xl2tpd on chkconfig iptables on chkconfig ipsec on
(9) 防火牆配置轉發規則
# Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] # 允許已建立的或相關連的通行 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允許本地迴環接口 -A INPUT -i lo -j ACCEPT # 允許指定主機使用ssh協議 -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT # 允許外網訪問l2tp協議的端口 -A INPUT -p udp -m multiport --dports 500,4500,1701 -j ACCEPT -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 10.10.20.0/24 -j ACCEPT # 拒絕其他未允許的規則訪問 -A INPUT -j DROP -A FORWARD -j REJECT COMMIT *nat :PREROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0] #允許分配的地址段從內網網卡轉發 -A POSTROUTING -s 10.10.20.0/24 -j SNAT --to-source 172.31.243.141 COMMIT
OK,到這裏爲止,基本的服務已經配置好了,接下來連接試試
驗證結果
手機和電腦上都是可以連接的,但是電腦連接的時候彈出報錯,下面是解決思路,可供參考
1、檢查IPsec服務時候開啓;
2、Win+R調出運行輸入regedit回車,打開註冊表單擊以下註冊表子項,HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters,新建AllowL2TPWeakCrypto的Dword值1;
最後總結
我們簡單總結一下,我們這篇教程裏面用到的軟件有:
openswan(ipsec) : 提供一個密鑰
ppp :提供用戶名和密碼
xl2tpd : 提供L2TP服務
sysctl : 提供服務器內部轉發
iptables : 提供請求從服務器內部轉向外部,外部響應轉向服務器內部
感覺對你有用的話點個贊或收藏支持支持唄,如果在動手的過程中有什麼問題也可以在下方留言,我會第一時間爲你解答的喲~