找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16735|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf4 Z' D  I# p+ l8 V+ }( [3 D
—————————–
' [6 m/ r' C8 M2 V% h( y" j. g#申明本机使用的IP地址,也可以不说明
# G& [; s6 U& W' W2 j" Y;local a.b.c.d
3 H6 V& y! L( J- o#申明使用的端口,默认1194
# Y# Q  E( @, H8 p! _port 1194  ^! W% p  A6 i5 q# [" [; i+ R# y% Y2 m5 m
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议% u8 k9 \8 W6 W$ g/ |8 m
#如果使用ipv6应改为proto tcp6或proto udp6
: F: V( t2 R6 D3 d* `2 j" e2 m;proto tcp
* }" i6 ^% c- `: q/ Qproto udp
7 u4 d# S: ~8 W0 t0 \9 S$ A. h#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。6 O; u+ n+ z( _. ?+ S
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备  I' C  N2 o* n
dev tap$ z/ [% d( S& s/ @# o, z
;dev tun
0 Z0 s7 a1 v3 t4 H7 C, z) j8 o#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法) V6 B/ V  _6 T6 m. I$ x0 d
ca ca.crt
* F& q# q7 M9 G- A2 W+ O#Server使用的证书文件
  O( p7 j- ?% x* m2 r0 _* vcert server.crt
0 [  ?; `5 r& J/ @/ z1 U#Server使用的证书对应的key,注意文件的权限,防止被盗  Y* w8 f; w1 P1 s, j1 H& C% Y& i
key server.key # This file should be kept secret
+ j. g- U; W& C0 w; b& `  @6 b* X& d#CRL文件的申明,被吊销的证书链,这些证书将无法登录
: s8 I3 O* H% Ycrl-verify vpncrl.pem  C: y  N1 N% d2 ]! [% E
#上面提到的生成的Diffie-Hellman文件+ G/ ?9 y, w* o2 A9 P# s, X) z' W
dh dh1024.pem/ O( e. Z; c1 A5 k5 ^) ]
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由6 s4 [1 {  x8 u9 u4 q* p8 e
#这条命令等效于:
- I& n1 A+ w3 P, s# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
' `% t3 [2 k, V# b4 H4 {# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
7 l! R1 W! ~% H* {! g1 s/ C- s#) Y/ z/ z" v* d7 f6 V
# if dev tun: #如果使用tun设备,等效于以下配置
5 Y7 C2 L$ d( x5 _; j6 e( z# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址) T. S7 _8 F. b- {# r; [; D
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
5 q, q  o) i; M! S+ A) {# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2$ O1 L8 [, b# y9 h# H& E
# if client-to-client: #如果使用client-to-client这个选项
8 {4 }* s- x3 [4 |' c7 i# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
5 f# F6 Y6 P' i/ [+ a3 u9 H# else
8 M# g$ Y( T- m( }2 P: R0 N8 v# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1* W% C5 F, `* c% I! h
#
5 e' X# W) h& ?# if dev tap: #如果使用tap设备,则等效于以下命令
( ~7 h- I) _/ x1 l, s# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
% c5 n6 `" V$ W# Q* G3 z; ?9 [) \# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
! ], i0 k1 Q9 |7 Q/ B8 Z4 K& A* w# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机! k" Q8 V' u" T9 C7 R  u+ `& o) ]
#5 k' s( x, |6 f4 c
server 10.8.0.0 255.255.255.0 #等效于以上命令& m  d& }5 S( ^6 Q3 }/ t8 F$ [7 N
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
1 E5 i  F; B  I( P- w: ]#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
. T$ ^. `4 u3 j+ A! cifconfig-pool-persist ipp.txt
/ P( h+ N2 |( ~5 y" n5 q/ w3 G#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
  s. c- Y4 K; }( q* m1 Z  P;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100+ \5 O# \0 B; p' h" ?1 B/ `1 p
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
' o$ u4 V' E9 v. G& o1 N: O9 ];push “route 192.168.10.0 255.255.255.0″
" F' X0 K  i$ \( H' Q% I* a5 L7 {;push “route 192.168.20.0 255.255.255.0″1 J; Y0 Q( j* g$ J" c( l
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
1 c" L5 x, a, G$ \% ~" v  V;route 10.9.0.0 255.255.255.252; ], A+ y- e2 K8 y
#Run script or shell command cmd to validate client$ ]6 u! x' i* B6 m4 Z; G
#virtual addresses or routes. 具体查看manual$ c& s9 }3 X1 x& a4 Q8 `8 a, \6 _
;learn-address ./script
, M- x( S' y4 m. b4 A4 ^+ d#其他的一些需要PUSH给Client的选项
& \" s* t' }7 F$ S8 [1 I#7 v+ |1 v: ?  \
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
' A  _, K" Q, C' `4 d1 E7 A% ~! h;push “redirect-gateway”. [! d; u1 ]' q% D$ Q/ [5 i
#DHCP的一些选项,具体查看Manual( i7 u# R- W* O, }) S0 Q
;push “dhcp-option DNS 10.8.0.1″
$ }! c8 P( f% K+ Z, Q) a9 N* A;push “dhcp-option WINS 10.8.0.1″3 K! \. J$ E  s  ]2 x& X
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
5 [& \# A" {; [. l# N; E#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率: s' G. a- ]0 k5 t+ ?
client-to-client& S) m3 `6 g2 }; B- `, s7 V
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA5 u) j: [; C2 T5 D7 T* c
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
. u! w( X2 N' t8 B' o' s* u;duplicate-cn
# `1 l- v9 f2 L* a# |5 H#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,$ r( C8 H* v. n+ Q" ?
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,& h' q$ `- s3 @  j% Z
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
2 O, T4 x* a9 d3 U8 L. H; O3 w/ r#认为连接丢失,并重新启动VPN,重新连接
+ Y0 M: [: P6 W! C! J: t# @#(对于mode server模式下的openvpn不会重新连接)。5 o$ S8 v5 |5 v+ _. a
keepalive 10 120
1 c4 Q' O, H+ S& b, t4 W* c7 A#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
' z  M* U  Q  S0 a% @2 K0 i#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用17 t/ F' l( r- h2 k# X
tls-auth ta.key 0 # This file is secret+ y9 ?0 T7 N) d$ d
#对数据进行压缩,注意Server和Client一致$ a6 ?" _) o7 y0 }' Q7 ^
comp-lzo
/ M+ m9 d+ B  e. D( T#定义最大连接数( e5 |+ B2 a) T; D4 K1 H9 E
;max-clients 100
7 y( W. T/ E: P" k#定义运行openvpn的用户; @9 Q+ j* ~1 `
user nobody
2 g# Q0 @7 {/ D8 Ygroup nobody6 l# n9 D' T, H1 I6 X0 \3 D, `
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
9 X1 i1 A3 E  L% Npersist-key
1 M" k- F$ D- {3 X$ N8 W9 W#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
/ Q( o  h: b7 e! V#否则网络连接会先linkdown然后linkup
" o9 c2 J# w! c) tpersist-tun
6 s8 i9 V6 b/ `1 X2 `8 O& a#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
: C$ K+ [, \0 ]# b0 H- n# [5 mstatus openvpn-status.log
+ T0 x4 k5 `  m' x#记录日志,每次重新启动openvpn后删除原有的log信息' b1 ^! ?. y1 y5 L/ @6 o
log /var/log/openvpn.log
- U  O' P2 s# Z1 P  ~#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
( b1 E% K6 `- K# k% J: };log-append openvpn.log, ], F7 J: B9 g& \9 m; R1 V
#相当于debug level,具体查看manual+ G, F" k3 F  `9 B
verb 3; F+ G+ H0 Y- x5 @7 O4 z
——————————-5 o+ K+ |; [& U6 c/ |5 \$ @+ w7 d
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:7 {; c; }& C: r( k1 N+ q
#cd /etc/openvpn/ e1 Y, ?, M9 P" D+ M. X' D
#cp easy-rsa/keys/ca.crt .: `9 u. P+ C& k& y. e6 E" p# A  I
#cp easy-rsa/keys/server.crt .
) o1 l, T( L- m& m2 \#cp easy-rsa/keys/server.key .) e& {; v4 i5 `* J, u
#cp easy-rsa/keys/dh1024.pem .
3 |- Q' U" `8 {  l; w. P#cp easy-rsa/keys/ta.key .
# {+ C5 j& {: u9 ]' c#cp easy-rsa/keys/vpncrl.pem .. @. C4 h9 C: O# \
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn% w: f8 b! C3 Y
然后运行:
0 L$ b0 @, V* S% ^#chkconfig –add openvpn% G' Z1 o! I, Q( b! P
#chkconfig openvpn on7 I% V0 }0 e% V' }8 _
立即启动openenvpn$ ^9 y' Y1 G  Q. }" L! ]
#/etc/init.d/openvpn start+ B4 ~! W( h$ p' Y: G, c
: M1 H9 ?3 l4 ?4 o7 [
接下来配置客户端的配置文件client.conf:
5 q% A, ]9 h  B+ E2 [0 QLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
% W4 S( r5 l. o9 `———————————-
- n5 h6 U1 @% C6 [( ~# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
. f" R; A. H+ Y1 Uclient
$ }: B6 Q7 m( T  N/ j
5 B0 l" T8 ~. M#指定接口的类型,严格和Server端一致% W# u+ J# b; p% T3 g
dev tap9 e! Z: p" x1 G' X& o, U9 m2 ?
;dev tun/ e. K; ~, |# `; q2 B

  y; H& V" r+ v- [5 _# Windows needs the TAP-Win32 adapter name# ~* a( }% y" l; ~( O
# from the Network Connections panel% E- m% D% S! u' w- j
# if you have more than one. On XP SP2,1 V3 m' L& _# g% ?
# you may need to disable the firewall; f- j6 i& I* x2 L) k9 F/ N
# for the TAP adapter.9 Q: `: Y8 y1 Z; \/ `+ Q7 d! |
;dev-node MyTap
% O) A6 _" T+ i3 s
- _+ f3 q4 R  G  O( V# 使用的协议,与Server严格一致: J7 M* u. n4 \
;proto tcp) h/ r2 M3 e3 A9 f. \  x' ]
proto udp$ d4 R, A, }  q% I. }
: G4 A! X, d! N
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字) |  m' Y+ ?9 m; L3 I: \
  g  a. k0 Y/ J8 D' F! x
remote 61.1.1.2 1194# Z# e$ v" o, S6 M% Y
;remote my-server-2 1194: g  N# k; `* A3 O- |+ @& ?
3 K+ J1 r% S3 w0 d9 W! a. f
# 随机选择一个Server连接,否则按照顺序从上到下依次连接
. ~0 `" |) j! A  t;remote-random
) I( W1 V( X/ Z' m2 h
+ Z( Y" y% Y0 n# 始终重新解析Server的IP地址(如果remote后面跟的是域名),9 l" K  F/ F% }+ ^3 v& z
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
4 p. q' L2 D' j- ]1 U# A5 U# 这样无需人为重新启动,即可重新接入VPN
, z  ]. L  N! I' {resolv-retry infinite* i8 P) U0 B5 f8 J+ S. ^5 P( L
/ H+ D8 z5 o7 T! a* ?
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
& v) G6 |1 ^5 q- p# l; ^nobind6 l7 b8 x! |  w3 R7 K

! R$ O" P: W! e' g# P# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作2 I% i- i2 O* A0 X8 W/ g0 A4 x+ g* H
user nobody1 {9 ?2 X! C/ ?" z: n% t
group nobody* L4 G% W; D# R& h

4 t7 ~, _5 |  \3 o! `  S9 V#在Client端增加路由,使得所有访问内网的流量都经过VPN出去, ?& |, ^" z6 Z/ q! }$ z% i0 z
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
4 @+ L- U5 G3 N5 {' d# push “route 192.168.0.0 255.255.255.0″
! R! n0 L3 ~/ `# @# c. }route 192.168.0.0 255.255.0.0
) K# x& b% r6 o- M, `( E, N$ Z& L9 e" ~% E, w
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
) X6 o% I6 h  c- g' P1 K3 bpersist-key- t* W" e6 a- y7 M( u+ A5 Y
persist-tun9 W9 d) t+ U* F" G5 ^$ L4 k" ~
, k3 c7 i7 h- J  y7 P2 H; q
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
+ E2 k5 l, `) }' H+ V. r# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]0 ^- M- b3 s8 k' |
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual) l. d) D; T7 R, p  M# ]; M
;http-proxy-retry # retry on connection failures
1 F% k7 k9 U" z- a4 J( H3 k+ A% {;http-proxy [proxy server] [proxy port #]1 a* U* @& n! Q% y. P' R
6 J) Y- `* U) G1 Q  W! u4 W
# 对于无线设备使用VPN的配置,看看就明白了% ~7 K2 v& L) x  \
# Wireless networks often produce a lot
/ i9 \/ v+ u4 {4 Y0 [+ N5 D( h0 G# of duplicate packets. Set this flag) i- b. B% m* h: |; i; v2 u
# to silence duplicate packet warnings.$ g0 R! h! z: K- R# @8 \* a
;mute-replay-warnings
/ p+ A+ F  ]0 @& y2 d. r; @0 {. k) |+ u: u
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
6 J0 |. I  B3 X" L6 h. w4 J* uca ca.crt. H! y) n/ T0 q- x4 H$ t/ Y0 @& }# @# e
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。" P) R6 A$ I. o# G; m
cert elm.crt
4 e: b! {+ _& p' D; K. rkey elm.key  y$ n5 `. _9 o. x* [6 `
8 Z" W3 V& ~* c9 j8 b# j
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项  b/ H" i- x! b: p) z
# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
8 A( F6 Q4 |  u5 K, i# 因为他们的CA里没有这个扩展
* g6 n' K" e! u) }; R& A, pns-cert-type server* |3 m& L' l0 {/ f* V

- J" @: t5 N9 s* ]$ c3 H# 和Server配置里一致,ta.key也一致,注意最后参数使用的是10 n4 Y7 j9 I, t; g0 |
tls-auth ta.key 19 _, X; `5 F$ c
" N4 b! H% J; _, d( f, n! Y1 ]* d
# 压缩选项,和Server严格一致
3 h. ^. x; {$ {! z6 n/ T" Bcomp-lzo
; p- @+ `( Y1 D6 \) t& f8 {/ ?7 X; e6 R) m) q) E/ B0 \
# Set log file verbosity.
5 {; t/ N& z6 ^- ?, everb 4
$ p0 D6 u; |  j, S
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-10-24 16:54 , Processed in 0.064949 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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