找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12511|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf( k7 O8 Z% n# ?( L% c- O( y
—————————–, A4 u7 J0 q% p' L8 n
#申明本机使用的IP地址,也可以不说明
7 _) I$ V3 ^$ n: j  `5 S: G;local a.b.c.d1 d" Q* C! c6 M8 M$ f
#申明使用的端口,默认1194
/ n  |* r0 y+ p% p" gport 1194/ s8 F2 c/ J4 e. R) a$ c: l
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
) e/ F) J. y! j#如果使用ipv6应改为proto tcp6或proto udp6' ^* l6 f- ^1 ?# i4 h8 P
;proto tcp
1 j1 V7 q& Z. N& z7 U" B+ a8 Fproto udp- o! M9 F: K' W
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。* }: I! X) t% Z  x3 M2 t( s- k
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
1 \' L3 A/ Q) f' Y  edev tap
) m. C, f5 `* a' q% }* j' Z4 A' X& |;dev tun
1 b" ~! X; y% Q' Y#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
9 P4 g& x. o8 U. b+ P- ica ca.crt# v- R3 r. r* F" n' J# d8 I
#Server使用的证书文件" t& d; h4 U8 J1 P2 k/ ?" m3 B. Y6 v
cert server.crt1 Z7 P. i7 R2 y; p
#Server使用的证书对应的key,注意文件的权限,防止被盗
$ Y7 _4 Q3 f) N: x. S# W* bkey server.key # This file should be kept secret
& p6 j' n1 ?  z1 |$ ]#CRL文件的申明,被吊销的证书链,这些证书将无法登录
, e( G. R9 E, scrl-verify vpncrl.pem* G  S4 ^* l, b6 a9 @) [
#上面提到的生成的Diffie-Hellman文件5 a9 Y) V7 O% C2 L& |
dh dh1024.pem
. a) y- i% h+ B( M0 H8 x#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由/ Q) E6 ^+ h) E( J  _3 q6 s
#这条命令等效于:9 E; R! R# \6 ]# I* i# V5 B8 j* e
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
9 t" {4 Y) e: p; [& ?7 D* w# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
; [, ]7 y% G; q" h4 d#
% o, s( o# ?& |% F# if dev tun: #如果使用tun设备,等效于以下配置
) a1 F/ b2 g8 i5 q. H% k# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
; z( {! E( V  [/ v. H# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
0 V" e8 I$ \- B& f7 y; L  Z# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.20 N0 _1 n* p# @5 X6 Z. ^
# if client-to-client: #如果使用client-to-client这个选项
5 V5 `) Q- g6 y2 H/ `# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1; I  o, C$ X* G( c6 U7 n$ r& i
# else
, Z& c  f, w  p8 B, x# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1* s$ G# S5 m6 s1 X+ _  g8 v
#
' Y3 h, ]: N5 n  Q# if dev tap: #如果使用tap设备,则等效于以下命令# a3 E& k+ |& `6 ^# E' M
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
# ~- I3 n% l* D- d! l# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码& ?4 c1 j% K3 X( Z2 F8 D
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
0 O) D( s8 @, D% o; w2 F' Y#9 V7 z1 w/ l6 Q5 |8 }
server 10.8.0.0 255.255.255.0 #等效于以上命令: ?: l& c7 F! J# @* G3 z7 u
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,* F+ ~# i- n# L% n$ c' ]
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址  q: I, j2 O$ _2 \- p  m1 H
ifconfig-pool-persist ipp.txt, X7 S  x" x/ I* `
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用5 ^9 y' X5 ]& P8 q% A0 W$ ~) w
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
2 P0 t. N9 x' @- P$ h#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用+ b' Q2 [' T- \6 G4 X; G, T
;push “route 192.168.10.0 255.255.255.0″3 \& ~+ p: Y0 _' I
;push “route 192.168.20.0 255.255.255.0″
3 F1 i( b5 _. u9 C. v+ J$ d+ R#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
5 A% _/ W2 J/ U0 ^;route 10.9.0.0 255.255.255.252
! {3 ]2 C1 F6 z#Run script or shell command cmd to validate client' g( D6 l) ^& w7 ]& m+ e
#virtual addresses or routes. 具体查看manual, m1 D7 n5 j+ ~3 v
;learn-address ./script
5 |9 q- T7 I0 S; l, D+ ]# z, _9 Y#其他的一些需要PUSH给Client的选项
0 e% c0 y/ O& D2 g#6 ?  t# l8 H; J6 ?4 D# J3 l% w
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
* {( b& P6 S4 K& \: b;push “redirect-gateway”
0 w( C9 e/ R8 u0 s! ?6 p#DHCP的一些选项,具体查看Manual
7 o5 [# j) H! [7 I9 {;push “dhcp-option DNS 10.8.0.1″5 b& D9 ]1 l, p
;push “dhcp-option WINS 10.8.0.1″
: p5 u! L* l" A#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
9 e  O* j( u( l5 ~2 A#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
5 W8 o6 X- G. v) ^; Eclient-to-client
# U; n8 ?3 j- B; d' X! M2 _: W#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA% z) y( P: h' t5 Y7 Q: A- X
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN* A5 }) I4 x+ N: C+ V. x  G
;duplicate-cn% g9 S5 Z' r3 u: p' g, Q. Z
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
/ ~% X8 h' q; g& }# a) J#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
; }& j9 v' c$ ^# i#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,% o0 K7 k% {, {4 E: c
#认为连接丢失,并重新启动VPN,重新连接; s8 k8 @7 s) h1 w' r8 T( }
#(对于mode server模式下的openvpn不会重新连接)。/ Z; M+ J4 Q" G4 V/ |0 ]
keepalive 10 1207 A7 }, J, k- k  D. i/ F
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,2 ^% A4 ?" q, t& O- ^7 b: u0 Q
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1" R  r8 q  z' \
tls-auth ta.key 0 # This file is secret; h% Y! a4 Q' N$ f" S. Q" U
#对数据进行压缩,注意Server和Client一致5 @0 K, J5 h, z7 n
comp-lzo* F" T5 a/ Q7 K: n
#定义最大连接数
" d, K# U  k6 ^: i9 a;max-clients 100
' ~( b3 m/ v1 s1 }- Q, D& [0 j#定义运行openvpn的用户. O: U  \+ O! I- y! Q
user nobody5 q, f: b5 B; o5 B" j1 p
group nobody6 [- O1 a2 l3 ?0 \6 c; Z
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys" @2 w8 _- d! m. S4 V
persist-key
1 Z! i( [* ]. a/ B9 k#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,1 ?" T9 l& F) ~: K
#否则网络连接会先linkdown然后linkup
4 _0 j" k/ s) I' I+ `/ d. K0 ~persist-tun
& k7 K) w' E" V/ x#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作( l2 Q# [1 r. W- t/ R7 }* ^8 Y8 }- z  t
status openvpn-status.log
, \( J$ v  x, j# @$ \#记录日志,每次重新启动openvpn后删除原有的log信息
# h" w* ^% L; H) t- elog /var/log/openvpn.log! N# G) O, Q/ o5 }) m4 F) O8 F
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后9 U& x) y. N9 n; C; W
;log-append openvpn.log( @) I6 O6 n, V; U! A! r1 T8 K+ e9 b
#相当于debug level,具体查看manual5 c& u/ v0 a, A; h; b- ?9 _
verb 3- Z4 }# `; A0 @( R
——————————-
  b8 Q8 V% v, t* _把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
, G% \. @" T) g: M4 V* b#cd /etc/openvpn2 N* a# l$ |% ?4 i7 ]; _! ]! \
#cp easy-rsa/keys/ca.crt .
3 w* |5 X: Z- [+ d8 ?#cp easy-rsa/keys/server.crt .8 w5 ]8 H7 w- F  n7 c
#cp easy-rsa/keys/server.key .
' r5 c: s' x4 K0 l' d3 m#cp easy-rsa/keys/dh1024.pem .
' w/ J  L  }5 v/ |#cp easy-rsa/keys/ta.key .+ V: [5 g- O8 V
#cp easy-rsa/keys/vpncrl.pem .+ H! i# P4 E; X
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
0 |/ ]/ A0 Y- x1 J然后运行:9 G" n0 N# v+ Z- Y& m1 O4 E
#chkconfig –add openvpn+ S/ [/ n8 l" ]
#chkconfig openvpn on
/ n+ M4 G1 @2 n+ K立即启动openenvpn. L1 `/ s7 v; Q8 s& {3 m9 ~2 Y! k
#/etc/init.d/openvpn start
, f0 y; k8 T& H- D/ `! M# j& _& P% k7 k
接下来配置客户端的配置文件client.conf:
* M9 ?* O( W+ f9 X( OLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key$ B5 g: y( I, t) ^; a
———————————-
3 V! B3 R  n: g- f/ R# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”) `: J; z2 e# h4 N7 Y6 I
client- O- n, D8 J7 F# Z1 t3 L# `- Z

4 }9 d+ j3 Q9 _#指定接口的类型,严格和Server端一致+ _+ z4 {9 w5 [; P* V/ {2 P
dev tap
7 ~; k* u0 m( o- o$ n3 z$ u, D- p;dev tun
+ z/ Y5 K/ V, m+ @7 f- g0 k2 M0 z+ q( Z) J( \
# Windows needs the TAP-Win32 adapter name
$ z  Q9 M% w; J0 ?/ M# from the Network Connections panel
9 D8 O# ]! x& B# J- O  x+ K, b# if you have more than one. On XP SP2,
! T1 T9 P' D0 i+ n4 @/ _+ z# you may need to disable the firewall
2 L0 l' Q: V) P! M! N# for the TAP adapter.* v" s# u9 y1 K7 U4 a! x# W6 Y
;dev-node MyTap3 m9 a' \4 _+ f% ]- g% H5 M- m2 E

/ Y$ f) b; o! H5 O0 h5 `0 U# 使用的协议,与Server严格一致
: S5 Z: w8 j5 Y* r;proto tcp) ]7 O/ x. F3 b* b' ~# E
proto udp+ v# i" G8 Y  u( W) v; f% L) ]
1 z3 ]  W9 y% \6 B- X- q/ F' [
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
+ J8 g1 ~" V/ {# g5 R6 j( b' w
remote 61.1.1.2 1194
& v0 p8 p7 S8 Y# h- Y* i1 M  O;remote my-server-2 1194+ f( J3 w% q7 ?( v1 D$ A# i- v

  L( N2 ]5 [0 i  c; o# 随机选择一个Server连接,否则按照顺序从上到下依次连接7 j" X5 Q' y7 Y2 X" P4 N: Y
;remote-random
# r+ N0 K; m( R8 q% ], @8 |' `! y* `  f$ F% c
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),+ e4 s0 e, p8 `! V: ~
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址! ^  n0 o7 Z6 N/ ^2 V5 L
# 这样无需人为重新启动,即可重新接入VPN7 f- W3 u$ x& b' P; ?
resolv-retry infinite% R8 l4 j! i) n6 H  ?) w( O' v

: X. o% h, k7 h! R# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
1 M5 l& x+ P4 M0 V' b0 p) N+ gnobind% P7 ]. i: w! i9 a' v, d8 T! f4 v
# i' P! @. T7 A, B: _6 ]* H
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作% Z: T& ^, Q+ Z' m4 z3 f8 J
user nobody( o% [9 t, v/ O$ g) }" J
group nobody
6 y0 m$ Y; w/ \1 p& ~( x# {2 c* f  A8 Q# F5 ]& g+ J
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去! C# ~, s( T) e+ I) s
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是- o  G( d& n$ a. d/ Q2 J' L6 s
# push “route 192.168.0.0 255.255.255.0″4 @" d& I2 ~2 F2 E8 H
route 192.168.0.0 255.255.0.0* `. \* s. \( n5 x) d3 l
7 Q$ P. B2 |+ ^! ?7 ~+ r5 h" R$ u
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
5 B0 F* E/ @' l! D+ Wpersist-key
' k( W9 A+ h3 V2 r0 upersist-tun
' E. J  l! G4 x2 [2 f3 T! S
; ~5 w5 {, g9 L5 O! k9 X0 \5 X# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面% n  F5 R9 \7 L7 I2 }( y  f
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
5 E: n9 Z( g7 m, ?# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual4 h0 i6 L) V. r9 }
;http-proxy-retry # retry on connection failures+ N" ~) v3 `" r9 a8 ~0 |  k- _0 B
;http-proxy [proxy server] [proxy port #]
1 J% s& X* l/ S2 \$ C; ~, v# g  w; f, r5 O
# 对于无线设备使用VPN的配置,看看就明白了$ j9 q* e; C) W9 x6 u& {8 L
# Wireless networks often produce a lot8 C5 G  B9 F7 P8 [1 {' q& D0 k
# of duplicate packets. Set this flag
: O0 U1 [- Q/ Q9 Q# to silence duplicate packet warnings.
+ `. p6 H1 E. {;mute-replay-warnings
2 d7 l. r0 D3 D- D# t7 ~/ O' d0 U& C) |3 P7 a
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
- g4 A8 N' A5 sca ca.crt
* ^; X5 G) B9 C# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
7 m4 p4 \% K0 |cert elm.crt( k% e5 J3 V" k0 S" X7 U: E! w6 h$ z
key elm.key+ p" n" t/ o6 @3 A7 `( X0 c1 f" |6 H

/ F3 B- |3 ^2 t& v# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
9 V5 I8 ^2 J: c9 E% x6 k7 \# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server1 b# T# T9 D, U# L0 q
# 因为他们的CA里没有这个扩展
* D5 U$ c, z% Q9 `& _# J* E7 Tns-cert-type server
, G( ]9 K4 k% k! u
: W2 Q3 {+ h2 K# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
9 l. \( o4 U, ~: ltls-auth ta.key 1
- x/ ^* O! x( ~* ?+ d8 d* D' }9 l4 ?) q  A4 J/ ~4 |" y
# 压缩选项,和Server严格一致) Q0 f, H- D# a3 Z( {: @
comp-lzo
! o9 F! |; T( p1 t' `2 O9 \2 j; E0 f
# Set log file verbosity.+ h% [1 c* X( S* r" k& {
verb 4 " `0 q* H/ c! o
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-5 07:17 , Processed in 0.080489 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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