找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15005|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf  |/ ?, ]. }& ?+ F
—————————–
1 P3 z3 U* o  A#申明本机使用的IP地址,也可以不说明
! \' X. {' u* N;local a.b.c.d
; q. i1 K, \; N, |* M#申明使用的端口,默认1194# U( |+ t% D8 ]1 V  s
port 1194
/ a( ^5 T% _/ A#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议% z: S6 j; ~( n- Q0 b% g5 C) U) X
#如果使用ipv6应改为proto tcp6或proto udp6  v, I2 ]- |$ E( m
;proto tcp
8 n. m' v: {& A# }proto udp
/ C1 R) Y1 {$ r#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。2 b3 @# |4 _% B
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备# \# Y3 V/ j  i  s
dev tap
% D$ D. m% l" k( z2 v" U;dev tun7 N: z- }; m/ U
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
, y0 K) [, t6 d, Lca ca.crt6 q% Y$ v: L  Y
#Server使用的证书文件
4 j( j; F0 o3 H, G& ocert server.crt
: @- Y# S, s& s#Server使用的证书对应的key,注意文件的权限,防止被盗, m) n$ w$ m. s4 j/ a. O. k
key server.key # This file should be kept secret
5 |. K9 P/ ~6 v" e: v* g! R#CRL文件的申明,被吊销的证书链,这些证书将无法登录
4 G, l; a0 r9 `" {1 c/ W8 q8 ucrl-verify vpncrl.pem
+ e) F2 ], s3 k6 t8 L2 |" @. \#上面提到的生成的Diffie-Hellman文件2 H' }) m$ a: a1 ?$ K
dh dh1024.pem5 h$ D8 a4 Q$ P9 r- D" p
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由5 R5 G/ d8 g% }$ d! y3 I0 M9 p
#这条命令等效于:
* G0 u" g9 i# h7 o* \6 G/ D# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入4 C% s8 V: o) S0 R8 \6 w
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
2 r: ]  t1 y5 \5 s6 `9 l* y& m#3 ?9 i$ D1 b7 E, j& P, |
# if dev tun: #如果使用tun设备,等效于以下配置2 w3 F: N. K3 d4 T0 w( w' o0 K; R
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址! ~0 M$ H2 V9 g! |; `8 t5 N3 x
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
3 i/ k, ^$ z: t7 l; `# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2, F. `4 }3 Y  {  x
# if client-to-client: #如果使用client-to-client这个选项$ e  p' S. u4 C3 t# \+ I
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.19 P: l+ i" {- q9 k
# else7 [. U  a5 i$ i5 N2 {' I
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
5 a- A7 n5 N5 S' X+ l$ ~, Q#
% v6 P1 T  b3 _" f0 {/ f# if dev tap: #如果使用tap设备,则等效于以下命令
* {7 G5 k4 l$ E/ Z/ e0 N# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址7 D+ [5 X* F  [5 E. |6 ~7 b- C% j
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码/ z: K3 J4 Z( F" d  R- e5 m* G8 K
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机9 C5 U1 ?. C, ?! [8 ^  E6 l; `4 H
#) [, S. ?9 L: A- Z: D
server 10.8.0.0 255.255.255.0 #等效于以上命令, {/ t# P5 D8 U- @/ F% q
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
/ x5 {) P6 k3 s3 r" W#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
9 Q6 [: @8 N4 V* I  \ifconfig-pool-persist ipp.txt
8 j; w' M  J- ]/ ^#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用/ s8 U) [* Z: }
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100, H0 \/ V4 {, `+ w6 z$ q( C% z( K
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
7 I& Z  f8 a- D. k' {;push “route 192.168.10.0 255.255.255.0″
# |' L+ F0 j6 k3 c- t) V! };push “route 192.168.20.0 255.255.255.0″2 Y; T' D  [9 S- s3 H* X. P( S( T
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
3 w" N. z9 t0 R. E  Z, h9 |8 T) };route 10.9.0.0 255.255.255.252. P) |* |0 ?0 N- X# l4 m6 Q
#Run script or shell command cmd to validate client+ V3 ]0 Z7 h* I+ R
#virtual addresses or routes. 具体查看manual
0 E! l6 b, F! W2 C6 [2 {;learn-address ./script" \! @4 n# W9 A" V5 {7 w9 K
#其他的一些需要PUSH给Client的选项5 b0 S$ k7 b9 y# }' P; i
#
, k5 V7 B1 [& C( T#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走" W3 N4 j% B/ f$ @  M  ?& x
;push “redirect-gateway”0 F% Y+ T: ?) j/ Z
#DHCP的一些选项,具体查看Manual
6 q1 W! @; w# N! S0 a1 `;push “dhcp-option DNS 10.8.0.1″
# d- t& c) p8 d  B;push “dhcp-option WINS 10.8.0.1″
; ~# m; K- b( A; q" Q( i#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
* U' V: O( }5 W# R; g#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
% h' i: m! J( z- u; T! {. Lclient-to-client4 l! b1 b8 F& P9 k2 `. K$ {
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA4 ~+ `% v* l; W# n' Q
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
' ]: _/ P9 {- C9 C0 d% j, a;duplicate-cn* L$ m0 N; }# [
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,/ r) {2 F4 c) J2 c0 y9 W
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,9 x* p+ r2 d' I2 f
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
3 G9 e, Q) p: p! _: o#认为连接丢失,并重新启动VPN,重新连接! ~4 q& T) X+ q8 P6 |
#(对于mode server模式下的openvpn不会重新连接)。3 B$ d" |( H, ]- l5 Y
keepalive 10 120
2 j% n% w, O' U; ]% F! K#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,- c3 Q( G! b* H$ m, l
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
/ k& P$ S5 U3 j* l5 N. ltls-auth ta.key 0 # This file is secret
! q8 @0 A8 A5 p. @! ^3 _+ c#对数据进行压缩,注意Server和Client一致
6 W+ j& R' U: Mcomp-lzo
# e# I1 A& j- I. s( M3 Q# U7 N#定义最大连接数
) u2 C' `" L$ I;max-clients 100
' u( [1 f) d# B5 L: h#定义运行openvpn的用户2 F, w! w. L# n/ L9 O, F
user nobody
& S" w7 H+ h9 \6 }group nobody% N, A$ p+ n5 W" A8 \
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
% q4 x* K( E) U( e$ M6 i2 s& m8 j- hpersist-key
0 R# s; [, o& L. E1 i9 T#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,5 J8 s' X& q8 [. c; j8 N( z
#否则网络连接会先linkdown然后linkup% ]) c; e1 r7 o
persist-tun: S+ O9 N  T* J; ^+ n* F
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
( v; ^" C% C2 C, C( mstatus openvpn-status.log8 v5 Z# ]2 r$ J1 f& d; B" _
#记录日志,每次重新启动openvpn后删除原有的log信息* r- a" ~4 E+ e5 u9 i- y
log /var/log/openvpn.log
. }, N6 [! c+ T) {* b  g, q. y#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后2 B- b- L$ i1 ^( C  i
;log-append openvpn.log
9 R2 N. q3 L& m/ Y5 C#相当于debug level,具体查看manual
# v3 M) s8 a# n# @5 uverb 3, ]* n+ g7 w4 n. x
——————————-
9 `4 r- I& |8 n6 I3 T: \* C把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
- q9 U: J' V- \9 F7 I- y#cd /etc/openvpn
, {) X0 M) V  g& j2 u2 H. e! r#cp easy-rsa/keys/ca.crt .* N4 q+ E0 _, k& |: {* H3 u
#cp easy-rsa/keys/server.crt .
) A1 A# o6 ]) G* w#cp easy-rsa/keys/server.key .' E; \, J! c, f% g$ H$ n
#cp easy-rsa/keys/dh1024.pem ., [% |- d: Z. H. R( R" t
#cp easy-rsa/keys/ta.key .
- {7 f8 i/ t. O; P7 M0 g#cp easy-rsa/keys/vpncrl.pem .$ i2 _' y* r; j; O$ b
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn. F( K" ~+ m1 L9 U
然后运行:2 R2 y( m- y$ S
#chkconfig –add openvpn$ |4 v" o1 V* [8 X) A# S; }
#chkconfig openvpn on
( l( Q2 w$ X9 o6 I# ~) z立即启动openenvpn
. I# h0 h" w4 q, ~+ ~+ \+ ~# J#/etc/init.d/openvpn start) q3 b# Q5 G% [6 V% @7 \8 P) y; y

* I0 @5 {- c( i( z: @6 Y% A9 _接下来配置客户端的配置文件client.conf:1 s2 l3 C( W2 K& s9 A
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
9 h3 |* W/ T# d8 Z% s% L+ j$ r8 ?5 i———————————-- Q& l2 C" u. K' }
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”" d# J0 m" ?) v& A3 |+ I, P
client
  |/ K4 |/ K! a) b5 }/ f5 d( m% H8 I* _5 v" h+ M3 G
#指定接口的类型,严格和Server端一致
& {/ K8 [# I: E% H/ l, jdev tap# k1 g8 D) ^; r/ O% S- f
;dev tun
4 n4 b' }+ T& r, _1 f
7 H  {; J5 Y9 X8 s$ ~6 v# U/ _# Windows needs the TAP-Win32 adapter name. z) M$ I0 g; u
# from the Network Connections panel
% i& r) @5 a+ \0 Q/ \# if you have more than one. On XP SP2,
3 o" h* N+ t3 w8 G$ t. F3 X& D# you may need to disable the firewall* b% w6 b9 y2 Q% ~3 z0 g0 f, j
# for the TAP adapter.! h* F+ \1 U/ p& {: c
;dev-node MyTap
  r; n8 G9 E+ e+ C( V
2 y/ G# D9 N2 l! W# 使用的协议,与Server严格一致& @( p8 z$ u( O
;proto tcp9 u- G$ e' O/ l  Y9 f
proto udp8 G: l$ v- ]4 i! ?% {( e7 G1 B" I! p

, b; g/ ~, L! ^  G( u- I#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
& j1 k! e- h1 x0 W5 s& S4 t
& q5 i8 `1 J7 q+ T) f: y. Lremote 61.1.1.2 1194  W% F3 f7 S& V/ ^. S* D' ^5 p: J
;remote my-server-2 1194
6 z% @+ S) b) s1 m# \. n) y7 v  x* }- D* W. j$ Q: n
# 随机选择一个Server连接,否则按照顺序从上到下依次连接
: Z" c/ p2 {7 Q# ?$ b1 [;remote-random
- b2 M7 k. r, Q! _* B0 g5 m( T( x8 {# @0 U0 c3 F: h
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),, \) t0 B, J* n; V  `" O5 n3 ]6 i
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
3 ~) n! C2 `5 P3 L$ @9 V# 这样无需人为重新启动,即可重新接入VPN
$ z6 E$ f/ G3 Q% u+ s% b5 H2 j8 z% jresolv-retry infinite
& G# U( N3 _2 d+ a0 z
. t& U8 U$ u3 z& ?# n/ H  J: n) l# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要! a) J. U# D/ l$ @/ {
nobind2 B6 ^9 f. a8 ?1 D% R) G
7 Z) c! r$ ?# i) _
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作8 J( h' s7 j4 {4 B8 B  V; z. S
user nobody
( `* i1 H, ~+ W5 }% ^: ]1 p3 F# a+ kgroup nobody, }" k5 V+ S: \/ _

" F4 R9 O- Y# W#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
# s/ M# h( e! S#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
: p. T, I+ ^: ~" o# push “route 192.168.0.0 255.255.255.0″0 g$ W* v6 i4 U  d. @; i1 D  r
route 192.168.0.0 255.255.0.0/ g8 l: P9 X# t

+ U' X! N& n/ X4 H9 j8 F9 a7 A1 z7 z! a# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备8 J* Q  K8 D: Q5 Z3 o/ I# D
persist-key
7 @! c% D* ^( G9 Ppersist-tun3 O. _, F; n' t: [

( Q, J# X' @+ `$ k# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面5 v8 C+ Q4 u$ i
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]( V) t, n6 M2 i2 f9 f4 d
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
- z" T" `3 n# I' j;http-proxy-retry # retry on connection failures
; `5 n& F8 l! `) L: i;http-proxy [proxy server] [proxy port #]; M# G1 q* ~6 o% P2 C
5 j& m) i; D7 \$ E" B% T$ R
# 对于无线设备使用VPN的配置,看看就明白了
  X- D6 w( V8 N4 \# Wireless networks often produce a lot+ u4 G' j0 C; {0 R  F/ B7 \
# of duplicate packets. Set this flag/ }% E; x# \2 K) ~' i
# to silence duplicate packet warnings.! @) m& K! y4 D( Q, M* n
;mute-replay-warnings
8 t& _7 x9 b/ G6 O. ]! G
, |% t( D$ L% A# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
4 v+ Z9 J1 q' ica ca.crt
$ Q. O1 i/ R/ A; p7 o6 e- V# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
* s- o4 M& `; P" H+ S$ q- b# kcert elm.crt  c% v+ v9 n( e" f: {
key elm.key& o2 Q' t9 \& U9 Z4 }; ~

. h7 E+ b+ r  F1 t1 i  u- M# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
2 \: r' x2 ]2 `6 `  Z: S# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server* T6 ~/ a; d1 y4 B
# 因为他们的CA里没有这个扩展/ ?6 B) l3 U1 Z. u
ns-cert-type server
9 O) V( ?2 T% w
# I9 Y. w/ y' V# 和Server配置里一致,ta.key也一致,注意最后参数使用的是12 K7 h) T8 O6 F* \5 f- ]
tls-auth ta.key 1
4 d+ E3 j* o( A: J& M/ \3 [1 j
+ @  q0 Y& H6 i# 压缩选项,和Server严格一致/ w4 D& f7 _$ o, c% N4 F
comp-lzo3 V6 y# U2 i4 U+ ]5 v

9 d8 A* z* l5 Y5 l0 V: o8 ~' i# C# Set log file verbosity.! }( M  H% W# l; D$ U. P
verb 4
1 h$ w) L  I  C- ~" s& l: U; [
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-5-2 19:14 , Processed in 0.079913 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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