简介4 g# G, J. w! z
Open
VPN是一个基于Open
SSL库的应用层VPN实现。和传统VPN相比,它的优点是简单易用。
( A2 U( x( ?2 H0 r/ _4 F" X
4 @- o: @ [ |& t& S. @' c: y3 R 这里简单介绍一下基于CA,采用数字证书认证,可以划分多个网段的OpenVPN配置方法。
! d3 T9 C$ N0 O! @
2 h# U3 |" t( N1 e2 L+ a Note1:VNN和OpenVPN很像。
# P0 R% o* K. J2 f9 g& G0 x, {9 x8 s0 I& N7 N
Note2:这个东西对于突破国内
网络封锁,保护
通信自由很有意义,值得大力推广。
) k8 q8 }' z, S y# I" F
! h) L6 @0 D# h" E: g. m 安装OpenVPN; r7 o) t; h0 F' c1 ^
. W/ p4 ]' s$ R
Linux下的安装
2 x7 G0 _. }: W0 ?( F% [% G' e D
% [( a" B' q4 v& r 首先,Kernel必须支持TUN/TAP设备。在2.6.x内核中,对应的Kernel选项是“UniversalTUN/TAPdevicedriversupport”。
5 q7 W( e- q7 O5 R, h* V
' P) G3 _2 Y4 D& }0 n 确认Kernel支持TUN/TAP后,可以
下载OpenVPN编译并安装。这一步很easy,不多说了。
2 z- t5 ^' b# T! R' o8 V3 r2 U5 g) ^. r- y2 f* Q, [
Windows下的安装
5 B0 g5 |0 B. s9 `1 [1 |
5 q& H0 H9 Y& S! ~" P y
从http://www.openvpn.se(http://www.openvpn.se/)下载安装包安装,这里的安装包带一个ClientGUI工具,很好用。
* V: G& P$ d% K( N) r3 r! A8 d! {- a4 ^; o+ \3 j
配置OpenVPN
( i" |" `$ D( _5 t/ i4 O* w0 K6 [3 m0 t+ r( L2 X% K R* j8 r: l
配置OpenVPN
Server
. i' {/ W* u* G. N h5 d[color=#FFFFFF']
4 k+ @* Z# k8 n+ e o
! t- j J0 r, a" u6 P8 f9 q/ U, j
8 f: c; C+ q# l B" O4 m5 F" K& d 只说明在Linux下的配置。Windows
类似。创建/etc/vpn/server.conf,内容如下:
2 @, }9 o0 a% ~$ K O
8 T7 _# L, \% O: M+ l
: H4 G' O9 l6 F% h, ]0 v9 C: j9 N) e
5 v; k0 S" Y# l8 ]' \; D
: r! b, B8 p7 l# V; S
. t; x3 y- K N) `, }2 G l. k yport1494
+ M$ z2 v- ^0 x5 A. \9 z/ Z
protoudp
' R8 L' h9 P! Y6 u
devtun
4 t5 D' N$ i6 V8 z& v; H
caca.crt
! a8 E1 Z+ L% o6 O: T# R9 d2 ucertserver.crt
" n: @( `1 r; b1 T. C, S/ O* _, e
keyserver.key
! l7 w( L: \: W
dhdh1024.pem
# n6 B3 m C) D, K' {
+ Z: u V: o7 O6 l
server10.1.0.0255.255.255.0
% n# P7 ^) E2 z: Q
8 y! ? f7 L0 b/ |" jpush"route10.1.0.0255.255.255.0"
2 i8 }; R0 v- ]1 f j4 _' R1 C" ~( h! n& Rpush"route10.1.1.0255.255.255.0"
k+ L" q c3 U+ ^1 R. r
3 Y4 i+ z6 `1 l- D- d/ @, Z4 ^( v8 ~3 n
client-config-dir/etc/vpn/ccd
6 c9 E4 L l0 x% eroute10.1.1.0255.255.255.0
1 ?& {, r/ D: p! D9 `
8 S: _% i1 D; r8 {( B' _1 i
client-to-client
7 ^& k8 u* s& @0 D9 ?5 X
2 K6 B+ A) U3 Y7 @6 }- W* A- c
keepalive10120
- q, A" r# S- a! @0 p7 R
" l1 W7 {8 l+ |$ r; G. b, m/ {usernobody
# a" v$ K7 D" q a& Kgroupnobody
% K! G8 l0 e; p% ~7 f6 V$ `7 \+ X* k6 g+ W
persist-key
. I/ E+ \0 \& G: f. P& C9 Z
persist-tun
+ U# o2 q" o8 q+ q* j: z0 g% q; F, l1 N% j
log-appendopenvpn.log
; E" X s$ b% \- w9 J/ ^( F
verb3
) F3 u( u6 [& p9 a
2 `# l) @/ {) [7 D% ]5 K
其中ca.crt,server.key,server.crt可以用以前贴出的ca工具创建,dh1024.pem用OpenVPN自带的工具创建。
) M- M5 S) B, |) ^; Z) R c2 G, C% [) r5 D+ y; `8 V
这个配置文件创建了两个网段:10.1.0.*和10.1.1.*,VPN
服务器将从这两个网段中给Client分配IP地址。VPNServer自身IP将是10.0.0.1。
5 N% T" G7 u& d6 ], y$ F
- m. B1 o @: j! [" I- ~6 F1 | “client-config-dir”指明Client的专有配置文件目录。在这个目录下可以针对特定用户建立配置文件。例如,要为用户abc指定一个IP地址(如10.1.1.5)而不是让VPNServer自动分配,可以在配置目录/etc/vpn/ccd下建立一个abc文件,内容如下:
6 L( W; N4 G# K4 ~. `2 S, k" L8 t% a+ y* i. D& e
8 B, b+ K, Q$ t3 K0 |" v1 D9 _: t% t+ p# S1 }' I4 I
8 _4 B, q7 m& q5 o: h% R
* @# B1 `! L7 h8 { _
/ u6 C& ~; \6 X& _ifconfig-push10.1.1.510.1.1.6
( z4 i4 J7 p5 c' Z' w& F5 E4 \( t3 Y/ u- b& `/ q" R
# B' b& W. D$ R0 l9 i/ Q 那么VPNServer就会自动给abc用户分配10.1.1.5这个地址。注意第一个IP地址的最后一个数字(这里是5)必须是4*n1的数。
- G5 i8 S! T" c7 a) Y0 O. S" F" I& ]& w) w6 ?
问题是,VPNServer怎么知道哪个用户是abc呢?它是Client数字证书中的CommonName域来判断的。就是说,在连接协商时如果Client端数字证书的CommonName是abc,那么VPNServer就找配置目录下abc这个文件。
$ |/ w" \4 w* {5 L 配置OpenVPNClient* r$ U- ~: n' N9 d+ G1 {
) t" N; c9 n/ A) ? 在Client
机器上OpenVPN安装目录的config目录下建立如下client.ovpn文件:
! w z, n" ] N6 s& m
t) M3 A4 }( s2 j$ ~
9 c+ i1 o/ E9 J, J! @2 G* }% B5 N) j8 f
* U5 X+ u( W0 R- r- k2 M
M. M" v c2 q( G$ _
: y! K0 A2 ~0 v4 w) u; uclient
0 L8 a0 ~% _. n/ v) B) {. qdevtun
' W! ~1 ]# q7 U6 o: I/ o( M3 K, Z
protoudp
* I/ U8 Y. E- L5 _+ H. U: g
remotevpn_server_ip1494
; l; @. L2 B( [0 Z8 U( O
+ z% [- m& C+ X& }* Ccaca.crt
$ _: D' M- ]/ z2 W$ scryptoapicert"SUBJ:abc"
6 W7 N! R U1 ]/ s& q# m
# i4 r0 s. l+ g2 g, `nobind
6 l& a& |; ~/ E+ X
persist-key
, U1 V, P x# }0 U6 w0 W
persist-tun
. @) f( `5 i g: [$ Mverb2
$ c8 g+ J L+ b, D6 P
4 J; L8 q! W$ j+ H; D% m- h& B
5 }/ J" M5 M% y& e9 J. O# H" ]2 F2 P 修改remote一行填上对应VPNServer的IP和
端口。ca.crt和服务端ca.crt一样,必须把这个ca.crt也放在config目录下。
$ V _1 q7 r" G( F+ q6 |
. U4 b# K& w/ C6 ]' s) @ 关键是cryptoapicert"SUBJ:abc"这行。这一行指定客户端的数字证书从Windows证书Store里取。在IE的“选项-%26gt;内容-%26gt;证书”页面能看到你的个人数字证书。
4 i8 v0 [, t# G! H2 M y
8 P! O7 z: Z! W. M9 R* f( J SUBJ:abc指明选择证书主题中含有abc的证书。客户端数字证书也可以用以前贴的ca工具生成,如果要给用户abc签发数字证书,只用指明CommonName是abc即可,然后把生成的abc.p12传给abc用户并告诉导入口令。abc导入这个数字证书后,VPNClient就可以工作了。
$ }- L0 k: O7 m+ {3 F
1 V* O e# s1 B. _ 启动OpenVPN
) b9 l7 I+ ~. P! Z4 }2 ^8 [
6 b0 X# F" Z6 k8 G) @7 J( _ 服务端启动
% P# s4 [: l# s
m4 r9 J7 P) _ 在/etc/vpn目录下,执行:
" g( e, P# [) y; \5 s+ j9 i( ~( t
! c' T8 I, A" e* r8 f) m+ X: X$ z4 x8 e! Z" N5 ?3 k5 l7 H
0 I# E2 i! e- \9 e: Y. J/ O* i; n# `. r0 q
: @1 g c5 T# z& ^
V; G9 i9 S$ h, s3 v- I2 S4 p
openvpn--daemon--configserver.conf
6 |1 E# U6 t3 P
[color=#FFFFFF']
* D3 ~# n$ o% ?4 i
$ l$ D1 ]! ]$ J% n% ?9 K+ c* i
9 _1 v. {7 S, S# O7 ~/ s
客户端启动
! k( F0 r# U2 f6 a4 r! t4 x, B5 Q
; e: c- @/ a K$ T7 \ OpenVPN带一个GUI小工具,会装在
系统托盘里。点菜单里的connect即可。
( X B% I7 e# U4 t
' z$ U: f# n" U& K, h% C0 [( B/ x4 G 常见问题+ N" x" j/ B% ^4 w& Q