网络上目前的有关Windows平台下,OpenVPN的编译方式无非两种,一种就是使用VS2010来编译,第二种就是使用MinGW来编译。
我想作为一名Windows程序员,对VS编译器的钟爱是可以理解的,本人最开始也是使用VS对OpenVPN2.1.1的源代码进行了编译。非常的幸运,虽然有一些编译错误,不过用了不到两天时间就一一解决了。编译通过后,心情舒畅,不过随之而来的一个问题是如何使用呢?如果是下载的OpenVPN的exe安装包,安装完成后,会生成一个虚拟网卡,而且会有gui的界面,简单的改写配置文件后,双击OpenVPN的图标就可以运行了。但是使用VS2010编译OpenVPN的源码包之后,在Debug目录下只生成了一个文件。据我所知,此文件只能用来对OpenVPN进行一些配置工作,对于其他的功能,比如OpenVPN的虚拟网卡是没有办法通过此exe文件生成的。
依据我的观点,那就是如果在VS中编译OpenVPN,那么其他周边的功能,需要你自己去下载第三方的软件来完成,比如生成一个虚拟VPN网卡。
这样的话就很不方便了,而且网上也没有相关的操作说明,怎么安装,如何配置都需要自己摸索,对于我这等新手而言难度颇大。
至于OpenVPN编译的第二种方法,则是我力荐给大家的一种方法,它使用MinGW进行编译,每一步操作的详细说明网上教程都给的非常详细,资料比较多,而且最后生成的exe是一个OpenVPN的安装包,和官方提供的安装包别无二致,所以说,编译好之后,只要双击此安装包,至于安装虚拟VPN网卡等依赖第三方的工作,都可以轻松搞定了。
不过,对于源代码编译而言,一台机子也许就会有一台机子不同的问题,单纯地依赖网上的教程,很多时候没有办法达到我们最终的目的,下面我就讲一下,我的编译过程,其主要的步骤皆来自于互联网,其中补充了我自己在编译过程中遇到的问题,并且给出了解决之道,希望给大家以启发。
--------------------------------------
安装步骤
注意:以下提到的安装路径皆为示例,如无特殊说明,皆可根据实际情况作更改。
安装NSIS
下载链接:sourceforge/projects/nsis/files/NSIS 2/2.46//download
正常安装即可。如无必要,请选择完整安装。
安装MinGW
下载链接:sourceforge/projects/mingw/files/Automated MinGW Installer
呃…选择文件列表里的MinGW-5.下载…
选择完整安装,安装到D:\MinGW下。
安装MSYS
下载链接:downloads.sourceforge/mingw/MSYS-1.
选择安装到D:\msys\1.0\目录下。
安装msysDTK
下载链接:downloads.sourceforge/mingw/msysDTK-1.
和MSYS选择安装在相同位置,D:\msys\1.0\目录下。
配置环境变量
我的电脑,右键->属性->高级->环境变量,观察窗口上部“XXX的用户环境变量”,看是否有PATH这个环境变量。
如果有,双击修改,在最后加上’;c:\MinGW\bin;d:\msys\1.0\bin‘(单引号内内容,注意最前面的分号)。
如果没有,新建一个,变量名PATH,变量值’c:\MinGW\bin;d:\msys\1.0\bin‘(单引号内内容,注意最前面没有分号)
完成操作后,开始->运行,打开cmd窗口,输入bash。如果出现“bash-3.1$”字样,说明环境变量修改成功。输入exit退出bash。
下载OpenVPN预编译文件
这里的预编译文件不是openvpn本身的预编译文件,而是例如openssl,tap驱动等等openvpn编译过程中需要的二进制文件
下载链接:openvpn/prebuilt/
版本不是2.1.1没有关系,因为2.1_rc22到2.1.0的代码变化不多,而2.1.0到2.1.1只是修正了一下内置的rpm打包用的spec文件而已…
解压,获得以下目录:
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper
lzo-2.02
openssl-0.9.8l
pkcs11-helper
将以上4个目录中都复制到C:\下
下载OpenVPN GUI二进制文件
下载链接:openvpn.se/files/binary/openvpn-gui-1.
如果想深度定制自己的OpenVPN安装程序,可以自行编译安装OpenVPN GUI,修改源码中的rc文件得到自定义效果。具体就不在这里介绍了
下载后在C盘下建立openvpn-gui目录,将openvpn-gui-1.放到这个目录下
下载OpenVPN 2.1.1源码
下载链接:openvpn/release/openvpn-2.1.
下载解压,获得openvpn-2.1.1目录,放到C盘下
至此,C盘目录下有如下文件夹:
openvpn-2.1.1
openvpn-gui
gen-prebuilt
lzo-2.02
openvpn-gui
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper
pkcs11-helper
如果有缺少目录,请返回前面步骤检查:-)
修改编译配置文件
注意:下面提到的所有修改文件操作,请一律用“写字板”或其他专业文本编辑器,如gvim,notepad++等打开。
最后一个修改比较复杂。为了减少编译安装的复杂度,就不自己编译tap-win32驱动了,用openvpn提供的prebuilt包里的tapinstall目录来代替。没有到特别好的办法做这个hack,所以只能这么dirty了。
到openvpn-2.1.1\install-win32文件夹,修改openvpn.nsi文件,到以下代码:
; tap-64bit:
DetailPrint “We are running on a 64-bit system.”
SetOutPath “$INSTDIR\bin”
File “${GEN}\tapinstall\”
SetOutPath “$INSTDIR\driver”
File “${GEN}\driver\amd64\OemWin2k.inf”
File “${GEN}\driver\amd64\${PRODUCT_TAP_ID}.cat”
File “${GEN}\driver\amd64\${TAPDRV}”
File “${GEN}\driver\amd64\${PRODUCT_TAP_ID}.cat”
File “${GEN}\driver\amd64\${TAPDRV}”
goto tapend
tap-32bit:
DetailPrint “We are running on a 32-bit system.”
SetOutPath “$INSTDIR\bin”
File “${GEN}\tapinstall\”
File “${GEN}\tapinstall\”
SetOutPath “$INSTDIR\driver”
File “${GEN}\driver\i386\OemWin2k.inf”
File “${GEN}\driver\i386\${PRODUCT_TAP_ID}.cat”
File “${GEN}\driver\i386\${TAPDRV}”
File “${GEN}\driver\i386\OemWin2k.inf”
File “${GEN}\driver\i386\${PRODUCT_TAP_ID}.cat”
File “${GEN}\driver\i386\${TAPDRV}”
tapend:
SectionEnd
在这段代码第一行前插入:
!undef GEN
!define GEN “c:\gen-prebuilt\”
!define GEN “c:\gen-prebuilt\”
在这段代码最后一行后面插入一行:
!undef GEN
!define GEN “..”
!define GEN “..”
可选:给openvpn打补丁
如果需要给openvpn打上特殊的补丁,例如openvpn ipv6补丁,可以在这个时候完成。
修改openssl、lzo等的路径
修改C:\openvpn-2.1.1\install-win32\settings.in
到
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../openvpn-gui"
!define OPENVPN_GUI "openvpn-gui-1."
到
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../openvpn-gui"
!define OPENVPN_GUI "openvpn-gui-1."
# Include the OpenVPN XML-based GUI exe in the installer.
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"
# Prebuilt libraries. DMALLOC is optional.
!
!
define OPENSSL_DIR "../openssl.mingw/openssl-0.9.8o"
!define LZO_DIR "../lzo-2.02"
!define PKCS11_HELPER_DIR "../pkcs11-helper"
;!define DMALLOC_DIR "../dmalloc-5.4.2"
!define LZO_DIR "../lzo-2.02"
!define PKCS11_HELPER_DIR "../pkcs11-helper"
;!define DMALLOC_DIR "../dmalloc-5.4.2"
将对应内容修改成
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../gen-prebuilt"
!define OPENVPN_GUI "openvpn-gui-1."
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR "../gen-prebuilt"
!define OPENVPN_GUI "openvpn-gui-1."
# Include the OpenVPN XML-based GUI exe in the installer.
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"代码编辑器怎么下载
# May be undefined.
;!define OPENVPN_XGUI_DIR "../ovpnxml"代码编辑器怎么下载
# Prebuilt libraries. DMALLOC is optional.
!define OPENSSL_DIR "../openssl-0.9.8l"
!
!define OPENSSL_DIR "../openssl-0.9.8l"
!
define LZO_DIR "../lzo-2.02"
!define PKCS11_HELPER_DIR "../pkcs11-helper"
!define PKCS11_HELPER_DIR "../pkcs11-helper"
///////////////////////////////////////////////////////////////////////////////////////////////下面这部分内容到end结束,是在下载了较高版本的openVPN之后才需要的,而且如果版本太新,那么第三方的库跟不上更新的话,是没有办法使用的,所以强烈建议大家下载2.1.1版本的openVPN源代码
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论