首页 > *nix应用编程, 数据泄露, 网络安全 > 在Ubuntu上交叉编译Windows-OpenVPN并打包安装测试

在Ubuntu上交叉编译Windows-OpenVPN并打包安装测试

2013年11月1日 发表评论 阅读评论 3,985 次浏览

系统环境:

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/generic$ uname -aLinux lenky-Aspire-V5-471G 3.11.6 #2 SMP Mon Oct 28 16:14:35 CST 2013 i686 i686 i686 GNU/Linux
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/generic$ cat /etc/issue
Ubuntu 13.10 \n \l

下载:openvpn-build-master.zip

https://github.com/OpenVPN/openvpn-build

解压后进入generic目录,输入命令:
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/generic$ IMAGEROOT=`pwd`/image-win32 CHOST=i686-w64-mingw32 CBUILD=i686-pc-linux-gnu ./build

会下载相关源代码,但因为openvpn.net网站被墙,导致下载失败卡住。
解决办法,翻墙把相关源代码下载下来,在本地建立一个HTTP服务,然后修改build.vars内相关值即可:

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn$ ls
image-win32.tar.gz    openvpn-build-master      openvpn-gui-5.tar.gz
openvpn-2.3.2.tar.gz  openvpn-build-master.zip  tap-windows-9.9.2_3.zip
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn$ python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/generic$ cat build.vars | grep 8000
OPENSSL_URL="${OPENSSL_URL:-http://127.0.0.1:8000/openssl-${OPENSSL_VERSION}.tar.gz}"
TAP_WINDOWS_URL="${TAP_WINDOWS_URL:-http://127.0.0.1:8000/tap-windows-${TAP_WINDOWS_VERSION}.zip}"
OPENVPN_URL="${OPENVPN_URL:-http://127.0.0.1:8000/openvpn-${OPENVPN_VERSION}.tar.gz}"
OPENVPN_GUI_URL="${OPENVPN_GUI_URL:-http://127.0.0.1:8000/openvpn-gui-${OPENVPN_GUI_VERSION}.tar.gz}"

好像直接改用本地目录也可以,我没有尝试。

在执行编译命令,几个小错误简单解决:
错误:make[1]: i686-w64-mingw32-gcc:命令未找到
解决:sudo apt-get install gcc-mingw-w64-i686

错误:configure: error: man2html is required for win32
解决:sudo apt-get install man2html-base

编译成功后,生成的Windows可执行程序在image-win32之下:

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/generic$ ls image-win32/openvpn/bin/
c_rehash       libpkcs11-helper-1.dll  openvpn-gui.exe
libeay32.dll   openssl.exe             openvpnserv.exe
liblzo2-2.dll  openvpn.exe             ssleay32.dll

直接把这些文件拷贝到Windows上当然还不能执行,比如在Win7上执行OpenVPN GUI,将提示:
Error opening registry for reading (HKLM\SOFTWARE\OpenVPN).
OpenVPN is probably not installed

还需要进行进行打包,从而把生成的相关程序合理的部署到Windows上才能正常执行。

1,安装打包工具:
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/windows-nsis$ makensis
程序“makensis”尚未安装。 您可以使用以下命令安装:
sudo apt-get install nsis
还有其他:
sudo apt-get install libsnappy-dev
sudo apt-get install dos2unix

2,修改build-complete.vars和build.vars,把需要下载的地址都改为本地,在本地建立HTTP服务器。

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn$ ls -F
easy-rsa-2.2.0_master.tar.gz  openvpn-build-master/
image-win32.tar.gz            openvpn-build-master.zip
lzo-2.05.tar.gz               openvpn-gui-5.tar.gz
openssl-1.0.1e.tar.gz         pkcs11-helper-1.10.tar.bz2
openvpn-2.3.2.tar.gz          tap-windows-9.9.2_3.zip

3,写个脚本,内容如下,并执行它:

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/windows-nsis$ cat mybuild
#!/bin/sh

get_full_path() {
	local d="$1"
	( cd "${d}" 2> /dev/null && pwd )
}

SCRIPTROOT="$(get_full_path "$(dirname "$0")")"
TMPDIR="${SCRIPTROOT}/tmp"

main() {
	mkdir "${TMPDIR}"
	cd "${TMPDIR}"
	mkdir -p "${SCRIPTROOT}/sources"

	SPECIAL_BUILD="$(date "+%Y%m%d") ${CONFIGURE_GIT_REVISION}"

	"${SCRIPTROOT}/build-complete" \
		--special-build="${SPECIAL_BUILD}" \
		${DO_SIGN:+--sign} \
		--sign-pkcs12="${SIGN_PKCS12}" \
		--sign-pkcs12-pass="${SIGN_PKCS12_PASS}" \
		--sign-timestamp="${SIGN_TIMESTAMP_URL}" \
		--output-dir="${OUTPUT_DIR}" \
		|| die "build-complete"
	
	exit 0
}

DO_SIGN=
SIGN_PKCS12=
SIGN_PKCS12_PASS=
OUTPUT_DIR="."

main
lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/windows-nsis$ ./mybuild 

全部重新编译执行,在我这32位ubuntu系统上,对应的Windows 32位安装程序顺利生成:

lenky@lenky-Aspire-V5-471G:~/asdf/openvpn/openvpn-build-master/windows-nsis$ ls *.exe
openvpn-install-2.3.2-I003-i686.exe

64位的先不管了,我这里编译是报错提示:make[1]: x86_64-w64-mingw32-gcc:命令未找到
估计是host机器是32位ubuntu系统的缘故。
把openvpn-install-2.3.2-I003-i686.exe拷贝到Win7上安装正常,OpenVPN GUI启动OK。

1,根据http://lenky.info/?p=2367,把服务器启动。
2,将这里http://lenky.info/?p=2367制作的文件openvpnclientcrt.tar.gz,以及文件openvpn-2.3.2/sample/sample-config-files/client.conf拷贝到Win7,解压到openvpn-install-2.3.2-I003-i686.exe安装目录:C:\Program Files\OpenVPN\config。
3,修改配置文件C:\Program Files\OpenVPN\config\client.conf:

dev tun
proto tcp
remote 服务器的vpn地址 1194
user nobody
group nogroup
ca ca.crt
cert lenky-client.crt
key lenky-client.key
comp-lzo

4,将client.conf修改文件名为client.ovpn,右键点击client.ovpn,选择”Start OpenVPN on this config file”,在弹出的cmd终端里可以看到连接成功,并且网络与共享中心可以看到会新建一条本地连接。
5,关闭cmd终端,启动OpenVPN GUI,在任务栏里有个小连接图标,变成绿色的话就表明连接成功。

完全参考:

https://community.openvpn.net/openvpn/wiki/BuildingUsingGenericBuildsystem

转载请保留地址:http://www.lenky.info/archives/2013/11/2370http://lenky.info/?p=2370


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.