寻觅生命中的那一片浅草......

文章带标签 OpenVPN

用Django管理OpenVPN帐号

一、本程序是一个管理OpenVPN的帐号的Web程序,用Django开发,主要功能
1、用户的增/删/改/查
2、查看用户的登录日志

二、与OpenVPN默认管理方式对比

1、原来OpenVPN是通过文件来管理用户名和密码的,需要ssh到服务器上管理,现在通过Web管理,不用ssh到服务器去管理用户
2、密码原来是明文,现在是加密的
3、日志入库,通过Web看登录日志

代码和安装文档托管在GitHub,

猛击下面,直到蛋疼为止:

Vpnauth

在XP下编译OpenVPN2.1.4

为什么要编译OpenVPN
OpenVPN官方提供的Windows二进制文件默认是不包含从文件读取用户名密码功能的。
服务器端可以推送更大的路由表给客户端

安装步骤
注意:以下提到的安装路径皆为示例,如无特殊说明,皆可根据实际情况作更改。

安装NSIS–用于将编译好的文件打包成安装文件
下载链接:http://sourceforge.net/projects/nsis/files/NSIS 2/2.46/nsis-2.46-setup.exe/download
默认安装即可。

安装MinGW–编译环境
下载链接:http://sourceforge.net/projects/mingw/files/Automated MinGW Installer
下载这个mingw-get-inst-20101030.exe
现在好像没有完整安装包下载了,只能下载mingw-get-inst-20101030.exe来进行在线安装,在自定义安装哪里,我吧c++也选上了

等MinGW安装好后,安装MSYS
下载链接:http://downloads.sourceforge.net/mingw/MSYS-1.0.11.exe
默认安装,安装过程会问一些问题,前面2个输入y
第三个问题输入MinGW的安装路径

C:\msys\1.0\postinstall>..\bin\sh.exe pi.sh

This is a post install process that will try to normalize between
your MinGW install if any as well as your previous MSYS installs
if any. I don’t have any traps as aborts will not hurt anything.
Do you wish to continue with the post install? [yn ] y

Do you have MinGW installed? [yn ] y

Please answer the following in the form of c:/foo/bar.
Where is your MinGW installation? C:/MinGW

安装msysDTK
下载链接:http://downloads.sourceforge.net/mingw/msysDTK-1.0.1.exe
默认安装

配置环境变量
我的电脑,右键->属性->高级->环境变量,观察窗口上部”XXX的用户环境变量”,看是否有PATH这个环境变量。
如果有,双击修改,在最后加上C:\MinGW\bin;C:\msys\1.0\bin

完成操作后,开始->运行,打开cmd窗口,输入bash。如果出现”bash-3.1$”字样,说明环境变量修改成功。输入exit退出bash。
下载OpenVPN预编译文件
这里的预编译文件不是openvpn本身的预编译文件,而是例如openssl,tap驱动等等openvpn编译过程中需要的二进制文件
下载链接:http://openvpn.net/prebuilt/2.1_rc22-prebuilt.tbz
版本不是2.1.1没有关系,因为2.1_rc22到2.1.0的代码变化不多,而2.1.0到2.1.1只是修正了一下内置的rpm打包用的spec文件而已
将2.1_rc22-prebuilt.tbz解压到c:\,获得目录C:\2.1_rc22-prebuilt\,目录下的内容是
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper

加入OpenVPN GUI二进制文件
这里有2个选择
1、下载OpenVPN GUI二进制文件,这个是英文版
下载链接:http://openvpn.se/files/binary/openvpn-gui-1.0.3.exe

2、中文版,从其他人制作的安装包中提取出openvpn-gui-1.0.3.exe,中文版

如果想深度定制自己的OpenVPN安装程序,可以自行编译安装OpenVPN GUI,修改源码中的rc文件得到自定义效果。具体就不在这里介绍了
同样将openvpn-gui-1.0.3.exe放到C:\2.1_rc22-prebuilt\目录下
下载OpenVPN 2.1.4源码
下载链接:http://swupdate.openvpn.net/community/releases/openvpn-2.1.4.tar.gz
下载解压,获得openvpn-2.1.4目录,C:\2.1_rc22-prebuilt\
至此,C:\2.1_rc22-prebuilt\目录下有如下文件和文件夹:
openvpn-2.1.4
openvpn-gui
gen-prebuilt
lzo-2.02
openssl-0.9.8l
pkcs11-helper
openvpn-gui-1.0.3.exe
如果有缺少目录,请返回前面步骤检查:-)

修改编译配置文件
注意:下面提到的所有修改文件操作,请一律用”写字板”或其他专业文本编辑器,如gvim,notepad++等打开。
到openvpn-2.1.4文件夹,修改version.m4文件
将define(PRODUCT_VERSION,[2.1.4])中方括号的内容做自定义修改。
例如修改为define(PRODUCT_VERSION,[2.1.4-johncan])。这个字符串会出现在OpenVPN安装程序中。
到openvpn-2.1.4\install-win32文件夹,修改settings.in文件
找到;!define ENABLE_PASSWORD_SAVE一行,去掉行首的分号。
注意:根据官方的manual,在settings里反注释掉 !define ENABLE_PASSWORD_SAVE 之后就可以保存密码了,
但是实际编译的时候并没有生效。请直接修改openvpn-2.1.4\misc.c文件
在 #if undef ENABLE_PASSWORD_SAVE
一行前面加上#define ENABLE_PASSWORD_SAVE

最后一个修改比较复杂。
为了减少编译安装的复杂度,就不自己编译tap-win32驱动了,用openvpn提供的prebuilt包里的tapinstall目录来代替。没有找到特别好的办法做这个hack,所以只能这么dirty了。

修改C:\2.1_rc22-prebuilt\openvpn-2.1.4\install-win32\openvpn.nsi文件,找到以下代码:
; tap-64bit:
DetailPrint “We are running on a 64-bit system.”
SetOutPath “$INSTDIR\bin”
File “${GEN}\tapinstall\amd64\tapinstall.exe”
SetOutPath “$INSTDIR\driver”
File “${GEN}\driver\amd64\OemWin2k.inf”
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\i386\tapinstall.exe”
SetOutPath “$INSTDIR\driver”
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:\2.1_rc22-prebuilt\gen-prebuilt\”
在这段代码最后一行后面插入一行:
!undef GEN
!define GEN “..”

修改后的效果

; tap-64bit:
!undef GEN
!define GEN “C:\2.1_rc22-prebuilt\gen-prebuilt\”
DetailPrint “We are running on a 64-bit system.”

SetOutPath “$INSTDIR\bin”

File “${GEN}\tapinstall\amd64\tapinstall.exe”

SetOutPath “$INSTDIR\driver”

File “${GEN}\driver\amd64\OemWin2k.inf”
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\i386\tapinstall.exe”

SetOutPath “$INSTDIR\driver”
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 “..”

修改openssl、lzo等的路径

修改C:\2.1_rc22-prebuilt\openvpn-2.1.4\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.0.3.exe”

# Include the OpenVPN XML-based GUI exe in the installer.
# 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”

将对应内容修改成
# Include the OpenVPN GUI exe in the installer.
# May be undefined.
!define OPENVPN_GUI_DIR “../../2.1_rc22-prebuilt”
!define OPENVPN_GUI “openvpn-gui-1.0.3.exe”

# Include the OpenVPN XML-based GUI exe in the installer.
# May be undefined.
;!define OPENVPN_XGUI_DIR “../ovpnxml”

# Prebuilt libraries. DMALLOC is optional.
!define OPENSSL_DIR “../../2.1_rc22-prebuilt/openssl-0.9.8l”
!define LZO_DIR “../../2.1_rc22-prebuilt/lzo-2.02”
!define PKCS11_HELPER_DIR “../../2.1_rc22-prebuilt/pkcs11-helper”

加大路由表的容量
修改C:\2.1_rc22-prebuilt\openvpn-2.1.4\common.h


#define TLS_CHANNEL_BUF_SIZE 2048
改成
#define TLS_CHANNEL_BUF_SIZE 81920


#define PUSH_BUNDLE_SIZE 1024
改为
#define PUSH_BUNDLE_SIZE 81919

可选
修改安装文件默认图标,用提供的ico图片,把C:\2.1_rc22-prebuilt\openvpn-2.1.4\images下的icon.ico替换掉

给openvpn打补丁
如果需要给openvpn打上特殊的补丁,例如openvpn ipv6补丁,可以在这个时候完成。
编译安装
开始->运行,运行cmd,依次输入以下命令:
d:
cd openvpn-2.1.4
bash domake-win
OK,openvpn开始编译了:-)

编译好之后
大概会有如下输出
Using lzma compression.

EXE header size: 38912 / 34304 bytes
Install code: 14908 / 73462 bytes
Install data: 1566849 / 4212428 bytes
Uninstall code+data: 20748 / 24114 bytes
CRC (0xC82A76EA): 4 / 4 bytes

Total size: 1641421 / 4344312 bytes (37.7%)

3 warnings:
install function “GetWindowsVersion” not referenced – zeroing code (125-174) out

label “fileass” not used
label “tryaddtap” not used

安装文件将出现在C:\2.1_rc22-prebuilt\openvpn-2.1.4\gen\文件夹下。

主要参考文章
http://yegle.net/2010/05/19/compile-openvpn-2-1-1-in-windows/

2024年十二月
« 5月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031