同時安裝和使用兩套openvpn(修改註冊表鍵值,修改tap網卡)

火星人 @ 2014-03-05 , reply:0


同時安裝和使用兩套openvpn(修改註冊表鍵值,修改tap網卡)

因為工作關係,我需要在一個系統上安裝兩套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 編輯 ]
《解決方案》

可以再增加上這樣做的目的嗎?我比較笨,不懂這樣做有什麼用處
《解決方案》

呵呵,同問樓主

為什麼要兩套VPN呢?
難道不只是差在配置文件上?

以前我的解決辦法是用兩套配置文件,增加一個虛擬網卡,然後就可以同時連接2個VPN伺服器了。
《解決方案》

我搭建了兩套Openvpn系統用於不同的業務,它們相互之間沒有任何聯繫,客戶端的配置、證書等等完全不相同。
為了讓使用的人方便安裝,我不得不用nsis製作了針對不同openvpn server的client端,當時我沒有考慮,也沒有人提出會在一台電腦上安裝兩套client端的需求,後來有領導提出這個需求,因為他需要參與這兩個業務。
如果按照client默認方式安裝的話,肯定只能用其中一套client,要用另一套只能讓他自己建立一個快捷方式,指定openvpn.exe讀取另一個配置文件,但是這樣比較麻煩,領導希望事情做得更完美,所以向我提出這個要求,由我來解決這個問題。
通過研究和解決這個問題,我覺得更增加了對openvpn的了解,越來越喜歡這個東西了。
《解決方案》

哦,贊一個,不同的需求:)
《解決方案》

到現在為止,已經製作出了兩套不同的openvpn client,安裝以後可以同時撥號,同時連到不同的openvpn server,並且兩塊tap網卡分別得到各自的ip地址,現在還有一個小問題,兩個client同時撥號連接以後,斷開其中任意一個,另外一個也會自動斷開,正在查找原因,等到全部解決后,我再更新上面寫的製作過程(到現在為止,上面寫的製作過程還不完整)。


我對兩個openvpn server稍做調整,一台上分配的網段是10.8.0.x,另一台分配的網段是10.7.0.x,這樣可以避免在一台計算機上撥兩個server時分配得到同一網段的ip。
《解決方案》

嗯,鼓勵原創:)
《解決方案》

《解決方案》

《解決方案》

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




[火星人 via ] 同時安裝和使用兩套openvpn(修改註冊表鍵值,修改tap網卡)已經有434次圍觀

http://www.coctec.com/docs/service/show-post-43970.html