[原创]FreeBSD下配置IPSec:WinXP------FreeBSD

发表于:2007-06-09来源:作者:点击数: 标签:
目的:实现WinXP和FreeBSD的IPSec通信 设备:笔记本-WinXP172.16.0.199 台式机-FreeBSD4.7172.16.0.21 步骤: 一.服务器设置:(FreeBSD4.7) 1.编译内核,加入IPSec支持. OptionsIPSEC OptionsIPSEC_ESP OptionsIPSEC_DEBUG#产生大量调试信息,有信心的话,可以不加,

目的: 实现WinXP和FreeBSD的IPSec通信
设备: 笔记本-WinXP        172.16.0.199
      台式机-FreeBSD4.7   172.16.0.21
步骤: 
一.服务器设置:(FreeBSD4.7) 
      1. 编译内核,加入IPSec支持.
        Options IPSEC
        Options IPSEC_ESP
        Options IPSEC_DEBUG   #产生大量调试信息,有信心的话,可以不加,建议加上
      2.安装并配置IKE (ISAKMP/Oakley) key management daemon软件
        (1)升级ports
        (2)安装:
           #/usr/ports/security/racoon/make install clean
        (3)配置:
           文件位置:/usr/local/etc/racoon/
           使用pre-shared-key认证方式
           编辑psk.txt
            对端IP             预共享密码
           --------------------------------------
            172.16.0.199    thisiseliumao
           --------------------------------------
           其它内容删掉.
                     
           编辑racoon.conf
----------------------------------------------------------------
path include "/usr/local/etc/racoon" ;
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
log debug;   #可以根据需要选择注释
# "padding" defines some parameter of padding.  You should not touch these.
padding
{
        maximum_length 20;      # maximum padding length.
        randomize off;          # enable randomize length.
        strict_check off;       # enable strict check.
        exclusive_tail off;     # extract last one octet.
}

# if no listen directive is specified, racoon will listen to all
# available interface addresses.
listen
{
        #isakmp ::1 [7000];
        isakmp 172.16.0.21 [500]; #可以注释掉,让racoon自动选择
        #admin [7002];          # administrative's port by kmpstat.
        #strict_address;        # required all addresses must be bound.
}

# Specification of default various timer.
timer
{
        # These value can be changed per remote node.
        counter 5;              # maximum trying count to send.
        interval 20 sec;        # maximum interval to resend.
        persend 1;              # the number of packets per a send.

        # timer for waiting to complete each phase.
        phase1 30 sec;          #由于我是LAN连接,发现改动以下两行,没有
        phase2 15 sec;          #什么影响
}

#这一大段是设置phase 1的各项参数的
remote anonymous
{
        #exchange_mode main,aggressive;
        exchange_mode aggressive,main;
        doi ipsec_doi;
        situation identity_only;

        #这一段是关于CA认证方法的,这里用不到
        #my_identifier address;
        #my_identifier user_fqdn "sakane@kame.net";
        #peers_identifier user_fqdn "sakane@kame.net";
        #certificate_type x509 "mycert" "mypriv";

        nonce_size 16;
        lifetime time 60 min;   # sec,min,hour
        initial_contact on;
        support_mip6 on;
        proposal_check obey;    # obey, strict or claim

        proposal {
                encryption_algorithm 3des;
                hash_algorithm md5;
                authentication_method pre_shared_key ;
                dh_group 2 ;
        }
}



#这一大段是设置phase 2的各项参数的
sainfo anonymous
{
        pfs_group 1;
        lifetime time 24 hour;
        encryption_algorithm 3des ;
        authentication_algorithm hmac_md5;
        compression_algorithm deflate ;
}
-------------------------------------------------------------------
        
    (4)运行racoon
    #racoon -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log
    (5)加入安全策略
    #setkey -c <<EOF
    spdadd 172.16.0.21 172.16.0.199 any -P out ipsec
    esp/transport/172.16.0.21-172.16.0.199/require;
    spdadd 172.16.0.199 172.16.0.21 any -P in ipsec
    esp/transport/172.16.0.199-172.16.0.21/require;
    EOF
    
    这里用的是transport模式,可以改成tunnel模式,只要修改上面相应的单词.   
二.  客户端设置:(WinXP)

在控制台中添加IP安全策略管理,创建IP安全策略.    
具体参数参照服务器端设置.
还可以再添加IP安全监视器,监视加密连接.

三.  连通实验
1. 在XP下
c:\>ping 172.16.0.21
成功
2. 访问172.16.0.21的www服务
成功
3  访问172.16.0.21的ftp服务
成功
4  验证是否通过IPSEC连接
在FreeBSD下
#tcpdump src or dst 172.16.0.199
类似如下输出
11:25:54.638472 eliumao1 > 172.16.0.199: ESP(spi=0x248fabee,seq=0x22c) (DF) [tos 0x8]
11:25:54.638732 eliumao1 > 172.16.0.199: ESP(spi=0x248fabee,seq=0x22d) (DF) [tos 0x10]
11:25:54.641258 eliumao1 > 172.16.0.199: ESP(spi=0x248fabee,seq=0x22e) (DF) [tos 0x10]
11:25:54.641371 eliumao1 > 172.16.0.199: ESP(spi=0x248fabee,seq=0x22f) (DF) [tos 0x8]
除广播外,应看不到其它协议

#setkey -D
连接成功后,会出现SA pair
具体请看 man setkey

四. 结果
各种协议连接速度均很快,基本感觉不到IPSec的存在

 ihweb 回复于:2003-02-24 12:35:40
[quote:a995f5a22b="eliumao"]
除广播外,应看不到其它协议

#setkey -D
连接成功后,会出现SA pair
具体请看 man setkey

四. 存在的问题

ping和http速度很快,几乎感觉不倒IPSEC的存在
但是用telnet大约需要1分20妙的时间,建立连接后,?.........[/quote:a995f5a22b]

要是再加上VPN就更爽咯。

 MaxBSD 回复于:2003-02-24 12:36:32
二流猫这篇不错哦。这里有一篇VPN/Ipsec 做Gateway的。




FreeBSD下通过IPSec建立(扩展)企业内部VPN
 
张贴者: cjacker (enthusiast) 
张贴日期 04/06/02 05:50 PM 
 


FreeBSD下通过IPSec建立(扩展)企业内部VPN 

IETF的IP层加密标准协议IPSec协议是个一个三层隧道协议,用于传输三层网络协议,它主要应用于构建企业内部虚拟专网(Intranet VPN)和扩展的企业内部虚拟专网(Extranet VPN)。IPSec 协议不是一个单独的协议,它给出了应用于IP层上网络数据安全的一整套体系结构,它包括Authentication Header(AH)协议和 Encapsulating Security Payload(ESP)协议、Internet Key Exchange(IKE)协议和用于网络验证及加密的一些算法等。IPSec 规定了如何在对等层之间选择安全协议、确定安全算法和密钥交换,向上提供了访问控制、数据源验证、数据加密等网络安全服务。 
IPSec有多种封装传输模式,其中,IPSec的ESP/tunnel mode可以跨Internet连接两个网络。FreeBSD早在3.X版本时就支持IPSec,下面我们将用两台FreeBSD主机作网关,连接两个不同地域间的网络。 

一、 环境 
LAN(Beijing)<->FreeBSD A<-----> Internet <------> FreeBSD B<->LAN(Shanghai) 

LAN(Beijing): 172.16.1.0/24 
FreeBSD A: 外部合法IP: 1.2.3.4 内部IP: 172.16.1.1 

LAN(Shanghai): 192.168.0.0/24 
FreeBSD B: 外部合法IP: 5.6.7.8 内部IP: 192.168.0.1 

二、 定制内核 
在FreeBSDA、B的内核配置文件中加入: 
options IPSEC #IP security 
options IPSEC_ESP #IP security (crypto; define w/ IPSEC) 
device gif 4 #通过gif(4) device实现IP-IP tunneling 
重新编译,安装新内核、重新启动。 

三、 配置 
在FreeBSD A下: 
# vi /usr/local/etc/rc.d/ipsec.sh 
#!/bin/sh 
# make a tunnel interface 
gifconfig gif0 1.2.3.4 5.6.7.8 
ifconfig gif0 172.16.1.1 192.168.0.1 netmask 0xffffff00 
# Make a static route 
route add -net 192.168.0.0/24 192.168.0.1 
# read in the config 
setkey -f /etc/ipsec.conf 
# chmod +x /usr/local/etc/rc.d/ipsec.sh 
# vi /etc/ipsec.conf 
flush; 
spdflush; 
add 1.2.3.4 5.6.7.8 esp 9991 -E blowfish-cbc "password"; 
add 5.6.7.8 1.2.3.4 esp 9992 -E blowfish-cbc "wordpass"; 
spdadd 172.16.1.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/1.2.3.4-5.6.7.8/require; 
spdadd 192.168.0.0/24 172.16.1.0/24 any -P in ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; 

在FreeBSD B下: 
# vi /usr/local/etc/rc.d/ipsec.sh 
#!/bin/sh 
gifconfig gif0 5.6.7.8 1.2.3.4 
i fconfig gif0 192.168.0.1 172.16.1.1 netmask 0xffffff00 
route add -net 172.16.1.0/24 172.16.1.1 
setkey -f /etc/ipsec.conf 
# chmod +x /usr/local/etc/rc.d/ipsec.sh 
# vi /etc/ipsec.conf 
flush; 
spdflush; 
# Note that the add rules are the same as on Node A! 
add 1.2.3.4 5.6.7.8 esp 9991 -E blowfish-cbc "password"; 
add 5.6.7.8 1.2.3.4 esp 9992 -E blowfish-cbc "wordpass"; 
spdadd 192.168.0.0/24 172.16.1.0/24 any -P out ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; 
spdadd 172.16.1.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/1.2.3.4-5.6.7.8/require; 

四、 测试 
两个局域网内的计算机的Default Gateway指向各自的FreeBSD主机内部地址,或者手动添加静态路由。Ping对方网内的主机,看是否联通。 

五、 其他 
1、 如果使用FreeBSD版本是4.4-Release之后,编译内核时用pseudo-device gif代替device gif 4;且在/etc/rc.conf中定义gif设备(详见/etc/default/rc.conf): 
gif_interfaces="gif0" 
gifconfig_gif0="1.2.3.4 5.6.7.8" 
否则,创建不了gif设备。可用ifconfig –a 看gif0是否建立。 
2、 如果想限制对方网内计算机的访问权限,可以结合防火墙控制

 eliumao 回复于:2003-02-24 12:46:32
其时真正的VPN同我的设置的区别,就在于安全策略
spdadd 172.16.1.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/1.2.3.4-5.6.7.8/require;
spdadd 192.168.0.0/24 172.16.1.0/24 any -P in ipsec esp/tunnel/5.6.7.8-1.2.3.4/require; 
而且那个gif device如果只想连通的话,应该是不用配置的

 eliumao 回复于:2003-02-24 13:37:50
又:to maxbsd
不是二流猫
而是e六猫

 bsdfan 回复于:2003-02-24 14:02:48
[quote:4e1f79bb93="eliumao"]又:to maxbsd
不是二流猫
而是e六猫[/quote:4e1f79bb93]
telnet和ftp慢是不是你的dns没配好。

 eliumao 回复于:2003-02-24 14:08:55
有可能
因为我为了连通无干扰,用的是简单的网络,只有两台机器。
看来很有可能是这方面的原因!!!

 eliumao 回复于:2003-02-24 14:31:05
感谢bsdfan的提醒,确实是因为主机解析,导致telnet和ftp速度变慢!!!
经实验,在正常网络环境下,速度一切正常!!!

 bsdfan 回复于:2003-02-24 17:51:00
[quote:b78e17a45e="eliumao"]感谢bsdfan的提醒,确实是因为主机解析,导致telnet和ftp速度变慢!!!
经实验,在正常网络环境下,速度一切正常!!![/quote:b78e17a45e]
不谢,互相学习

 freedemon 回复于:2003-02-25 01:20:41
不错啊,UP一下。

:I

 wienne 回复于:2003-02-28 22:59:55
在生效策略后,

我和服务器的连接就断开,再也连不上了

不知道XP里到底要配置些什么?

 eliumao 回复于:2003-03-03 09:18:20
XP客户端的大致配置
1。控制台-添加删除管理单元-添加-IP安全策略管理-添加-本地计算机
这时,在控制台根节点下面就出现了“IP安全策略,在本地计算机”。
2。再在新出现的条目下面 ,进行操作
  创建IP安全策略-下一步-下一步-去掉“激活默认响应规则“的选项-下一步-完成
这时,右侧出现“新IP安全策略”,编辑属性。
  属性-添加-下一步-选中“此规则不指定隧道”-下一步-选择LAN-选择最下面的与共享密钥,字串-输入你定义的密钥-下一步-添加

  这里加入安全策略-下一步-“要求安全设置”-下一步-选中“编辑属性”-可以进一步编辑,使通信双方一致。

注意,上面的“此规则不指定隧道”,是根据我的例子的服务器端使用esp/transport模式确定的。可以根据你自己的实际设置而改变

 wienne 回复于:2003-03-31 17:24:16
1,是有一项规则没有在XP里配置
2,是racoon的配置文件的权限要是600,且仅属于root


可是用W2K就不行了啊
谁有办法?

 eliumao 回复于:2003-03-31 17:41:08
你的win2000不行,可能是因为你没有安装高加密补丁,这个MS的网站上有.默认是没有128位加密支持的,不像XP.
那个补丁的名字叫"High Encryption pack"

 dylibin 回复于:2004-12-04 10:44:34
请问搂主,我的网络结构是这样的,用你的方法可以实现吗?

my office server--nat--internet-----------------adsl--my home(局域网ip)

说白了就是说,你介绍的方法支持nat穿越吗??

原文转自:http://www.ltesting.net