Windows XP+VMware+OpenVPN筹建VPN环境

Windows XP+VMware+OpenVPN搭建VPN环境
《Windows XP+VMware+OpenVPN搭建VPN环境》
本文档的Copyleft归rosetta所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性。

     本文旨在用最少的设备模拟搭建真实的VPN环境,用以学习研究(其实我只有一台电脑,不得己只能这样做……)。

     只需要一台windows XP操作系统即可完成此次任务,虽然只用到一台电脑,但其完成的任务是相对比较复杂的。 

     最终模拟搭建一台OpenVPN服务器,使公司出差的员工或者分支机构通过windows操作系统下使用openvpn-gui拨号软件连接公司总部VPN并访问内网资源。

   Windows XP+VMware+OpenVPN筹建VPN环境

一,网络配置及软硬件环境

(出差员工/分支机构)VPN客户端运行环境 windows xp一台:
      公网IP 10.10.10.22
      虚拟IP 20.0.0.6
      虚拟gw 20.0.0.5
  (公司VPN服务器)VMware中运行的CentOS-5.4:
      内网IP(eth0) 192.168.10.10
      公网IP(eth1) 10.10.10.10
      虚拟IP       20.0.0.1
      虚拟gw       20.0.0.2
  (公司局域网)VMware 中运行的windows xp:
      IP 192.168.10.202
      gw 192.168.10.10


    Linux OpenVPN Server版本:openvpn-2.0.9

    Windows OpenVPN 客户端版本:Openvpn-2.0.9-gui-1.0.3

    按上面说明配置相关IP及网关。需要说明的是,此次运行VPN客户端的xp主机使用的网卡接口是VMware的VMware Network Adapter VMnet8而不本地连接。VMware中的CentOS-5.4和windows xp网络设置使用VMnet8而不是桥接,设置如下图所示。

Windows XP+VMware+OpenVPN筹建VPN环境


Windows XP+VMware+OpenVPN筹建VPN环境


二,安装OpenVPN服务器
    1,首先关闭SELinux和iptables,通过setup进行关掉,并执行:
    service iptables stop

    2,解压缩openvpn-2.0.9.tar.gz并进入openvpn-2.0.9目录
    由于我不使用lzo压缩,所以加--disable-lzo
    [root@xxx openvpn-2.0.9]# pwd
    /root/openvpn/openvpn-2.0.9
    [root@xxx openvpn-2.0.9]# ./configure --disable-lzo
    [root@xxx openvpn-2.0.9]# make;make install

    3,加载tun内核模块并启用转发:
    [root@xxx openvpn-2.0.9]# modprobe tun
    [root@xxx openvpn-2.0.9]# lsmod|grep tun
    tun                    21441  0
    [root@xxx openvpn-2.0.9]# echo 1 > /proc/sys/net/ipv4/ip_forward
    [root@xxx openvpn-2.0.9]# cat /proc/sys/net/ipv4/ip_forward
    1

    可以查看一下tun.ko放在的位置:
    [root@xxx ~]# locate tun.ko
    /lib/modules/2.6.18-164.el5xen/kernel/drivers/net/tun.ko

    4,设置环境变量:
    [root@xxx ~]# vim ~/.bash_profile
    后面加以下内容:
    D=/root/openvpn/openvpn-2.0.9/easy-rsa/
    KEY_CONFIG=$D/openssl.cnf
    KEY_DIR=$D/keys
    KEY_SIZE=1024
    KEY_COUNTRY=CN
    KEY_PROVINCE=bj
    KEY_CITY=bj
    KEY_ORG="bj"
    KEY_EMAIL="bj@126.com"
    export KEY_CONFIG KEY_DIR KEY_SIZE KEY_COUNTRY KEY_PROVINCE KEY_CITY KEY_ORG KEY_EMAIL D

    让环境变量立即生效:
    [root@xxx ~]# source ~/.bash_profile
    
    5,生成CA证书,签发客户端证书,生成证书及key过程中除Common Name字段唯一,其它字段可随意填写。
    [root@xxx ~]# cd $D
    [root@xxx easy-rsa]# ./clean-all
    [root@xxx easy-rsa]# ./build-ca
    [root@xxx easy-rsa]# ./build-key-server server
    [root@xxx easy-rsa]# ./build-key client1
    [root@xxx easy-rsa]# ./build-key client2
    [root@xxx easy-rsa]# ./build-dh
    [root@xxx easy-rsa]# cd keys  //注意生成key时先进入keys目录
    [root@xxx keys]# openvpn --genkey --secret ta.key
    
    此时keys目录有如下证书及key文件:
    [root@xxx keys]# pwd
    /root/openvpn/openvpn-2.0.9/easy-rsa/keys
    [root@xxx keys]# ls
    01.pem  ca.key       client.crt  index.txt           serial      server.key
    02.pem  client2.crt  client.csr  index.txt.attr      serial.old  ta.key
    03.pem  client2.csr  client.key  index.txt.attr.old  server.crt
    ca.crt  client2.key  dh1024.pem  index.txt.old       server.csr

    把这个目录所有文件打包,因为一会客户端还需要使用:
    [root@xxx keys]# tar -zcvf keys.tar.gz *

    6,创建OpenVPN服务器配置文件
    [root@xxx keys]# vim /usr//local/etc/server.conf

    port 2194
    proto udp
    dev tun
    ;dev tap
    server 20.0.0.0 255.255.255.0
    push "route 192.168.10.0 255.255.255.0"
    ifconfig-pool-persist  /usr/local/etc/ipp.txt
    ca /usr/local/etc/keys/ca.crt
    cert /usr/local/etc/keys/server.crt
    key /usr/local/etc/keys/server.key  
    dh /usr/local/etc/keys/dh1024.pem
    tls-auth /usr/local/etc/keys/ta.key 0
    keepalive 10 120
    #comp-lzo
    status /var/log/openvpn-status.loga
    verb 4    
    persist-key
    persist-tun

    把之前keys目录下所有文件拷到:/usr/local/etc/keys/

    7,配置就绪后启动OpenVPN
    [root@xxx keys]# openvpn --config /usr//local/etc/server.conf  
    Wed Jul 25 16:00:28 2012 us=796069 UDPv4 link local (bound): [undef]:2194
    Wed Jul 25 16:00:28 2012 us=796706 UDPv4 link remote: [undef]
    Wed Jul 25 16:00:28 2012 us=797411 MULTI: multi_init called, r=256 v=256
    Wed Jul 25 16:00:28 2012 us=798210 IFCONFIG POOL: base=20.0.0.4 size=62
    Wed Jul 25 16:00:28 2012 us=799178 IFCONFIG POOL LIST
    Wed Jul 25 16:00:28 2012 us=800104 client1,20.0.0.4
    Wed Jul 25 16:00:28 2012 us=801389 Initialization Sequence Completed
    最后一行提示Initialization Sequence Completed表明启动成功。
    
    可以验证一下openvpn到底有没真正起来:
    [root@xxx openvpn-2.0.9]# lsof -i :2194
    COMMAND   PID USER   FD   TYPE DEVICE SIZE NODE NAME
    openvpn 21355 root    5u  IPv4  22646       UDP *:2194
    [root@xxx openvpn-2.0.9]# lsmod |grep tun
    tun                    21441  2

    所明一切正常。


三、 配置 OpenVPN windows客户端
    openvpn-2.0.9-gui-1.0.3-install.exe 进行默认安装即可。
    安装完毕后编辑c:\Program Files\OpenVPN\config\Office.ovpn

    client  
    dev tun
    proto udp   
    remote 10.10.10.10 2194   
    push "route 192.168.10.0 255.255.255.0"
    persist-key  
    persist-tun  
    ca ca.crt   
    cert client1.crt   
    key client1.key   
    ns-cert-type server   
    ;comp-lzo  
    verb 3   
    ;redirect-gateway def1  
    tls-auth ta.key 1

    并把之前打包的keys文件全部复制到此目录:c:\Program Files\OpenVPN\config\
    打开OpenVPN GUI尝试连接,此时因为我们使用的是证书验证,所以不需要输入用户和密码,如果要输入那就是配置文件没有配对。

四、验证
    1,在实验的过程中也遇到了好多问题,其中一个就是客户端连上后发现访问不了内网那台资源,后来发现是添加路由失败。
    OpenVPN GUI连接时的信息如下图,添加到192.168.18.0/24的路由,并会分配一个虚拟IP 20.0.0.6,默认网关20.0.0.5:
     Windows XP+VMware+OpenVPN筹建VPN环境
    2,连接成功情况下的路由表:

    C:\>route PRINT

    Windows XP+VMware+OpenVPN筹建VPN环境

 
    3,尝试ping访问
    C:\>ping 192.168.10.202
    
    Pinging 192.168.10.202 with 32 bytes of data:
    
    Reply from 192.168.10.202: bytes=32 time=4ms TTL=63
    Reply from 192.168.10.202: bytes=32 time=1ms TTL=63
    Reply from 192.168.10.202: bytes=32 time=1ms TTL=63
    Reply from 192.168.10.202: bytes=32 time=1ms TTL=63
    
    Ping statistics for 192.168.10.202:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:

        Minimum = 1ms, Maximum = 4ms, Average = 1ms

    在服务器处抓包:

Windows XP+VMware+OpenVPN筹建VPN环境


    4,tracert,它的下一跳就是OpenVPN服务器的虚拟IP。
    C:\>tracert 192.168.10.202
    
    Tracing route to 192.168.10.202 over a maximum of 30 hops
    
      1     1 ms    <1 ms    <1 ms  20.0.0.1
      2     1 ms    <1 ms    <1 ms  192.168.10.202
    
    Trace complete.
    
    5,ftp访问资源
    C:\>ftp 192.168.10.202
    Connected to 192.168.10.202.
    220 ICS FTP Server ready
    User (192.168.10.202:(none)):
    331 Password required for .
    Password:
    230 User  logged in.
    ftp> dir
    200 Port command successful.
    150 Opening data connection for directory list.
    -rwxrwxrwx   1 ftp      ftp            0 Nov 06  2010 AUTOEXEC.BAT
    -rw-rw-rw-   1 ftp      ftp            0 Nov 06  2010 CONFIG.SYS
    drw-rw-rw-   1 ftp      ftp            0 Nov 06  2010 Documents and Settings
    drw-rw-rw-   1 ftp      ftp            0 Jun 27  2011 Program Files
    drw-rw-rw-   1 ftp      ftp            0 Jun 27  2011 WINDOWS
    226 File sent ok

    ftp: 收到 344 字节,用时 0.06Seconds 5.46Kbytes/sec.


    内网资源图:

Windows XP+VMware+OpenVPN筹建VPN环境