1. 程式人生 > >在linux環境下構建ipsec vpn的過程

在linux環境下構建ipsec vpn的過程



第一部分:VPN簡介


Linux平臺上的VPN大致可以為分為三類:

IPSec VPN(Openswan,frees/wan,strongswan,KAME)
      IPSec(IP Security)是一種較老的也是採用的最為廣泛的VPN技術,是由IETF開發的一組身份驗正和資料加密的協議,提供了私有性、完整性、真實性和防重播等安全服務,可以用於IP網路中的資料保密、完整性檢查、身份驗正、密匙管理等許多方面。
    IPSec在Linux上的實現主要分為兩類,第一類是曾被稱作Frees/wan的專案,如今已經分裂為openswan和strongswan。它們都提供自身的核心堆疊(kernel stack),也可以基於新近的核心中所提供的程式碼。第二類是BSD之上的KAME,它只能使用核心堆疊。大多ipsec規範本身並不在本地網路中為遠端主機提供一個虛擬IP,不過仍有不少為此而實現的擴充套件可以解決諸如此類的問題。因此,可以將Microsoft的支援L2TP的產品運行於ipsec之上。
    ipsec是面各連線的協議,為很多家商業類的路由器所採用。Openswan基於自身的XAUTH擴充套件,也可以作為Cisco,Nortel以及其它多家VPN整合產品的客戶端。
    ipsec可以讓我們在不改變外部防火牆規則的情況下,在核心級別相當容易的對什麼能通過隧道或什麼不能作出安全的處理;其在實現NET-TO-NET以及host-to-net的配置方面也表現出了很大的靈活性。但靈活也就意味著實現起來的困難,所以ipsec的成功配置執行相當有難度,此外,儘管已經其在對NAT-Travel的支援方面做了不少改進,但還是不能較好的工作於一些NAT閘道器之後。

SSL VPN (openVPN)
    近來,加密套接字層(SSL)虛擬專用網(VPN)逐漸流行起來。這種VPN的最大好處在於,你僅僅需要一個單獨的TCP或者UDP埠便可以輕易的穿越大多數的防火牆進行資料傳送。SSL VPN在Linux系統上的最好實現是OpenVPN,其相當成熟和富於特色。

PPTP VPN (PoPToP)
    PPTP(Point to Point Tunneling Protocol)是由微軟發起的可以工作在包括Windows 95在內的微軟多個作業系統上的協議。雖然已經採用了相當長一段時間,但其仍存在許多安全方面的問題。它主要是基於GRE(Generic Routing Encapsulation)通過隧道來傳送一個PPP連線。Linux系統上PPTP實現的主要代表是PoPToP。如果你的確需要PPTP的話,烈建議你用基於IPSEC的L2TP來代替PPTP,因為它更加安全,並且提供了和PPTP一樣的功能。

第二部分,openswan的安裝


    FreeS/WAN是基於IPSec的VPN項,現在已經停止開發,其分裂為兩個專案,Openswan與 Strongswan。其可以用自身的IPsec核心堆疊(Kernel stack),稱為KLIPS,也可以用2.6核心中的堆疊程式碼;因為IPSec工作在網路層,所以需要系統核心態的支援,但2.4的核心沒有實現核心堆疊,故必須打klips補丁。同時,若想要實現NAT Traversal的支援,還需要打上NAT-T補丁。
openswan是新專案,且frees/wan已經於2004年停止開發,於是我們想當然地要用openswan了。
既然要做閘道器轉發資料,兩個或更多的NIC自然是必不可少的了.

一、安裝核心原始碼

1。你可以從網上下載2.4的最新版本至/usr/src,並解壓縮;我這裡使用發行光碟中自帶的核心原始碼實現,掛載RH 9.0的第二張盤並執行以下命令安裝
#rpm -ivh kernel-source-2.4.20-8.i386.rpm
2.檢查/usr/src目錄下的linux和linux-2.4是否已連結到新近安裝的核心原始碼,如果沒有,則執行以下命令建立連結:
#ln -s linux-2.4.20-8  linux
#ln -s linux-2.4.20-8  linux-2.4

二、下載openswan、klips補丁和nat-t補丁至/usr/src目錄中

1.下載地址為:[url]http://www.openswan.org/code[/url],請下載以下全部三個軟體包
openswan-2.4.7.tar.gz
openswan-2.4.7.kernel-2.4-klips.patch.gz
openswan-2.4.7.kernel-2.4-natt.patch.gz
2.解壓openswan,並將補丁拷貝至其解壓出的目錄中
#cd /usr/src
#tar zxvf openswan-2.4.7.tar.gz
#cp openswan-2.4.7.kernel-2.4-*  /usr/src/openswan-2.4.7

三、進入原始碼目錄,進行核心編譯的準備工作

1.清理原始碼樹
#cd /usr/src/linux-2.4
#make mrproper
2.生成核心原始碼
#cp ./configs/kernel-2.4.20-i686.config  .config
#make menuconfig
選擇你所需要的核心選項,儲存退出即可。請注意,儘量不要把關於開發以及實驗性的選項編譯進來。
注:如果你的Linux是安裝在VMWare之上的話,請確保選擇了以下幾項:
   Ram Disk驅動:
     Block devices--->
       < * > RAM disk support
       (4096) Default RAM disk size (NEW)
       < * > Initial RAM disk (initrd) support
  檔案系統:
     File systems--->
       [ * ] Ext3 journalling file system support
       [ * ] JBD (ext3) debugging support 
  SCSI驅動,如果你使用的是模擬SCSI硬碟(若是升級安裝核心,BusLogic SCSI support項亦必需設定為‘M’),此項尤其應該注意:
      < * >  SCSI support--->
         SCSI low-level drivers --->
            < M >BusLogic SCSI support
  虛擬網絡卡AMD PCnet32 驅動:
    Device Drivers  --->
       Networking support  --->
           Ethernet (10 or 100Mbit)  --->
             <*>   AMD PCnet32 PCI support
3.建立新核心模組所需要的目錄

#mkdir -pv /lib/modules/2.4.20-8custom

四、應用核心補丁,並編譯安裝核心

1.應用核心補丁,並編譯核心
#cd /usr/src/openswan-2.4.7
#make nattpatch | (cd /usr/src/linux-2.4 && patch -p1 && make bzImage)
#cd /usr/src/linux && make dep bzImage
2.編譯並安裝核心模組
#cd /usr/src/linux-2.4
#make modules
#make modules_install
3.安裝核心
#make install
4.檢查/boot目錄,是否顯示有以下三項
#ls /boot |grep custom
initrd-2.4.20-8custom.img
System.map-2.4.20-8custom
vmlinuz-2.4.20-8custom
因為一些不知明的原因,這個initrd檔案時常會引出kernel panic,所以我們把它移至別處並重新生成一個
#mv /boot/initrd/initrd-2.4.20-8custom.img
#mkinitrd /boot/initrd-2.4.20-8custom.img 2.4.20-8custom
5.檢查/boot/grub/grub.conf檔案中是否有如下幾行:
#more /boot/grub/grub.conf
  title Red Hat Linux (2.4.20-8custom)
        root (hd0,0)
        kernel /vmlinuz-2.4.20-8custom ro root=LABEL=/
        initrd /initrd-2.4.20-8custom.img
好了,如果一切就緒,就可以重啟你的系統了,注意要啟用新核心。:)祈禱……

五、開始openswan的安裝

1.確保啟用了新的核心

#uname -r
2.4.20-8custom

2.安裝生成userland tools 和 ipsec.o

#cd /usr/src/openswan-2.4.7
#make KERNELSRC=/usr/src/linux-2.4 programs module
#make KERNELSRC=/usr/src/linux-2.4 install minstall
注意:以上第二個步驟(#make KERNELSRC=/usr/src/linux-2.4 programs module)過程中若出現類同以下的錯誤,則需要編輯/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c檔案刪除“owner"對應的行,大概在原文的122和132行,把它刪除即可。
cc  -include /usr/src/openswan-2.4.7/packaging/linus/config-all.h -O3 -Wall -DIPCOMP_PREFIX -D__KERNEL__ -I/usr/src/linux-2.4.20-8/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2 -march=i686 -I/usr/src/openswan-2.4.7/linux/include -I/usr/src/linux-2.4/include  -I -DIPCOMP_PREFIX -DARCH=i386  -DMODVERSIONS -include /usr/src/linux-2.4/include/linux/modversions.h -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.20-8/include/linux/modversions.h   -DKBUILD_BASENAME=pfkey_v2  -c -o pfkey_v2.o /usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:122: unknown field `owner' specified in initializer
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:122: warning: initialization makes integer from pointer without a cast
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:122: initializer element is not computable at load time
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:122: (near initialization for `pfkey_family_ops.authentication')
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:132: unknown field `[color=Red]owner[/color]' specified in initializer
/usr/src/openswan-2.4.7/linux/net/ipsec/pfkey_v2.c:132: warning: initialization from incompatible pointer type
make[2]: *** [pfkey_v2.o] Error 1
make[2]: Leaving directory `/usr/src/openswan-2.4.7/modobj'
make[1]: *** [module24] Error 2
make[1]: Leaving directory `/usr/src/openswan-2.4.7'
make: *** [module] Error 2

3.檢查/lib/modules/2.4.20-8custom/kernel/net/ipsec的輸出中是否有ipsec.o

#ls /lib/modules/2.4.20-8custom/kernel/net/ipsec
ipsec.o

4.安裝openswan

#cd /usr/src/openswan-2.4.7
#make programs
#make install

六、啟動並檢查啟動狀態

1.編輯/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.啟動openswan

#service ipsec start
ipsec_setup: Starting Openswan IPsec 2.4.7...

3.檢查狀態

#ipsec verify
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [color=Green][OK][/color]
Linux Openswan 2.4.7 (klips)
Checking for IPsec support in kernel                           [color=Green] [OK][/color]
Checking for RSA private key (/etc/ipsec.secrets)              [color=Green] [OK][/color]
Checking that pluto is running                                  [color=Green][OK][/color]
Two or more interfaces found, checking IP forwarding           [color=Green] [OK][/color]
Checking NAT and MASQUERADEing                              
Checking for 'ip' command                                       [color=Green][OK][/color]
Checking for 'iptables' command                                 [color=Green][OK][/color]
Opportunistic Encryption Support                              [color=Red]  [DISABLED][/color]
[size=2][color=Red]

第三部分,配置Openswan

openswan的連線方式有兩類:

1)NET-TO-NET方式

使用這種方式,可以將兩個不同的位置的networks連線成為一個虛擬專用網;連線建立後,兩端的主機可以透明的
互相訪問。不過,兩個閘道器間以及閘道器到對方內部網路內主機不能實現透明的互相訪問。這也是第二種方式Road
Warrior存在的部分原因。
使用這種方式必須滿足以下條件:
A 兩個network都有自己的Linux閘道器,且每個閘道器都安裝了openswan;
B 兩端網路的IP地址不能出現疊加;
在本地網的閘道器上最好安裝了tcpdump,以便測試連線


2)Road Warrior方式

這種方式用以實現遠端主機到本地網路的安全撥入,主要用於經常有員工出差時可以遠端安全的訪問企業內部的資
源。
使用這種方式應該滿足以下條件:
一個具有靜態IP地址的Linux閘道器,安裝了openswan
一個安裝了openswan的laptop,可以是動態IP地址
在本地網的閘道器上最好安裝了tcpdump,以便測試連線
openswan支援多種認證方式,如RSA、RSK、XAUTH、X.509等;最常用到的是RSA和x.509,下面我們就分別介紹這兩種認證下openswan的各種連線方式的配置。
[color=Blue]一、RSA認證方式[/color]

一)net-to-net連線

1. 用到的網路模型如下:

  left network<--------->left gateway<-------|------->right gateway<-------->right network
(192.168.10.0/24)    (eth1:192.168.10.254           (eth0:192.168.1.202      (192.168.100.0/24)
                         eth0:192.168.1.201                  eth1:192.168.100.254
                         defaultGW:192.168.1.1)            defaultGW:192.168.1.1)

除了以上IP地址資訊外,還應該為每個閘道器準備一個用於在IPSEC協商中用以區分彼此的標識,可以用閘道器自身的
FQDN,或者其它的名字,如@left、@right.mydomain.org。這個名字完全可以由自己編配。
2.
獲得左側(左右可以由管理員自己定義,一般以本地為左,遠端為右)閘道器的ipsec公匙並追加至/etc/ipsec.conf中
,在left gateway上執行如下命令:

#ipsec showhostkey --left >> /etc/ipsec.conf

其輸出為類同如下結果(由於輸出很長,故用省略號替代):
# RSA 2192 bits   Left   Sat Mar 10 11:44:12 2007
leftrsasigkey=0sAQOuY/CYUfe66P+RXeZ0TXEbH......

執行如下命令將檔案/etc/ipsec.conf拷貝為右側閘道器的/etc/ipsec.conf(目的是獲得右側閘道器的public key)

#scp /etc/ipsec.conf [email protected]:/etc/ipsec.conf

獲得右閘道器的ipsec公匙並追加至/etc/ipsec.conf中,在right gateway上執行如下命令:

#ipsec showhostkey --right >> /etc/ipsec.conf

將右閘道器的/etc/ipsec.conf檔案拷貝回左閘道器一份:

#scp /etc/ipsec.conf [email protected]:/etc/ipsec.conf

注:在執行ipsec showhostkey命令時如果提示沒有private key存在,需要用以下命令產生一個:

    #ipsec newhostkey --out /etc/ipsec.secrets

3.在左閘道器上編輯/etc/ipsec.conf,定義要建立的連線

在/etc/ipsec.conf中如下一句之後新增新定義的連線
# Add connections here(此句前的“#”為註釋符)

conn net-to-net
        left=192.168.1.201           #左閘道器外網IP         
        leftsubnet=192.168.10.0/24   #左側內網網段
        [email protected]                 #左網標識
        leftnexthop=%defaultroute    #指定左閘道器的下一跳為預設路由
        right=192.168.1.202          #右閘道器外網IP
        rightsubnet=172.16.16.0/20   #左側網路網段
        [email protected]               #右閘道器標識
        rightnexthop=%defaultroute   #指定右閘道器的下一跳為預設路由
        auto=add                     #授權此連線,但在閘道器間建立連線時不自動啟動,為了除錯或手動啟動

為了統一,也可將各閘道器的公匙對應在以上連線中。

將/etc/ipsec.conf拷貝至右閘道器:

3. 不要讓IP偽裝或NAT的資料包通過此連線隧道

如果在任何一邊閘道器上使用了MASQ或者NAT,則必須在閘道器上修改iptables規則以免於讓基於此目的的資料包通過
IPSEC隧道,即如果閘道器上使用瞭如下規則:

#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -j MASQUERADE

則應該修改為:

#iptables -t nat -A POSTROUTING -o eth0 -s 192.168.10.0/24 -d ! 192.168.100.0/24 -j MASQUERADE

4. 啟動連線

在本地閘道器啟動連線:

#ipsec auto --up net-to-net

輸出結果如下:

[[email protected] root]# ipsec auto --up net-to-net
104 "net-to-net" #1: STATE_MAIN_I1: initiate
003 "net-to-net" #1: received Vendor ID payload [Openswan (this version) 2.4.7  PLUTO_SENDS_VENDORID PLUTO_USES_KEYRR]
003 "net-to-net" #1: received Vendor ID payload [Dead Peer Detection]
106 "net-to-net" #1: STATE_MAIN_I2: sent MI2, expecting MR2
108 "net-to-net" #1: STATE_MAIN_I3: sent MI3, expecting MR3
004 "net-to-net" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=oakley_3des_cbc_192 prf=oakley_md5 group=modp1536}
117 "net-to-net" #2: STATE_QUICK_I1: initiate
004 "net-to-net" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0x606fcf02 <0xd0904bdd xfrm=AES_0-HMAC_SHA1 NATD=none DPD=none}

也可以通過檢視日誌/var/log/messages以及/var/log/secure來檢視連線啟動的具體情況。如果沒能正常啟動,請注意檢視後文中關於troubleshooting介紹。

5. 測試連線

在一側的內網網段裡的主機(注意:不能是閘道器)上ping對方子網內的機器(注意:不能是閘道器)

ping 192.168.100.7    (如果是windows主機,最好加上-t選項,以確保ping的持續進行)

此時,在本地的閘道器上使用如下命令來檢視輸出:

#tcpdump -i eth0

而後應該可以看到有類同如下的資料序列來來回回的穿過:

23:16:18.529865 192.168.1.201 > 192.168.1.202: ESP(spi=0x32db83e2,seq=0x154)
23:16:18.530521 192.168.1.202 > 192.168.1.201: ESP(spi=0x7e2b7039,seq=0x154)
23:16:19.531058 192.168.1.201 > 192.168.1.202: ESP(spi=0x32db83e2,seq=0x155)
23:16:19.531861 192.168.1.202 > 192.168.1.201: ESP(spi=0x7e2b7039,seq=0x155)

注:這種方式只能建立net-to-net間的連線,並不能確保gateway-gateway之間的連線或者gateway-subnet(對方)之間的連線。如果你要使用此種連線,比如一方的閘道器還是一個檔案伺服器時,那麼你還需要額外建立其它的連線。

6. 重新修訂/etc/ipsec.conf檔案(如果你想系統啟動時會自動啟用連線的話)

在各閘道器主機上找到:

auto=add

修改為:

auto=start

好了,如此你便可以盡情享用VPN給你帶來的便利了。

(二)Road warrior

1.用到的網路模型如下:

  left network<--------->left gateway<-------|------->laptop(linux)
(192.168.10.0/24)    (eth1:192.168.10.254            eth0:192.168.1.202             
                                  eth0:192.168.1.201              defaultGW:192.168.1.1)     
                                 defaultGW:192.168.1.1)        

2.前提要求:

    閘道器要有一個靜態的外網IP,並要確定好閘道器後的子網IP地址範圍;
    本地閘道器和laptop都已經正確安裝了openswan
      閘道器和laptop都要有一個標識,以便在ipsec協商中區分彼此。可以是FQDN,也可以是任意編配的名字,只要能把二者區別開來即可。

3.獲得雙方公鑰:

先獲得laptop的公鑰(以其為左)

#ipsec showhostkey --left

這個公鑰和底下閘道器上的公鑰都要追加至laptop以及閘道器的/etc/ipsec.conf檔案中(但由於這次的配置中雙方/etc/ipsec.conf有很大不同,故要自己想辦法實現)。

然後,在閘道器上獲得其公鑰(以其為右):

#ipsec showhostkey --right

4.修改/etc/ipsec.conf,定義連線

在laptop上,你需要用編輯器開啟/etc/ipsec.conf,並在其後新增如下內容。你可以根據自己的情況進行修改。

conn road
        left=%defaultroute             #如果是動態IP的話,把left指向預設閘道器。若是靜態IP,填上,並新增一項leftnexthop=%defaultroute即可。      
        [email protected]                       #標識
        leftrsasigkey=……               #此處為laptop的公鑰
        right=192.168.1.201               #要撥入的閘道器的IP
        rightsubnet=192.168.10.0/24    #遠端子網
        [email protected]               #遠端閘道器標識
        rightrsasigkey=……               #遠端閘道器的公鑰
        auto=add                       #連線方式,不自動啟用

在遠端閘道器上,用編輯器編輯/etc/ipsec.conf,新增如下內容(可以概據自己的情況修改)。注意,在Road Worrior方式中,left和right的指定跟net-to-net方式有很大不同。在這種方式中,left表示本地機器,right表式遠端主機。

conn road
    left=192.168.1.201               #閘道器主機ip         
    [email protected]                #閘道器主機標識
    leftsubnet=192.168.10.0/24       #子網
    leftrsasigkey=...                #
    rightnexthop=%defaultroute       #
    right=%any                       # 遠端主機(laptop)的IP未知
    [email protected]                  #
    rightrsasigkey=...               #遠端主機(laptop)公鑰
    auto=add                         #


5. 啟動連線

啟動Road Worrior連線要在laptop端進行

#ipsec auto --up road

若輸出結果類同以下,則表示啟動成功

104 "net-net" #223: STATE_MAIN_I1: initiate
106 "road" #301: STATE_MAIN_I2: sent MI2, expecting MR2
108 "road" #301: STATE_MAIN_I3: sent MI3, expecting MR3
004 "road" #301: STATE_MAIN_I4: ISAKMP SA established
112 "road" #302: STATE_QUICK_I1: initiate
004 "road" #302: STATE_QUICK_I2: sent QI2, IPsec SA established

6. 測試連線

在laptop端,ping遠端閘道器後的任一結點進行測試,注意不要ping閘道器本身。

#ping 192.168.10.7

然後在閘道器主機上檢視ESP資料包的通過情況,如果類同如下,恭喜,你成功了。

13:46:18.529865 192.168.1.201 > 192.168.1.202: ESP(spi=0x32db83e2,seq=0x154)
13:46:18.530521 192.168.1.202 > 192.168.1.201: ESP(spi=0x7e2b7039,seq=0x154)


可能大家已經注意到了,這種方式仍然只能對閘道器後的主機與laptop之間的資料流進行加密,而並不能保護閘道器本向到laptop之間的資料。

7. 修改配置,使“road”連線可以自動啟動

在雙方主機的/etc/ipsec.conf中,找到

auto=add

修改為:

auto=start

8. 在如上的RSA的Road Warriors中,如果有多個laptop需要撥入,則需要配置多路的Road Warrior來實現。通過區分每個laptop的公匙原始碼天空,以及每個連線中left/right其它引數可以使閘道器主機輕而易舉的區別每個撥入的laptop。但如果是通過PSK的認證方式來實現這種應用,將不得不讓每個laptop使用同一個金鑰,這將帶來極大的安全隱患。

第一部分:VPN簡介


Linux平臺上的VPN大致可以為分為三類:

IPSec VPN(Openswan,frees/wan,strongswan,KAME)
      IPSec(IP Security)是一種較老的也是採用的最為廣泛的VPN技術,是由IETF開發的一組身份驗正和資料加密的協議,提供了私有性、完整性、真實性和防重播等安全服務,可以用於IP網路中的資料保密、完整性檢查、身份驗正、密匙管理等許多方面。
    IPSec在Linux上的實現主要分為兩類,第一類是曾被稱作Frees/wan的專案,如今已經分裂為openswan和strongswan。它們都提供自身的核心堆疊(kernel stack),也可以基於新近的核心中所提供的程式碼。第二類是BSD之上的KAME,它只能使用核心堆疊。大多ipsec規範本身並不在本地網路中為遠端主機提供一個虛擬IP,不過仍有不少為此而實現的擴充套件可以解決諸如此類的問題。因此,可以將Microsoft的支援L2TP的產品運行於ipsec之上。
    ipsec是面各連線的協議,為很多家商業類的路由器所採用。Openswan基於自身的XAUTH擴充套件,也可以作為Cisco,Nortel以及其它多家VPN整合產品的客戶端。
    ipsec可以讓我們在不改變外部防火牆規則的情況下,在核心級別相當容易的對什麼能通過隧道或什麼不能作出安全的處理;其在實現NET-TO-NET以及host-to-net的配置方面也表現出了很大的靈活性。但靈活也就意味著實現起來的困難,所以ipsec的成功配置執行相當有難度,此外,儘管已經其在對NAT-Travel的支援方面做了不少改進,但還是不能較好的工作於一些NAT閘道器之後。

SSL VPN (openVPN)
    近來,加密套接字層(SSL)虛擬專用網(VPN)逐漸流行起來。這種VPN的最大好處在於,你僅僅需要一個單獨的TCP或者UDP埠便可以輕易的穿越大多數的防火牆進行資料傳送。SSL VPN在Linux系統上的最好實現是OpenVPN,其相當成熟和富於特色。

PPTP VPN (PoPToP)
    PPTP(Point to Point Tunneling Protocol)是由微軟發起的可以工作在包括Windows 95在內的微軟多個作業系統上的協議。雖然已經採用了相當長一段時間,但其仍存在許多安全方面的問題。它主要是基於GRE(Generic Routing Encapsulation)通過隧道來傳送一個PPP連線。Linux系統上PPTP實現的主要代表是PoPToP。如果你的確需要PPTP的話,烈建議你用基於IPSEC的L2TP來代替PPTP,因為它更加安全,並且提供了和PPTP一樣的功能。

第二部分,openswan的安裝


    FreeS/WAN是基於IPSec的VPN項,現在已經停止開發,其分裂為兩個專案,Openswan與 Strongswan。其可以用自身的IPsec核心堆疊(Kernel stack),稱為KLIPS,也可以用2.6核心中的堆疊程式碼;因為IPSec工作在網路層,所以需要系統核心態的支援,但2.4的核心沒有實現核心堆疊,故必須打klips補丁。同時,若想要實現NAT Traversal的支援,還需要打上NAT-T補丁。
openswan是新專案,且frees/wan已經於2004年停止開發,於是我們想當然地要用openswan了。
既然要做閘道器轉發資料,兩個或更多的NIC自然是必不可少的了.

一、安裝核心原始碼

1。你可以從網上下載2.4的最新版本至/usr/src,並解壓縮;我這裡使用發行光碟中自帶的核心原始碼實現,掛載RH 9.0的第二張盤並執行以下命令安裝
#rpm -ivh kernel-source-2.4.20-8.i386.rpm
2.檢查/usr/src目錄下的linux和linux-2.4是否已連結到新近安裝的核心原始碼,如果沒有,則執行以下命令建立連結:
#ln -s linux-2.4.20-8  linux
#ln -s linux-2.4.20-8  linux-2.4

二、下載openswan、klips補丁和nat-t補丁至/usr/src目錄中

1.下載地址為:[url]http://www.openswan.org/code[/url],請下載以下全部三個軟體包
openswan-2.4.7.tar.gz
openswan-2.4.7.kernel-2.4-klips.patch.gz
openswan-2.4.7.kernel-2.4-natt.patch.gz
2.解壓openswan,並將補丁拷貝至其解壓出的目錄中
#cd /usr/src
#tar zxvf openswan-2.4.7.tar.gz
#cp openswan-2.4.7.kernel-2.4-*  /usr/src/openswan-2.4.7

三、進入原始碼目錄,進行核心編譯的準備工作

1.清理原始碼樹
#cd /usr/src/linux-2.4
#make mrproper
2.生成核心原始碼
#cp ./configs/kernel-2.4.20-i686.config  .config
#make menuconfig
選擇你所需要的核心選項,儲存退出即可。請注意,儘量不要把關於開發以及實驗性的選項編譯進來。
注:如果你的Linux是安裝在VMWare之上的話,請確保選擇了以下幾項:
   Ram Disk驅動:
     Block devices--->
       < * > RAM disk support
       (4096) Default RAM disk size (NEW)
       < * > Initial RAM disk (initrd) support
  檔案系統:
     File systems--->
       [ * ] Ext3 journalling file system support
       [ * ] JBD (ext3) debugging support 
  SCSI驅動,如果你使用的是模擬SCSI硬碟(若是升級安裝核心,BusLogic SCSI support項亦必需設定為‘M’),此項尤其應該注意:
      < * >  SCSI support--->
         SCSI low-level drivers --->
            < M >BusLogic SCSI support
  虛擬網絡卡AMD PCnet32 驅動:
    Device Drivers  --->
       Networking support  --->
           Ethernet (10 or 100Mbit)  --->
             <*>   AMD PCnet32 PCI support
3.建立新核心模組所需要的目錄

#mkdir -pv /lib/modules/2.4.20-8custom

四、應用核心補丁,並編譯安裝核心

相關推薦

linux環境構建ipsec vpn過程

第一部分:VPN簡介 Linux平臺上的VPN大致可以為分為三類: IPSec VPN(Openswan,frees/wan,strongswan,KAME)       IPSec(IP Security)是一種較老的也是採用的最為廣泛的VPN技術,是由IETF開發

linux環境的python安裝過程(含setuptools)

這裡我不想採用諸如ubuntu下的apt-get install方式進行python的安裝,而是在linux下采用原始碼包的方式進行python的安裝。 一、下載python原始碼包 開啟ubuntu下的shell終端,通過wget命令下載python原始碼包,如下圖所示

linux環境部署zabbix3.2、模板、郵件告警詳細過程

-1 ice erer without zlib zip ever native item 服務端部署: 系統環境及軟件版本: Linux:release 6.3 zabbix:zabbix-3.2.5.tar.gz nginx:nginx-1.12.0.tar.gz ph

語言程式的編譯、連結具體過程Linux環境的具體例項

我們知道一個C語言程式從編寫完成到生成可執行檔案分為預處理、編譯、彙編、連結,最後再生成可執行檔案。 預處理階段 前處理器主要做四部分工作,分別是:標頭檔案展開、巨集替換、去註釋以及條件編譯。 (1)標頭檔案展開就是編譯器會根據字元#開頭的命令去讀取相應的系統檔案或者自定義檔案, 並把相應的

記錄mosquitto在Linux環境的部署/安裝/使用/測試過程

Mosquitto mosquitto是一款實現了 MQTT v3.1 協議的開源的訊息代理服務軟體. 其提供了非常輕量級的訊息資料傳輸協議,採用釋出/訂閱模式進行工作,可用於物聯裝置、中介軟體、APP客戶端之間的訊息通訊。 mosquitto官網 關於mqtt協

C語言程式的編譯、連結具體過程Linux環境的具體例項

我們知道一個C語言程式從編寫完成到生成可執行檔案分為預處理、編譯、彙編、連結,最後再生成可執行檔案。 預處理階段 前處理器主要做四部分工作,分別是:標頭檔案展開、巨集替換、去註釋以及條件編譯。 (1)標頭檔案展開就是編譯器會根據字元#開頭的命令去讀取相

Linux環境使用pptpd搭建vpn伺服器

要搭建VPN使用pptp是一種好辦法,而在Linux下搭建pptp伺服器並不難,今天就來簡單說一下,這裡使用的Linux伺服器為Ubuntu。 1 下載pptpd #sudo apt-get install pptpd 2 設定pptpd伺

linux環境tomcat+jenkins+ant+svn自動構建Android

在搭建構建系統之前,請自行配置系統JDK+JRE+SDK編譯環境,注意需要配置ANDROID_HOME(sdk路徑,ant根據這個變數生成build.xml並編譯),以下是我的配置~/.bashrc export JAVA_HOME=/home/owner/jdk/jdk1

Linux環境hadoop安裝過程

一 實驗環境: 1.三臺物理機(可以虛擬機器虛擬出的三臺主機),其中一臺做為主節點(namenode)ip:192.168.30.50,兩臺做為從節點(datanode)ip:192.168.30.51 /   192.168.30.52 2.為每一臺主機安裝JDK1.6以

Linux環境的 pyenv的安裝

pyenvCentOS上安裝pyenv:在安裝pyenv前,需要先安裝如下的依賴包:在 CentOS/RHEL/Fedora 下:yum install readline readline-devel readline-static yum install openssl openssl-devel open

2.Linux環境配置Solr4.10.3

margin 內容 src source -type alt 技術 tgz 安裝包 1.準備階段 操作系統:CentOS 6.8 安裝包:/home/test solr-4.10.3.tgz.tar IK Analyzer 2012FF_hf1.zip jdk-8u12

由一個簡單需求到Linux環境的syslog、unix domain socket

message python domain 服務器 import 需求:回到頂部  工作中有一個在Linux(debian8)環境下運行的服務器程序,用python語言實現,代碼中有不同優先級的日誌需要記錄,開發的時候都是使用python的logging模塊輸出到文件,示例代碼如下:  

(1)Jenkins Linux環境的簡單搭建

linux java jenkins安裝部署 jdk apache-maven (1)Jenkins Linux環境下的簡單搭建 Jenkins是一個開源軟件項目,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。----百度百科 這是一款基於Java開發的工具。種種

linux 環境備份oracle 數據庫

備份 命令 目錄 lin 安裝目錄 su - linux 輸出 所有者 登陸linux後,進入oracle的安裝目錄下,找到bin那個目錄,進入bin目錄ls -l 看這些命令的所有者: su - oracle這時會進入這個用戶的主目錄/home/oracle,此時,可以用

將windows上面的項目拷貝到Linux環境報錯不能夠找到對應的表com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'puyang.ServiceType' doesn't exist

exce 服務 inux 區分 大小 blog alt logs 就會 將一模一樣的項目從win遷移到到linux上報錯: 一開始還是以為是linux不能識別hql語句,查找資料發現是因為Liunx服務器上mysql是區分大小寫的,而本地是不區分的如:代碼是這樣寫的@En

linux環境關於顯示日期及修改密碼的小練習

一只小菜鳥的成長1.顯示1984-11-18是1984年的第幾天 2.顯示當前的日期 ##上面是兩種不同的表現形式## 3.在超級用戶下修改student用戶的密碼,並且student用戶在第一次登錄後強制修改密碼 ## passwd -e ## 強制修改密碼##註意:當使用root用戶修改其他用戶密

Linux環境使用SSH判斷端口是否通

linux telnet redhat 在Linux環境下使用SSH判斷端口是否通在windows/linux環境下,可以使用telnet判斷端口狀態,但有時候在Linux環境下沒有telnet,所以可以使用ssh判斷端口狀態。 一、ssh使用方法:命令:ssh -v -p port [email

linux環境tomcat啟動成功,請求頁面出現404

無法 .html 奇怪 tomcat啟動 web訪問 第一次 裏的 同事 有變 這種情況很多,本文記錄我遇到比較奇葩的情況。 第一次tomact啟動成功,訪問404,亂搗鼓不知怎麽好了;第二次tomcat啟動成功,可以訪問部分鏈接,有些卻報404,但是代碼和數據都還是以前的

linux環境jdk部署配置

etc $path 是否 ssp java jdk1 配置系統 exp 執行文件 1、java官網下載相關的jdk包 2、配置系統環境變量,編輯/etc/profile文件,在文件的末尾添加一下信息: export JAVA_HOME=/usr/jdk1.8.0_101ex

eclipse遠程調試Linux環境的web項目

config pil logs .com xxx web declare 但是 遠程服務 前提: 遠程服務器上的代碼和本地的代碼同步 第一步 : 配置遠程服務器下的startup.sh文件   在第一行添加 : declare -x CATALINA_OPTS="-se