VPN配置 操作

來源:互聯網
上載者:User
VPN On OpenBSD 配置小記  

  VPN(Vitual Private Network)近年來應用愈見廣泛,關於Windows系統的配置

已經有不少專述,筆者就不準備贅述。本文只是針對個人在PC機上配置OpenBSD系

統上的VPN作一小述,同時聲明所有操作只針對本人的配置經曆,在讀者自己實施

的過程中可能有細微的差別,相信有一定OpenBSD操作經驗的讀者能夠勝任"因材施
教"。

1.什麼是VPN? 

  提出這個問題只是為了"例行公事",事實上,關於VPN的論述也是有了很多種版

本,包括china-pub.com的eMook專欄已經有不少精彩的論述。筆者不想從Ipsec、

NAT、ipfilter、PPP等基礎概念講起,只是介紹一些入門知識,更深的知識請大家

自行閱讀OpenBSD的相關文檔(FAQ和manpages等)。

  VPN是Vitual Private Network的簡稱,即Virtual Private Cloud。本文中應用的網路

環境是兩個物理上分隔開的LAN,通過一個公用的網路(比如Internet)進行通訊―

―當然,最重要的是確保兩個LAN中間進行的任何通訊都無法被這個公用網路上任
何未授權的使用者竊聽。 
  經過簡化的網路拓撲簡圖如下: 

  
              圖一
  這時候就是VPN的用武之地了。VPN對於串連兩個物理分割的LAN是最好的選擇

,它可以做到配置好以後,兩個LAN完全像物理上串連的網路!這時,兩個LAN利用

Internet作為主要的資料轉送介質來傳遞資料。無論從概念上還是功能上都講遠遠
超出原先平常串連的程式工作效率。

2.配置VPN

  首先需要明確筆者的連網環境。如果你的環境跟筆者的差不多甚至完全一樣,

那麼恭喜你,你基本上可以按照以下步驟拷貝到你的系統上;如果有一定的差別,

那麼,就像上面提到的,讀者應該完全有能力"即興發揮"找出解決辦法。何況這並
不困難。

    網路的串連跟(圖一)相同。LAN1和LAN2中間間隔大概1600KM(之所以選擇這

麼長距離的兩個LAN,是為了突出VPN的強大效能),Gateway1和Gateway2(網關)都是

OpenBSD系統的路由器。Gataway1有永久性的Internet串連和一個固定的IP地址,

而Gateway2就沒有那麼幸運,他只是一個撥號連線到Internet,而且每次撥號被必

須ISP指定新的IP地址(這個網關是用網域名稱來工作的,所以,不要擔心這種網關是否

存在)。LAN1的IP地址為192.168.35.0/24(這種寫法是"借用了"R.Stevens的TCP/IP

 Illustrated裡面的寫法,表示LAN1的網路號是192.168.35,主機數為24,IP地址

分別為192.168.35.1到192.168.35.24) ,LAN2 是 192.168.105.0/24。 

Gateway1對於LAN1有一個內部IP地址192.168.35.1,外部地址為25.50.100.200(不

用說,這是個假的,呵呵);Gateway2 有一個內部地址192.168.105.1和隨每次撥
號都要更新的外部地址。 

  配置開始。首先,Gateway得安裝號OpenBSD2.8並配置成標準網關,也就是說

,進行IP轉寄,給網關分配相應得IP地址。同時需要注意得是暫時不用配置

ipfilter,這個可以在VPN配置完成以後再配;也不要開啟任何OpenBSD安裝時得缺

省啟動得服務,比如ftp/telnet/finger/rpc/portmap之類得,這是一台安全得服

務器所必要得條件,而且可能回影響VPN配置過程,如果一定要開開,那麼請在
VPN配置完成以後再一個一個得開啟,確認VPN工作無誤。 

  ·然後,升級OpenBSD 2.8到OpenBSD-current. 因為在OpenBSD2.8的

ipsec/ipf/ipnat 實現部分有問題,所以不要嘗試在OpenBSD2.8上配置VPN。具體

來講,升級主要升級以下部分到current:
  ·核心。在連結新核心之前重新連結和安裝usr.sbin/config

  ·isakmpd
  ·ipf
  ·ipnat 以上三項需要重新連結之前安裝核心標頭檔(include 的時候 

"make include")
  只有升級這些才可以修複OpenBSD 2.8中IPSec的問題,這些問題主要包括

isakmpd導致的錯誤選路,同時也至少崩潰過幾次。而且理論上AES的問題也可以得
到解決,雖然筆者還沒有實驗過。

為了升級到最新核心,需要
  ·編譯和安裝libkvm
  ·編譯ps,vmstat,top並安裝到已經有新核心的機器上

  讀者可以在http://www.openbsd.org/anoncvs.html 查閱最新的更新。 

  新核心開始工作以後,兩台可以作OpenBSD VPN的網關就出現了。保證兩台系

統的/etc/sysctl.conf裡面都有"net.inet.esp.enable=1" ,這使

esp(Encapsulated Security Protocol)能夠工作,以後所有通過VPN隧道到達網關

的流量都是以esp形式的。只要應用了正確的密鑰,這些esp包就會被根據他們真正
的解密協議、連接埠和內容進行重新處理。 

  下一件需要作的事情是讓isakmpd開始工作,這樣才可以讓兩個網關能夠找到
對方、驗證對方的可信度從而開始交換密鑰。 

  這部分工作就不詳細描述了,man isakmpd應該已經能夠解決問題,而且筆者

用的是非常標準的配置。兩台機器利用商定的公用秘密句子來交換密鑰,這個密鑰

是給AES密碼編譯演算法用的。下面是筆者的isakmpd的設定檔,依次為isakmpd.policy

 (適用LAN 1和2), isakmpd.conf.lan1, 和 isakmpd.conf.lan2.

1.KeyNote-Version: 2

Comment: This policy accepts ESP SAs from a remote that uses the right 

password
Authorizer: "POLICY"
Licensees: "passphrase:SecRetPhrasE"

Conditions: app_domain == "IPsec policy" &&

esp_present == "yes"; 

2. # $OpenBSD: VPN-east.conf,v 1.11 2001/04/09 23:27:29 nick1 Exp $

# $EOM: VPN-east.conf,v 1.12 2001/04/09 22:08:30 nick2 Exp $

# A configuration sample for the isakmpd ISAKMP/Oakley (aka IKE) 

daemon.
#

[General]
Retransmits= 5

Exchange-max-time= 120

[Phase 1]
Default= ISAKMP-LAN2gw

[Phase 2]
Connections= IPsec-LAN1-LAN2

[ISAKMP-LAN2gw]

Phase= 1
Transport= udp
Configuration= Default-main-mode

Authentication= SecRetPhrasE

[IPsec-LAN1-LAN2]
Phase= 2

ISAKMP-peer= ISAKMP-LAN2gw
Configuration= Default-quick-mode

Local-ID= Net-LAN1
Remote-ID= Net-LAN2

[Net-LAN2]

ID-type= IPV4_ADDR_SUBNET
Network= 192.168.105.0

Netmask= 255.255.255.0

[Net-LAN1]
ID-type= IPV4_ADDR_SUBNET

Network= 192.168.55.0
Netmask= 255.255.255.0

[Default-main-mode]

DOI= IPSEC
EXCHANGE_TYPE= ID_PROT
Transforms= 3DES-SHA

[Default-quick-mode]
DOI= IPSEC
EXCHANGE_TYPE= QUICK_MODE

Suites= QM-ESP-AES-SHA-PFS-SUITE

3.# $OpenBSD: VPN-east.conf,v 1.11 2001/04/09 23:27:29 nick1 Exp $

# $EOM: VPN-east.conf,v 1.12 2001/04/09 22:08:30 nick2 Exp $

# A configuration sample for the isakmpd ISAKMP/Oakley (aka IKE) 

daemon.
#

[General]
Retransmits= 5

Exchange-max-time= 120
Listen-on= 25.50.100.200

[Phase 1]

25.50.100.200= ISAKMP-LAN1gw

[Phase 2]

Connections= IPsec-LAN2-LAN1

[ISAKMP-LAN1gw]
Phase= 1

Transport= udp
Address= 25.50.100.200

Configuration= Default-main-mode
Authentication= SecRetPhrasE

[IPsec-LAN2-LAN1]
Phase= 2
ISAKMP-peer= ISAKMP-LANAgw

Configuration= Default-quick-mode
Local-ID= Net-LAN2

Remote-ID= Net-LAN1

[Net-LAN1]
ID-type= IPV4_ADDR_SUBNET

Network= 192.168.35.0
Netmask= 255.255.255.0

[Net-LAN2]

ID-type= IPV4_ADDR_SUBNET
Network= 192.168.105.0

Netmask= 255.255.255.0

[Default-main-mode]
DOI= IPSEC

EXCHANGE_TYPE= ID_PROT
Transforms= 3DES-SHA

[Default-quick-mode]

DOI= IPSEC
EXCHANGE_TYPE= QUICK_MODE

Suites= QM-ESP-AES-SHA-PFS-SUITE

  (其他的例子可以在isakmpd.policy和isakmpd.conf的手冊裡找到)。這些檔案

都應該在網關的/etc/isakmpd下。 
  讀入這些設定檔的資訊以後,兩個網關就掌握了足夠的資訊來驗證對方身份

、交換密鑰然後用正常的過程來改變和同步他們的加密金鑰。 
  對於第一次串連來說,筆者推薦先改動一下這些檔案來適合你個人的需求,再

確保兩頭的機器都正確無誤的串連到了Internet上。 
  isakmpd -d -DA=99

  在兩頭的機器上,這會確保isakmpd在前台運行並顯示最多的調試資訊。你會

得到一頁又一頁的調試資訊,然後你就可以去看看真正加密的資訊是怎樣在機器間
傳輸的。 

  現在,你就已經應該得到一個可以啟動並執行VPN了。當然,還需要進一步的測試

。如果還是不能夠運行,那麼就檢查一下,找出出問題的地方。一個簡單的測試方

法是ping對方LAN裡面的一台機器。注意:你不能在網關上作這個實驗。所以比如從

192.168.35.2 ping 192.168.105.2,然後從192.168.105.2 ping 192.168.35.2,

 你就應該看到兩台機器跟一般的ping一樣,就像是一個LAN內的兩台機器(不必多

講,就是看TTL)。如果有興趣,還可以再看看ftp/telnet之類的。如果你的ping工
作不正常,可以看看本文最後提到的"測試和調試"。

  3. 將過程自動化 
為了避免每次需要使用VPN的時候都配置一大堆東西,一些步驟可以自動化。我們

應該能夠自動ping對方機器、讓VPN自動開始工作。需要:
  · 每當另一頭的VPN需要訪問,這邊的撥號PPP串連就應該建立

  · 自動運行isakmpd 
  建立PPP串連並不是什麼難事:在使用撥號連線的網關的/etc/rc.local檔案裡

面加上"ppp -auto -nat ISP"。這樣就使LAN2的機器一旦要串連出區域網路,網關2
就會建立ppp串連。 

  而運行isakmpd就比較複雜了,他在靜態網關和需要撥號連線的網關上工作

方法不同。對於靜態網關,只需要修改/etc/rc.conf成'isakmpd_flags=""',然後

isakmpd就可以每次重起都自動運行了。但是在撥號連線的網關上,這種方法就會

毫無用處,因為他剛剛重起過以後並沒有Internet串連。這時候,如果我們需要每

次建立PPP串連以後都自動運行isakmpd、取消PPP串連的時候也同時關閉isakmpd。

可以在/etc/ppp.linkup和/etc/ppp.linkdown裡面加入一行字。在/etc/ppp.
linkup裡面加入

MYADDR:
!bg isakmpd
而在/etc/ppp.linkdown裡面加入
MYADDR:

!bg /etc/ppp/killisakmpd
這裡killisakmpd是一個shell指令碼,內容如下:
#!/bin/sh

kill `cat /var/run/isakmpd.pid`
這樣,就可以完全將VPN的配置運行自動化了,很方便。 

4.測試和調試
  如果讀者的VPN第一次沒有正常運行,那麼你就不得不調試。如果isakmpd的一

些功能沒有正確配置、也就是雖然能夠設立路由,但是沒能加密所有的密鑰,那這
將是極為危險的。 

  首先,最好先ping一下對方LAN的機器。上面已經講過。如果工作不正常,那
麼在Gateway1上: 

tcpdump -i [網路外部介面名稱,比如fxp1, tun0 等等] host [Gateway2的IP]

這條命令可以顯示所有從 Gateway2到Gateway1的流量。理論上應該只有加密的
ping命令被傳送,就像這樣: 

16:10:07.543323 esp d7-lp-23.dial-up.net > gateway.whatever.com spi

0xEFBF34AA seq 146 len 132

16:10:07.712902 esp gateway.whatever.com spi > d7-lp-23.dial-up.net

0xB17F45A2 seq 146 len 132
  這表示進入的所有資訊都是以esp方式進行加密的,而且你的VPN正常工作。如

果你沒有看到任何有關ICMP的資訊,你的Internet串連還是未被VPN加密的。 

  當筆者的VPN沒有正常工作的時候,卻也得到了以上資訊,但是沒有ping的回

答,表示加密的資訊根本沒有在對方Gateway上處理。原因很簡單:對方Gateway運
行的是OpenBSD 2.8系統! 

5. 與NAT和防火牆(ipf)的互動性
  當以上所有工作都完成,並在沒有Ipfilter的情況下正常工作了,筆者就開啟

了NAT和ipf。沒有對標準的NAT設定作任何修改。然後在/etc/ipf.rules加上幾行
用來允許加密資訊可以通過網關

# VPN: allow any traffic on the ISAKMP port

pass in on fxp1 proto udp from any port = 500 to 25.50.100.200 port = 

500

pass out on fxp1 proto udp from 25.50.100.200 port = 500 to any port = 

500

# VPN: allow all traffic in ESP form

pass in proto esp from any to 25.50.100.200

pass out proto esp from 25.50.100.200 to any

這些規則會允許所有通過isakmpd進行的的金鑰交換和後來的加密esp過程能夠正常
進行。 

6. 結論

  從以上的記述來講,對於一個對網路、網關、NAT、ipf、ppp有基本認識的讀

者,配置一個VPN不是很難的事情。當設定好一切,還可以嘗試運用各種不同的加
密和認證手段。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.