当前位置:操作系统 > Unix/Linux >>

VPNOnOpenBSD配置小记

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:

  Comment: This policy accepts ESP SAs from a remote that uses the right passwordAuthorizer: "POLICY"Licensees: "passphrase:SecRetPhrasE"Conditions: app_domain == "IPsec policy" &&esp_present == "yes";[h4]2. # $OpenBSD: VPN-east.conf,v 1.11 2001/04/09 23:27:29 nick1 Exp $[/h4]# $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= 5Exchange-max-time= 120[Phase 1]Default= ISAKMP-LAN2gw[Phase 2]Connections= IPsec-LAN1-LAN2[ISAKMP-LAN2gw]Phase= 1Transport= udpConfiguration= Default-main-modeAuthentication= SecRetPhrasE[IPsec-LAN1-LAN2]Phase= 2ISAKMP-peer= ISAKMP-LAN2gwConfiguration= Default-quick-modeLocal-ID= Net-LAN1Remote-ID= Net-LAN2[Net-LAN2]ID-type= IPV4_ADDR_SUBNETNetwork= 192.168.105.0Netmask= 255.255.255.0[Net-LAN1]ID-type= IPV4_ADDR_SUBNETNetwork= 192.168.55.0Netmask= 255.255.255.0[Default-main-mode]DOI= IPSECEXCHANGE_TYPE= ID_PROTTransforms= 3DES-SHA[Default-quick-mode]DOI= IPSECEXCHANGE_TYPE= QUICK_MODESuites= QM-ESP-AES-SHA-PFS-SUITE[h4]3.# $OpenBSD: VPN-east.conf,v 1.11 2001/04/09 23:27:29 nick1 Exp $[/h4]# $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= 5Exchange-max-time= 120Listen-on= 25.50.100.200[Phase 1]25.50.100.200= ISAKMP-LAN1gw[Phase 2]Connections= IPsec-LAN2-LAN1[ISAKMP-LAN1gw]Phase= 1Transport= udpAddress= 25.50.100.200Configuration= Default-main-modeAuthentication= SecRetPhrasE[IPsec-LAN2-LAN1]Phase= 2ISAKMP-peer= ISAKMP-LANAgwConfiguration= Default-quick-modeLocal-ID= Net-LAN2Remote-ID= Net-LAN1[Net-LAN1]ID-type= IPV4_ADDR_SUBNETNetwork= 192.168.35.0Netmask= 255.255.255.0[Net-LAN2]ID-type= IPV4_ADDR_SUBNETNetwork= 192.168.105.0Netmask= 255.255.255.0[Default-main-mode]DOI= IPSECEXCHANGE_TYPE= ID_PROTTransforms= 3DES-SHA[Default-quick-mode]DOI= IPSECEXCHANGE_TYPE= QUICK_MODESuites= 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就
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,