歡迎您光臨本站 註冊首頁

在linux企業版上配置l2tp+ipsec (採用x.509證書進行認證)的詳細過程

在有2塊網卡的(可以是虛擬網卡)linux上安裝openswan,該linux就變成了一個ipsec vpn網關,網關後面是各種應用伺服器。將其作為伺服器端,可以進行兩種配置(net to net或者是roadworrier)。
(1)在第一種方式下,客戶端也要有一個有兩塊網卡的linux作為ipsec vpn 網關,兩端的ipsec vpn網關地位是對等的。在兩個網關間可以建立隧道,對數據進行加密認證等安全操作。這樣兩個網關后的計算機之間可以相互ping通,他們之間可以進行安全的通信了。但是網關與另一邊網關后的計算機之間不能ping通,所有如果對方是移動用戶的話這種方式是不行的,這就產生了第2種方式。
(2)在第二種方式下,如果對方是linux的移動用戶(可以是laptop,也可以是智能手機),那麼就需要在移動用戶上安裝openswan,設置成roadworrier連接方式。如果對方是window的移動用戶,那就必須安裝專門的
vpn撥號軟體了。如果這樣覺得麻煩,也可以在伺服器端的ipsec vpn網關上安裝l2tp,使之變成l2tp+ipsec vpn 網關,這樣客戶端就可以直接用window自帶的撥號連接了。移動用戶撥號成功就建立了和伺服器端的vpn網關的隧道,這樣移動用戶就可以和網關后的計算機進行安全通信了。
建立vpn隧道可以通過pptp,l2tp(第2層),ipsec(第3層),ssl(第5層)不同的方式。ipsec的安全性高,但是配置麻煩,pptp/l2tp安全性低,但是配置簡單。所以一般的應用只要對安全性要求不高就可以採用pptp/l2tp,如果應用對安全性要求高的話,就必須使用ipsec進行保護了。
pptp和l2tp都是適用於撥號連接的,都是使用ppp協議進行數據幀的封裝,然後在普通的ppp幀上加一些包頭,其中使用chap和pap進行安全性操作。他們之間的不同主要是pptp要求ip網路,l2tp要求點對點的網路。
採用哪種vpn要看具體的需求,本文講述l2tp+ipsec vpn的配置,這樣不但使用了ipsc 強安全性的特點,還能夠方便的兼容window客戶端。
本實驗的網路結構如下:
有3台計算機,在同一個區域網內
  一個是window客戶端,ip是192.168.0.187,其網關ip為192.168.0.1
  一個是l2tp+ipsec vpn網關(系統是2.6.9內核的red hat enterprose linux),它是一台虛擬機,
  有一個本地網卡(eth0),還有一個虛擬網卡(eth1)。eth0的ip是192.168.0.115,網關ip是   
  192.168.0.115。eth1的ip是192.168.2.1,網關ip是192.168.2.1。
  一個是vpn網關維護的一個內網(網段是192.168.2.0/254)上的一台linux伺服器(名為jim),上面
  安裝了一個apache,架設了一個網站。其ip為192.168.2.10,網關ip為192.168.2.1
現在我的目標是使用window客戶端安全的讀取jim上架設的網站。
  在window客戶端沒有撥號與vpn網關建立l2tp+ipsec vpn隧道前,window客戶端與jim處在不同的網段
  下,彼此之間不能ping通;並且客戶端與vpn網關之間也不能ping通;在建立隧道后,window客戶端與
  vpn網關之間建立了一條隧道,這樣客戶端與vpn網關之間就可以ping通了,並且vpn網關分配給客戶端一
  個內網ip,這樣客戶端與jim之間也可ping通,這樣window客戶端就可以訪問內網上的jim伺服器了,並
  且這種訪問是在ipsec的保護下進行的,所以是安全的。
   
詳細步驟如下:
1.在vpn網關上架設l2tp伺服器:
(1) 安裝xl2tpd (不建議安裝l2tpd)
(2) 配置xl2tpd
   主配置文件在/etc/xl2tpd/xl2tpd.conf
    <1> 修改/etc/ppp/chap.secrets (l2tp裡面會使用chap對用戶的身份進行驗證,就相當於撥號時輸入的用戶名密碼的作用一樣) 在該文件的最後一行輸入 用戶名 × 密碼 (*表示用戶可以使用任意的網段進行撥號,例如 test × 「test123456」
    <2>修改/etc/ppp/options.l2tp
      文件如下:
       ipcp-accept-local
       ipcp-accept-remote
       #ms-dns  202.96.209.6
       #需要設置dns,就把上一行的#號去掉
       ms-wins 192.168.0.187(window客戶端的ip)
       #noccp
       auth
       crtscts
       idle 1800
       mtu 1200
       mru 1200
      #mtu需要小於1500。也可以設成其它值,如1300
      nodefaultroute
      debug
      lock
      connect-delay 5000
      logfile /var/log/l2tpd.log
      proxyarp
   <3>修改主配置文件/etc/xl2tpd/xl2tpd.conf (;表示註釋)
      文件如下:
   
    listen-addr = 192.168.0.115  (#網關的eth0的ip,網關通過該網卡監聽window客戶端的連接
                                   請求)
    port=1701
    auth file = /etc/ppp/chap-secrets
   
    ;exclusive = no
    ip range = 192.168.2.128-192.168.2.254 (#window客戶端連接上后給客戶端的內網ip,現在
                                             網關后的內網網段時192.168.2.0/254)
    ;ip range即l2tp撥號成功後分配給客戶端的ip地址範圍。
    local ip = 192.168.0.115
    ;lac = 0.0.0.0-255.255.255.255
    require chap = yes
    refuse pap = yes
    require authentication = yes
    name = VPNGateway
    ppp debug = yes
    pppoptfile = /etc/ppp/options.l2tp
    length bit = yes
    至此,l2tp就配置完成了。
2.在vpn網關上架設ipsec伺服器
   (1)安裝openswan
       安裝之前,需要修改配置。在/etc/sysctl.conf文件中,找到
       net.ipv4.ip_forward = 0
       net.ipv4.conf.default.rp_filter = 1
       改為:
       net.ipv4.ip_forward = 1
       net.ipv4.conf.default.rp_filter = 0
       然後執行sysctl -p使之生效。
      安裝就是老套了,只是要注意內核的版本,在2.6的內核上安裝不需要再打其它的補丁,只需要直接安
      裝openswan的源代碼就好了,在2.4的版本上安裝由於內核沒有對ipsec堆棧支持需要打openswan的
      klips補丁和nat補丁,較麻煩。所以建議在2.6.9的內核版本上安裝openswan。
  (2) 配置openswan(就是配置認證方式,可以時rsa或者是x.509,這裡採用x.509認證方式)
        其主配置文件為/etc/ipsec.conf,/etc/ipsec.secrets(ipsec 也進行認證,l2tp的認證可
                                                        以省略了)
        其配置目錄在/etc/ipsec.d 裡面是對x.509證書的配置。
        /etc/ipsec.d/cacerts       存放X.509認證的根證書
        /etc/ipsec.d/certs         存放X.509客戶端證書
        /etc/ipsec.d/private       存放X.509認證私鑰
        /etc/ipsec.d/crls        存放X.509證書撤消列表(只配置x.509證書認證,下面不需要)
        /etc/ipsec.d/ocspcerts             存放X.500 OCSP證書
        /etc/ipsec.d/passwd                XAUTH密碼文件
        /etc/ipsec.d/policies              存放Opportunistic Encryption策略組
    採用openssl產生ca證書,vpn網關上的證書,客戶端的證書。
     建立如下目錄/root/ca/demoCA,demoCA存放ca存放ca證書和撤銷列表。而網關證書與認證私鑰,客
     戶端證書與私鑰放在ca下。
    現使用以下命令在/root/ca/demoCA下產生ca根證書cacert.pem和其私鑰cakey.pem 和crl表
     crl.pem,
   openssl req –x509 –days 3650 –newkey rsa:1024 –keyout cakey.pem –out cacert.pem
   進入demonca目錄:
    mkdir newcerts
   touch index.txt
   echo 「01」 > serial
   openssl ca -gencrl -out crl.pem
    然後在/root/ca/下使用以下命令產生網關的認證私鑰vpngateway.key和證書vpngateway.cert
    Openssl req –newkey rsa:1024 –keyout vpngateway.key –out vpngatewayreq.pem
    Openssl ca –in vpngatereq.pem –days 365 –out vpngateway.cert –notext
       然後將ca證書與網關證書與私鑰放進網關上的openswan的相依目錄下:
     cp cacert.pem        /etc/ipsec.d/cacerts
     cp vpngateway.cert   /etc/ipsec.d/certs
     cp vpngateway.key    /etc/ipsec.d/private
    在做完了這些準備后,
   以同樣方法為window客戶端生成證書與私鑰。
   開始寫ipsec.conf了。
    <1> 編輯vpn網關上的/etc/ipsec.secerts,在此文件最後加上一行
    : RSA /etc/ipsec.d/private/vpngateway.key "讀取此key的密碼"
    <2> 編輯vpn網關上的/etc/ipsec.conf
       version 2.0

config setup
  interfaces=%defaultroute
nat_traversal=yes
virtual_private=%v4:192.168.0.0/16,%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:!192.168.0.0/24
conn %default
compress=yes
authby=rsasig
disablearrivalcheck=no
leftrsasigkey=%cert
rightrsasigkey=%cert
keyingtries=1
     
conn l2tpx509
pfs=no
auto=add
left=192.168.0.115
leftcert=vpngateway.cert
leftprotoport=17/1701
right=%any
rightca=%same
rightprotoport=17/%any

include /etc/ipsec.d/examples/no_oe.conf

<3> 輸入命令service ipsec restart重啟ipsec服務。
    輸入命令 xl2tpd -D 以前台模式啟動L2TPD服務。
vpn網關配置完畢。
接著配置window客戶端來測試與vpn網關之間的隧道建立情況:

導出CA和Win端的證書:

在網關的/root/ca下,用以下命令將CA證書cacertpem的格式轉化為p12文件:
openssl pkcs12 -export -in democA/cacert.pem -inkey demoCA/private/cakey.pem  -out demoCA.p12
輸入讀取CA密鑰的密碼,然後再指定導出p12文件中的證書(為下一步將ca證書導入到window上的mmc需要該密碼)需要的密碼,再確認此密碼即可。
然後導出win端的證書:
openssl pkcs12 -export -in purewinter.cert -inkey purewinter.key -out purewinter.p12
把這兩個文件通過安全方式複製到Windows客戶端。

導入證書:

運行mmc,添加刪除管理單元->添加->證書->計算機賬戶->本地計算機->完成。
在證書:本地計算機里,選擇個人->所有任務->導入,導入兩個p12證書。把CA的證書由個人拖到「受信任的根證書頒發機構」里。

添加撥號連接:

網路連接->創建一個新連接->連接到我工作場所的網路->虛擬專用網路連接->隨意輸入一個名字->不撥初始連接->192.168.0.115->完成。
右鍵點此連接,選屬性-網路-VPN類型選擇為L2TP IPSec VPN,選定TCP/IP協議,屬性-高級,去掉「在遠程網路上使用默認網關」的勾。確定。雙擊此連接,輸入用戶名test,密碼test123456進行撥號。如果順利,就撥號成功了。(有些系統撥號時會發生789錯誤,這是因為這些系統在啟動時默認啟動了一個ipsec服務,所以你再要啟動一個ipsec時拒絕,這就需要修改註冊表)。在VPNGateway的tcpdump可以看到加密信息在傳輸,L2TPD的輸出中可以看到Call established with 192.168.0.187...等字樣。此時在客戶端ping網關發現可以ping通了,還發現客戶端獲得了一個vpn內網ip 192.168.2.128,在Jim上輸入service httpd start啟動Apache服務,然後在Win客戶端的瀏覽器中輸入http://192.168.2.10/,就可以看到Jim上架設的網站了。如果沒有架設,可能看到Apache的默認頁面,或者看到403禁止訪問,Apache 2.x.x的信息。至此L2TP的IPSec VPN架設成功。

如果外網的window客戶端想要連接網關,那麼網關就需要安裝配置在具有外網ip的計算機上。
《解決方案》

好帖...講得很詳細啊.!@
《解決方案》

如果使用l2tp同時要求ipsec,用windows server更方便一些.如果僅僅使用l2tp,則可以用linux.
《解決方案》

呵呵 ,我在chinaunix上的第一個精華帖
《解決方案》

原帖由 nm_0011 於 2008-5-30 00:59 發表 http://bbs.chinaunix.net/images/common/back.gif
呵呵 ,我在chinaunix上的第一個精華帖



那多支持你寫一些好的文章.只是我做的VPN項目比較多,用linux作為L2TP+IPSEC不多.
《解決方案》

Mark.

我用的是pptp + ipsec
《解決方案》

好帖...講得很詳細啊.!@
《解決方案》

支持LZ,頂一下
《解決方案》

樓主,按照你的步驟做下來
在openssl ca -gencrl -out crl.pem
時候出問題了
提示:
# pwd
/root/ca/demoCA
# openssl ca -gencrl -out crl.pem
Using configuration from /usr/share/ssl/openssl.cnf
Error opening CA private key ./demoCA/private/cakey.pem
21003:error:02001002:system library:fopen:No such file or directory:bss_file.c:259:fopen('./demoCA/private/cakey.pem','r')
21003:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:261:
unable to load CA private key

請問為什麼?
《解決方案》


[火星人 ] 在linux企業版上配置l2tp+ipsec (採用x.509證書進行認證)的詳細過程已經有704次圍觀

http://coctec.com/docs/service/show-post-17793.html