现在的位置: 首页 > 综合 > 正文

VPN配置 操作

2012年12月24日 ⁄ 综合 ⁄ 共 6839字 ⁄ 字号 评论关闭
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的简称,即虚拟专用网络。本文中应用的网络

环境是两个物理上分隔开的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不是很难的事情。当设定好一切,还可以尝试运用各种不同的加
密和认证手段。

抱歉!评论已关闭.