首页 > 学技术 > 技术网文 > VPN > 正文

[原创] 同时安装和使用两套openvpn(修改注册表键值,修改tap网卡)


来源 chinaunix.net 酷勤网整理

因为工作关系,我需要在一个系统上安装两套openvpn client系统,并且有可能需要同时使用它们登录到各自指定的openvpn server上,产生的问题是:
(1)两套系统使用相同的注册表键值(都是写入SOFTWARE/OpenVPN和SOFTWARE/OpenVPN-GUI),所以只有一套client可以使用,一套openvpn client被uninstall以后,注册表键值被删除,另一套openvpn client就不能使用。
(2)两套系统会生成两块tap网卡,它们的名称不同(本地连接x),但是在系统内部它们的硬件ID相同(都是tap0801),openvpn client被uninstall的时候,调用tapinstall命令删除网卡,该命令删除指定硬件ID的网卡(tap0801),所有硬件ID相同的网卡都会被删除。再使用另一套系统,不但要增加注册表键值,还要增加一块网卡。

解决问题的方法:
分别制作两套openvpn client的安装包,在安装包里指定使用不同的注册表键值,不同的安装包使用硬件ID不同的tap网卡。

解决问题的思路:
(1)修改openvpn源代码,包括openvpn-2.0.8.zip和openvpn-gui-1.0.3.zip。
(2)openvpn-2.0.8的源代码里有tap网卡的源代码,修改网卡的硬件ID,定制tap网卡。


解决问题的过程:
1. 安装Win32OpenSSL-0_9_7k.exe,再安装MinGW-3.2.0-rc-3.exe,再安装MSYS-1.0.10.exe。都使用默认值安装,安装到c盘。

2. 运行msys,建立/etc/fstab文件,内容为:

c:\mingw /mingw


3.把lzo-1.08.tar.gz解压缩到c:\msys\1.0\目录下,在msys里编译安装:

cd /lzo-1.08
./configure
make
make install

make install会把相关文件复制到/usr/local/lib目录下,但是在/目录下看不到有/usr目录,不用管它。

4.把openvpn-2.0.8.zip文件解压缩到C:\msys\1.0\目录下,修改makefile.w32文件的以下几个变量(可以在msys里用vi打开这个文件改,也可以在windows下改):

OPENSSL = /c/OpenSSL
LZO = ../lzo-1.08
LIB_DIRS = -L${OPENSSL}/lib/MinGW -L${LZO}/src/.libs

使用原文件的变量是无法编译成功的。

5.修改service-win32\openvpnserv.c,第74行:

#define REG_KEY "SOFTWARE\\OpenVPN"

把"OpenVPN"改成自己喜欢的名字,这就是注册表里的位置。

6.把/c/OpenSSL/lib/MinGW目录下的ssleay32.a 改名为 libssl32.a。

7.根据以下提示修改/openvpn-2.0.8/tap-win32/目录下相关文件,把这些tap0801改成自己的名称,比如abcd001:

; (1) Rename all tapXXXX instances in this file to
;     something different (use at least 5 characters
;     for this name!)
; (3) Change TARGETNAME in SOURCES to match what you
;     changed tapXXXX to.
; (4) Change TAP_COMPONENT_ID in common.h to match what
;     you changed tapXXXX to.
; (6) Change DeviceDescription and Provider strings.
; (7) Change PRODUCT_STRING in constants.h to what you
;     set DeviceDescription to.

注:(1)和(6)修改的是i386/OemWin2k.inf文件。
原文还有几条没有列出来,因为是不需要,或者是根据不存在这个文件(比如第5点)。

8.在/openvpn-2.0.8/目录下编译openvpn:

./configure
make -f makefile.w32

如果一切顺利的话,会生成新的openvpn.exe文件,这个文件会使用指定硬件ID的tap网卡。

9.把OemWin2k.inf文件复制到C:\Program Files\OpenVPN\bin目录(假设已经安装过一套openvpn client),把C:\Program Files\OpenVPN\driver\tap0801.sys文件也复制到bin目录,并且改名为abcd001.sys,使用以下命令生成新的网卡:

tapinstall install OemWin2k.inf abcd001

该命令会在系统中安装一块tap网卡,硬件ID为abcd001。

---------------------------------------


20061104 修正文档中一些错误。

(continue...)

[ 本帖最后由 sailer_sh 于 2006-11-4 11:09 编辑 ]



 河里的鱼 回复于:2006-11-02 18:48:13

可以再增加上这样做的目的吗?我比较笨,不懂这样做有什么用处


 wenzk 回复于:2006-11-02 20:04:14

呵呵,同问楼主

为什么要两套VPN呢?
难道不只是差在配置文件上?

以前我的解决办法是用两套配置文件,增加一个虚拟网卡,然后就可以同时连接2个VPN服务器了。


 sailer_sh 回复于:2006-11-03 09:13:01

我搭建了两套Openvpn系统用于不同的业务,它们相互之间没有任何联系,客户端的配置、证书等等完全不相同。
为了让使用的人方便安装,我不得不用nsis制作了针对不同openvpn server的client端,当时我没有考虑,也没有人提出会在一台电脑上安装两套client端的需求,后来有领导提出这个需求,因为他需要参与这两个业务。
如果按照client默认方式安装的话,肯定只能用其中一套client,要用另一套只能让他自己建立一个快捷方式,指定openvpn.exe读取另一个配置文件,但是这样比较麻烦,领导希望事情做得更完美,所以向我提出这个要求,由我来解决这个问题。
通过研究和解决这个问题,我觉得更增加了对openvpn的了解,越来越喜欢这个东西了。


 wenzk 回复于:2006-11-03 14:32:26

哦,赞一个,不同的需求:)


 sailer_sh 回复于:2006-11-03 15:35:52

到现在为止,已经制作出了两套不同的openvpn client,安装以后可以同时拨号,同时连到不同的openvpn server,并且两块tap网卡分别得到各自的ip地址,现在还有一个小问题,两个client同时拨号连接以后,断开其中任意一个,另外一个也会自动断开,正在查找原因,等到全部解决后,我再更新上面写的制作过程(到现在为止,上面写的制作过程还不完整)。


我对两个openvpn server稍做调整,一台上分配的网段是10.8.0.x,另一台分配的网段是10.7.0.x,这样可以避免在一台计算机上拨两个server时分配得到同一网段的ip。


 wenzk 回复于:2006-11-03 16:50:29

嗯,鼓励原创:)


 yuyuhaso 回复于:2006-11-08 11:15:20

好贴,不顶不行


 yuyuhaso 回复于:2006-11-16 12:14:10

我编译出来的东东COPY到另外一个目录后运行就会出现"无法定序数3724于动态链接库LIBEAY32.dll上"
放在编译的目录中的时候貌似就没有问题,请问怎么解决哈?


 wenzk 回复于:2006-11-17 14:54:30

把 LIBEAY32.dll 和openvpn.exe一起拷贝走


 yuyuhaso 回复于:2006-11-22 13:32:21

libeay32和编译好的openvpn程序放在一起就会报个错误
libeay32改个名字以后就不报错了,代码我还没有看,不知道是什么问题




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=850677
转载请注明作者名及原文出处



收藏本页到: