l2tp/ipsec搭建xxx


 

依賴環境

yum update yum install make gcc gmp-devel xmlto bison flex libpcap-devel

 

openswan(ipsec)

 

yum install openswan

 

接下來配置ipsec。ipsec的配置文件是/etc/ipsec.conf,安裝好openswan后,配置文件是默認內容。

config setup nat_traversal=yes
  #virtual_private=%v4:***客戶端內網地址網段/24 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=xxx.xxx.xxx.xxx leftprotoport=17/1701 right=%any rightprotoport=17/%any

 

上面有一行是left=xxx.xx.xx.xx,這里要把left的值改為你的服務器的ip地址,外網可以訪問的IP地址。

接下來配置密鑰。L2TP比PPTP多了一個密鑰項,這也是它比PPTP更安全的原因之一。這個密鑰其實就是一個密碼,不同於用戶的登錄密碼,它相當於一個設備之間通信的密鑰。它的配置文件是/etc/ipsec.secrets,然后把下面的內容放到新建的配置文件中.

xxx.xxx.xxx.xxx %any: PSK "YourPSK"

同理,上面的xxx.xxx.xxx.xxx是服務器的公網IP,而后面的"YourPsk"中的YourPsk就是密鑰的內容。你可以改為自己的任意字符串。反正在你連接登錄VPN的時候,是需要這個PSK的。

 

運行ipsec

ipsec setup restart
systemctl enable ipsec

驗證

ipsec verify

 

 只要沒有failed就可以

 

PPP

PPP就是一個撥號軟件,用來提供用戶登錄的用戶名和密碼驗證用的。所以在上面那篇文章里,PPTP搭建的VPN也會用到PPP。所以,實際上,PPTP和L2TP是可以共存在一台服務器上的,而且它們還可以共享用戶登錄賬號信息,因為它們都用PPP作為用戶登錄連接。

 

 

yum install ppp
vim /etc/ppp/chap-secrets 
# vim /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server    secret                  IP addresses
    admin         *         admin                    *
 
        

有兩個星號,第一個表示以后所有使用PPP作為用戶認證的服務,都可以使用這個用戶名和密碼,包括PPTP和L2TP都可以使用loginname。第二個星號表示這個用戶可以從任何IP登錄。如果你希望控制一下,可以把星號改成具體的值來限制。

 

xl2tpd

就像pptp和pptpd一樣,L2TP也依賴於xl2tpd。

yum install xl2tpd

安裝好xl2tpd之后,我們進行配置。它的配置文件有兩個,一個是/etc/xl2tpd/xl2tpd.conf一個是/etc/ppp/options.xl2tpd,其實第一個文件把第二個文件包含進來而已。

 

vim /etc/xl2tpd/xl2tpd.conf [global] ipsec saref = yes listen-addr = xxx.xxx.xxx.xxx [lns default]
#ip range = ***客戶端內網起始IP地址-***客戶端內網結束IP地址 #local ip = ***服務器內網IP地址
ip range = 192.168.1.2-192.168.1.100 local ip = 192.168.1.1 refuse chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes

 

和上面提到的一樣xxx.xxx.xxx.xxx也要改成你自己的服務器外網IP。

 

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

這樣,xl2tpd的配置就好了。

啟動xl2tpd服務:

systemctl start xl2tpd
systemctl enable xl2tpd

 

 

sysctl

 

sysctl的功能是開啟轉發。它能夠將服務器內部的ip地址關系進行轉發和映射,從而實現我們鏈接VPN之后的用戶,能夠通過內部的一些端口進行請求的轉發。

 

net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.accept_source_route = 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.all.accept_redirects = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.icmp_ignore_bogus_error_responses = 1

 

sysctl --load

 

 

for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done

 

 

 

iptables

 

我以前已經比較詳細的介紹過iptables了,雖然它是個防火牆軟件,但是在上介紹PPTP的VPN搭建的時候,我已經說過了,我們需要iptables來作為外部請求的轉發。sysctl幫我們解決的是,一個用戶通過ppp連接到服務器之后,他發的請求在服務器內部是怎樣實現映射的,所以,沒有iptables,用戶通過上面的那些配置,就可以登錄連接到L2TP VPN了,但是很有可能是連接上無法上網,因為外部的請求還沒有轉發啊。所以,我們執行下面的這些命令,來使iptables實現轉發。

iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT iptables -A FORWARD -m policy --dir in --pol ipsec -j ACCEPT iptables -t nat -A POSTROUTING -m policy --dir out --pol none -j MASQUERADE iptables -A FORWARD -i ppp+ -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -m policy --dir in --pol ipsec -p udp --dport 1701 -j ACCEPT iptables -A INPUT -p udp --dport 500 -j ACCEPT iptables -A INPUT -p udp --dport 4500 -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE

 

 

不過上面的操作可能並不是我們最終想要的結果,為什么呢?因為我們執行iptables -A這樣的操作,會在iptables的規則文件中追加這條規則。但是如果你的配置中,原本就已經通過REJECT結束了規則的匹配怎么辦?你新加的規則根本不起作用。我的解決辦法就是查看iptables的真實規則,並把REJECT相關的規則放到末尾。iptables的規則文件是/etc/sysconfig/iptables,你可以打開看一下有沒有出現我說的情況,如果有的話,調整一下規則順序,把上面新加的規則全部移動到REJECT相關的行的前面去。如果你不懂iptables,最好先學習一下

 

總結

這個時候,我們在來運行一下:

ipsec setup restart
ipsec verify

 

這個時候,你可能就已經可以看到正常的信息了。

我們簡單總結一下,我們這篇教程里面用到的軟件有:

openswan(ipsec) : 提供一個密鑰
ppp :提供用戶名和密碼
xl2tpd : 提供L2TP服務
sysctl : 提供服務器內部轉發
iptables : 提供請求從服務器內部轉向外部,外部響應轉向服務器內部

 

 

Windows 7及以上系統連接L2TP over IPSec ***不穩定解決方法:

 

  • 新建.reg后綴名的文件,將下列內容添加至該文件並雙擊運行,之后重啟電腦:*

Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PolicyAgent] "AssumeUDPEncapsulationContextOnSendRule"=dword:00000002

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM