找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13517|回复: 0

openvpn中server.conf和client.conf配置文件详解

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
5 Q/ S2 [" @8 g+ A2 ]7 F6 B—————————–9 `# W( \, `0 ^
#申明本机使用的IP地址,也可以不说明9 o! X0 A7 ^8 D6 q. ?
;local a.b.c.d
5 O# o8 q4 V2 f2 c  F9 q$ i0 [#申明使用的端口,默认1194
# u, {' e9 T) gport 1194
1 f: ]  X* b6 J#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议% o! [: P1 y& u, q4 [, w0 z
#如果使用ipv6应改为proto tcp6或proto udp6
( ~; s4 S% ^1 Z# j# G) ?& A;proto tcp
) H8 V. c" @7 G& eproto udp
6 w7 ]8 K2 n$ y#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
1 k8 E# v; ?, D1 ]) J, `/ b" y#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
; A% z: J9 I& ]dev tap
2 l% K, T" u7 h;dev tun
5 R7 }$ ~' M8 c#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法  x5 N' h- C& s3 Y6 U$ F
ca ca.crt
( V4 |; s; u; c7 n4 W8 J#Server使用的证书文件0 a' F0 T  H# o6 f3 {+ J7 K
cert server.crt
" o9 x7 _; W! L#Server使用的证书对应的key,注意文件的权限,防止被盗7 g" H& [: N! v" U
key server.key # This file should be kept secret& k: w) [3 E; n: w0 L" d- Z, Q
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
5 ~! O, b9 f! ?/ }9 [9 ucrl-verify vpncrl.pem
& U/ v( [" N0 ]- |5 M! {#上面提到的生成的Diffie-Hellman文件
% d/ E3 }4 c9 W$ ?: i& adh dh1024.pem7 c( y5 Q2 A9 a, v
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由& y& B& {* |7 Y; K: h
#这条命令等效于:5 [6 h! I: W: @3 i
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
* n; k) r& a6 g; n  d" ~6 K1 z# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
# t3 V5 p  o5 H' a5 y1 F#
1 k& i6 H/ h) w$ J# if dev tun: #如果使用tun设备,等效于以下配置9 V3 h! F" u, v6 T! J) M
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址9 i: J6 S* v% X
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址2 ~" j. f% \) M# f8 B9 O3 p
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2/ s. Y. G+ j! {7 Q$ z0 i( f
# if client-to-client: #如果使用client-to-client这个选项
, ]$ X. ]1 a( p7 s4 g/ [# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
1 W$ z* A; P1 @( v3 U0 ^7 i5 j" I4 ~# else' J+ O4 o4 U5 t5 P1 v8 }
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1) V% c8 f  p4 X6 P0 M) @# L  Z
#
! @% E0 L( i& l* _1 j# if dev tap: #如果使用tap设备,则等效于以下命令* P# B8 e8 s* T+ x, u
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
( `& r* F0 x  ^0 ~, R0 g# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码  v- s; V2 h/ ~1 C& w7 L) H
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
1 R8 X% x$ ]7 G8 ^& v#' o. k2 K, ^! |% |; x3 q
server 10.8.0.0 255.255.255.0 #等效于以上命令& d; n( t  T2 `/ V5 [* r0 p
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
6 @7 c! ~, v( [6 _#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
- Z6 p: h% K4 m8 Z+ Q$ U8 v, ^, uifconfig-pool-persist ipp.txt% C5 G6 B, d+ D+ Z. Z
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
# ~4 T# j8 n9 R, O- X. V/ i4 b- g;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100; q+ a) N$ e3 e: Q7 @; b( P4 q
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
+ ?4 _7 a' H1 a6 T8 T  w! k;push “route 192.168.10.0 255.255.255.0″
4 T0 y- h/ K* r* J;push “route 192.168.20.0 255.255.255.0″
" K, {- S5 S: E1 o8 J2 ^# C  X#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除5 w: W" O. y5 H* p
;route 10.9.0.0 255.255.255.252
4 i$ x' L8 ?, ]* t#Run script or shell command cmd to validate client" ^' L: S1 t0 S$ Y6 C) L5 C, O
#virtual addresses or routes. 具体查看manual/ Y- F; e" N+ C
;learn-address ./script
7 ^+ T0 r4 H. q#其他的一些需要PUSH给Client的选项+ H$ t: ?/ G" ?- P
#
3 v2 R- R2 k# q3 E#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走. c+ K& x7 }5 m6 o  s. a/ O
;push “redirect-gateway”& V& K& u0 s% G+ x4 N& G' [7 f9 d6 R
#DHCP的一些选项,具体查看Manual
! N6 u5 H/ N3 }  `1 F( };push “dhcp-option DNS 10.8.0.1″) d& e9 C+ _, Z8 ^* N' O9 d: H
;push “dhcp-option WINS 10.8.0.1″
- v3 o/ ~& f8 u, m- h  _#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,: K1 q- }  d5 S& ~  W
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率: B. D/ u! A1 n2 k2 Z
client-to-client0 A# ~5 i$ m- \4 X  b5 E
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA8 q, B4 @5 H% V
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
& @# H* P) I3 A;duplicate-cn
8 J! D* r1 l. G) m" }! E' P6 ?7 y; d- t#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
# B+ O' o% R  R, ?" l3 D8 ?9 v#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
) v: E' C& @9 }3 N9 \( c#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,  [% m: V( }1 A% ]% K
#认为连接丢失,并重新启动VPN,重新连接
6 a4 `- d" q+ r+ \#(对于mode server模式下的openvpn不会重新连接)。, X9 ?1 {4 E$ o8 b
keepalive 10 120' l; \: Z8 C* e! n; A3 Z
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
0 ], N( p6 L7 P2 {0 F) k% a% [#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1, e; ~1 U: Q7 j- ]( [
tls-auth ta.key 0 # This file is secret
+ Z9 d; W5 [. c% n1 c# e#对数据进行压缩,注意Server和Client一致0 {/ @# i7 p( k$ {
comp-lzo
) l' B1 M& j" @) [+ P6 @4 a5 e( X#定义最大连接数. t8 u( ~6 S7 y" X  A3 o( Q1 u
;max-clients 100
: U5 W- N5 a: }. D0 f#定义运行openvpn的用户2 z8 t" y4 E6 i; F  P+ Q& I
user nobody" t/ }2 e8 x8 h$ R
group nobody
: p6 u* ?* N6 M& z#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys* h9 }/ R& J0 Q3 I+ f7 h
persist-key5 i- P3 K0 T4 f, c2 R* P  i
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,9 K9 `% R: ~$ n  K* k: D* G# }" Y
#否则网络连接会先linkdown然后linkup
- b. q4 m* y$ {) }persist-tun
# N/ k; z5 S" Z7 j: k#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
! @+ ~- I4 B' Y% h9 @2 B. L) xstatus openvpn-status.log
/ w3 K5 P- ?) P) Q, x' F$ e#记录日志,每次重新启动openvpn后删除原有的log信息) P! V7 F$ s* k
log /var/log/openvpn.log
. u& E4 K! o9 t) Y- ?" b" x2 k# O#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
6 }6 E! B% B- D$ x, I: Q" D;log-append openvpn.log
3 h5 g! h0 t3 R, I2 g( m#相当于debug level,具体查看manual6 G- c5 p9 \9 Y4 T( S. ]
verb 3# w- S5 c6 d1 O( V. U
——————————-
, l: I# L+ _2 G  N把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:; z2 |/ C( ?5 n, ~3 B
#cd /etc/openvpn7 n0 b7 B3 M% ^. ]+ _
#cp easy-rsa/keys/ca.crt .
) e0 q& W1 h, I1 O. w; r#cp easy-rsa/keys/server.crt .! U6 T8 E* M0 c9 @# \" @8 M) I( ~4 S
#cp easy-rsa/keys/server.key .1 u8 k6 J3 M- T
#cp easy-rsa/keys/dh1024.pem .: Q* a/ H3 [, E. {6 v: p7 E
#cp easy-rsa/keys/ta.key .
0 h) ?1 t" Z8 k5 l, ]* r#cp easy-rsa/keys/vpncrl.pem .- j% @5 ^- T2 M# k
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn5 k* B# [+ D8 r7 b) d
然后运行:
+ ^( y0 Q1 D+ l) @6 A2 X#chkconfig –add openvpn
! ]* s7 T4 ]; s& I2 z#chkconfig openvpn on, e9 P$ ^- X6 K( m/ ^5 ^) j
立即启动openenvpn
' i* N+ F- |$ D8 j- H0 s3 P#/etc/init.d/openvpn start! K7 D, `0 L4 p) a
! R" X1 @7 o+ f2 J, j0 m/ r- @
接下来配置客户端的配置文件client.conf:
1 M+ x8 f: U' l) t! a6 ALinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key1 Z! R- J- V! Z: k2 s* V( R0 w* {$ v
———————————-
$ I: r2 O% }! Y1 m# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”7 M: m0 J/ J( z. o( g
client( K/ w0 O8 K* u
: c6 t0 V' z* D
#指定接口的类型,严格和Server端一致
' E2 p+ B& L8 M' Q1 Qdev tap
1 n* m9 I' N  m: a6 J4 s2 i- I& v! X;dev tun
) `% N8 ]  h2 C/ n, s- Z
9 D+ P+ \# W$ j1 [# Windows needs the TAP-Win32 adapter name" I9 X. h: s* j& k! h+ m
# from the Network Connections panel
, M& c: L1 d1 V2 d# if you have more than one. On XP SP2,7 i$ C) ]( P2 k/ _& r. Y
# you may need to disable the firewall! L7 u- S1 O# s7 p; _& f0 `0 e: m
# for the TAP adapter.
% i/ A) N" Y0 k; F2 g; R. h;dev-node MyTap- @$ f- W1 T' F; J6 B

7 q1 D2 l9 D! w) \- v# 使用的协议,与Server严格一致
% T2 v' l  ^, T4 e, U5 C;proto tcp
: }  j, k- l% q* W, R6 K! y! q8 `! ~3 uproto udp
8 I6 A/ y! k3 W7 r8 n' o7 Y# X+ _* O' H( z7 b* \; B7 A9 n
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字" |  A, S8 v% o/ d: I
4 I$ e! ]8 x- {% ?1 \1 V& i# t
remote 61.1.1.2 11948 g) Z, z0 G7 E9 E$ H
;remote my-server-2 1194; z3 g9 H( Z1 Q/ b; C

+ N! k& B; x2 x! y. n, L& u# 随机选择一个Server连接,否则按照顺序从上到下依次连接0 ?2 n  R; y: J9 E
;remote-random0 R. v/ `# I3 J

9 z4 l1 ]' B* ~5 K: w# 始终重新解析Server的IP地址(如果remote后面跟的是域名),9 O" F1 @, z. r
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址# g* R( X# O8 d: C( k8 j
# 这样无需人为重新启动,即可重新接入VPN
, l2 y4 o' J# G" \" {) `resolv-retry infinite  r: q1 R! |9 x' p6 u
1 q  g/ o% }1 {1 H8 r* i
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
0 o, S# C! c! g1 J, X- Unobind
& ^  n0 X5 I6 v7 U0 o0 Z( P7 T6 Q: i! s2 ]
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作  _5 s4 c2 G9 v( E
user nobody8 h' O! I# h; @$ Q
group nobody
5 L) I! ?0 i; ~3 X/ A) o* A0 s9 k4 I+ j" y( e5 Q3 Z* s; j# G
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去- U; P2 Q! @5 r) l. @. ?( e6 q8 `
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是( _% k1 D  x! }$ j
# push “route 192.168.0.0 255.255.255.0″
7 ]' z5 z1 C% S8 j% X+ K1 X. G6 e! qroute 192.168.0.0 255.255.0.0
0 b# h) q, i3 T" ~! ^. n+ ^& d* O' v
- t! o7 `/ F9 B6 ]6 {2 |9 S# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
% N. f4 }2 f! L3 n' w2 c3 npersist-key! m+ u' d- n/ [& n# v0 ?
persist-tun1 L9 R9 l, P8 y

" v; T/ J) \& r6 M1 F9 f# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面; ~  N) j9 w+ a/ U
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]$ W1 H. B# j2 {( p
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual( u6 \6 U* I, ~+ }: X" e% O
;http-proxy-retry # retry on connection failures
+ {$ d  G6 B; ^5 z2 e) I;http-proxy [proxy server] [proxy port #]9 y. |. J7 T; Z: R7 k( H2 q
* ]- N+ Y) A/ [/ l
# 对于无线设备使用VPN的配置,看看就明白了
% \$ t2 R: ?% I: @. j9 \$ r" }: s2 o# Wireless networks often produce a lot' A  i/ r9 z! Q( T0 ]
# of duplicate packets. Set this flag7 U  B7 M  `8 A* n
# to silence duplicate packet warnings.
* d$ {' @9 E5 C9 l" v' R, S;mute-replay-warnings$ h  [. l9 R6 W

( m( ^$ @( @" h* J# N7 V6 T7 Q# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件  g% h1 n+ k* i1 p; |& R5 g) A
ca ca.crt
& c, L1 y# G0 j3 Q) @% Z, g) Y: `# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
5 }! r$ w. _9 e& f6 L. Gcert elm.crt
8 w6 a% J. e# n1 R: j# v9 @key elm.key
) }$ I: l4 n' q9 l9 r& g
# z3 f0 J2 v# ^4 r1 w& A8 c# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
* I" h, y2 I6 y* @# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server2 u5 d  z, p" L5 e! ]
# 因为他们的CA里没有这个扩展
  |1 F& m/ v& i8 ^ns-cert-type server
. j9 M: F( [# f4 ]. Y
6 ~; l! @4 U$ ~) u2 e& ]4 f; t4 e# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1/ Y, t% P7 F1 q1 `; [
tls-auth ta.key 1+ W5 v, `* [7 x( Z# h+ a& |5 Z

6 G* o: Z! `* D# _- k+ S# 压缩选项,和Server严格一致# d1 L3 e% S4 j3 U7 b1 P
comp-lzo
- ~+ a: J3 _4 w. T! {+ n" h% x% }# ~+ {& m
# Set log file verbosity.
: Q  |8 R  f* F& V2 Everb 4
; H9 z8 N; q8 q! j8 ~: t, l; L# u
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2025-11-16 04:40 , Processed in 0.070951 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表