找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15224|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
& Z' x3 K8 e! ^7 u# ~3 a—————————–
. m3 t7 A' ^5 f: `  D! [+ E0 T#申明本机使用的IP地址,也可以不说明" |" G4 s9 `3 ]. X' V9 t
;local a.b.c.d
1 ?) _0 e' D8 p. R8 s2 `2 h5 @#申明使用的端口,默认1194
" L6 @2 M1 c& d, W$ Bport 1194
3 h+ v* P8 T. v1 m* ]: q  \#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议( }3 p& L: e, f, A5 ?
#如果使用ipv6应改为proto tcp6或proto udp6
% @/ b8 v# \: p  v;proto tcp
' G2 V5 J0 ]6 U7 B0 H' b7 Hproto udp
( H, R  Y4 S/ E/ O- q, i#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。, [1 H0 i7 r1 O" p
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备' B/ ~4 {: ]1 ?' d5 `3 X( c
dev tap
% k: Z+ f) M' u6 ^( m* b! s4 D; u;dev tun
& f4 x  m$ _, t' Z  L$ {0 Q#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
7 V: v& H! ?3 \4 Sca ca.crt6 k* ^7 e" l7 f. X: t' E' |2 O! ]+ ~! @
#Server使用的证书文件" @$ I+ Z3 F! \: n6 Y
cert server.crt: W* Z5 y& h9 l/ Q% f( e7 F2 A6 k
#Server使用的证书对应的key,注意文件的权限,防止被盗
; j) `" t% }8 I- Q! Kkey server.key # This file should be kept secret
! \4 m( g2 c' V5 Q#CRL文件的申明,被吊销的证书链,这些证书将无法登录2 e2 u# @0 i! j' m. w5 m/ i5 N8 Z5 u
crl-verify vpncrl.pem
5 x6 k* d. `9 _7 d% t; }8 a( `- I#上面提到的生成的Diffie-Hellman文件
" Z% n4 t3 z9 ^: y6 c4 d' P9 ydh dh1024.pem
2 l+ a5 m6 t; T4 s; X7 \#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由' V5 K7 h1 R7 @4 {- f  ?
#这条命令等效于:2 s5 c# f" z" b4 D" }7 P1 S3 J1 V" H3 [9 ]
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
! @8 f) P) D/ C: w: A1 A5 P0 C# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
: G6 P# {4 t/ o! S1 ^# l5 _#
- l3 G$ U- V) c# P3 b4 F# if dev tun: #如果使用tun设备,等效于以下配置
/ U0 q7 i/ ~6 ~9 E. i# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
, E- T; u3 Y( w, ?# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址. D9 ~" }1 `$ \; S$ C
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.21 E7 C# }  B; K8 r7 V  F
# if client-to-client: #如果使用client-to-client这个选项
! U9 _; ]& |; {: c( `. B# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1/ y6 U9 F' \) |- w& ^- C
# else2 ~( e- [1 {- ~
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.15 m- t- N" N- z: k8 z
#
# k' c0 Y1 ?& _, O# if dev tap: #如果使用tap设备,则等效于以下命令
4 B2 X  t6 y4 y# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址( R% U( x3 H, F! S  f
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码9 i3 N8 y5 z7 u: B0 R* m/ i
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机( E) F  _( p, ^% i9 B2 r; _  e
#( j/ E3 p$ h5 |) J/ N7 ]
server 10.8.0.0 255.255.255.0 #等效于以上命令% s  e  c! T2 M6 M5 R
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
1 y$ r# N" t7 y7 e* `#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
4 U: p/ V0 Z) }! g% |/ L) ~ifconfig-pool-persist ipp.txt
$ ?* U/ u. Q. o4 V9 r$ T3 _#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用% O4 P5 ~; X, p* O- C2 [
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
; i/ G$ h. i3 Q- B0 d#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用% s* z2 b/ ^9 ]( q- Q
;push “route 192.168.10.0 255.255.255.0″: @6 E$ h4 a: Q9 K4 d5 c8 N
;push “route 192.168.20.0 255.255.255.0″
# B! C" ?4 u* f) z#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除( r5 A# \, a' n  D0 z8 |# \
;route 10.9.0.0 255.255.255.252
# `  X- O8 g/ A. A+ U/ d+ L#Run script or shell command cmd to validate client
2 ^( c) M" @. j: C% F#virtual addresses or routes. 具体查看manual) B7 H+ t1 w: _
;learn-address ./script
7 v; d& [+ P0 ^4 l; i#其他的一些需要PUSH给Client的选项
" m; k, n7 T; P8 q' D#+ ^1 p/ ?4 Z% e5 j
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
# t) e2 t9 p. N$ L9 f2 |;push “redirect-gateway”
0 u9 a& R3 d, p7 U5 G; p- f#DHCP的一些选项,具体查看Manual
4 `5 t7 ?& |- H3 a7 f' \;push “dhcp-option DNS 10.8.0.1″+ n+ B8 q( y8 F. F/ r! J
;push “dhcp-option WINS 10.8.0.1″/ u5 ]1 p/ |+ _3 Y% l
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
* N9 E0 o6 s7 {6 g5 ^9 S#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
# @# M4 {8 m, k0 F" y) f% i& x  Eclient-to-client4 i- m( Q$ }' |" A6 F! K: |
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
* h6 @  N1 S+ g- F5 F! G: ^#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
, O! V: C- H& U% P) q! D2 I;duplicate-cn
; A4 Q" G! D4 H% \( B2 I" Q7 L# e4 E#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
6 N, I2 e9 S( a, |) W#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
* t6 p- |9 @3 O' i$ Z4 N5 h#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
& G( }- p- P" I; y1 t6 T* m& y#认为连接丢失,并重新启动VPN,重新连接5 X7 ~# [; ~. p! L
#(对于mode server模式下的openvpn不会重新连接)。+ k, `# Q  |7 `9 i
keepalive 10 120
. n( k+ e% m* s0 [; q#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
0 z# T* H# L; J! E#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1# i- y2 Z' |# ?4 Y; f, |! n
tls-auth ta.key 0 # This file is secret5 s# X" r3 M, ^8 ?, _
#对数据进行压缩,注意Server和Client一致
8 C5 c' x" l  o" y! rcomp-lzo, b( a' c- l; b6 L! v, R
#定义最大连接数- B$ ]" i/ q$ I& D% y8 k
;max-clients 1006 e9 d9 a7 z5 X& j6 j
#定义运行openvpn的用户/ T, L4 m* Y/ o6 x( v+ A
user nobody
) N; T6 |' [# }1 q, I5 |4 rgroup nobody
* Z6 F* }/ ]( m- M: y6 X#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
& B* a- K6 c/ b, R0 m6 dpersist-key
4 ]3 B1 ]$ Y7 {" z( L- o#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,. Z* v$ A6 T, E# v! g
#否则网络连接会先linkdown然后linkup
4 b1 x) n* p" I+ B" h3 opersist-tun
; ]. [8 p9 x" A, P5 t& h  f0 H#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作" O& R7 W+ N- p( c0 h4 u& Z/ D: Y
status openvpn-status.log% F7 Z6 `4 E4 w& ]/ p3 t
#记录日志,每次重新启动openvpn后删除原有的log信息
- R5 z6 _6 J& V* a+ {, [! qlog /var/log/openvpn.log* [$ l8 I8 Y6 @5 Z' [; C
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后; p' y# |/ w, w' Q' Q
;log-append openvpn.log
  g/ C, Y7 n1 J5 j! m#相当于debug level,具体查看manual
4 J, D" C5 V: I% y* P; U. Gverb 3
; f6 k. j: [# G0 y& Q' C——————————-  [! \  s- {5 Y/ }
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
! b3 D4 l0 b  O% ?#cd /etc/openvpn
6 n: S! q, U9 {6 q/ _/ x#cp easy-rsa/keys/ca.crt .
/ a  j% N7 ~5 a! O5 J#cp easy-rsa/keys/server.crt .) w/ H5 n) W+ y! w5 O$ N# G* g  n
#cp easy-rsa/keys/server.key .
( G' \$ b$ z, m2 Y! w& Q#cp easy-rsa/keys/dh1024.pem .7 O- M* q' c+ }* H! l/ k# ^
#cp easy-rsa/keys/ta.key .7 A2 V* `5 z  P/ x2 O5 v; B
#cp easy-rsa/keys/vpncrl.pem .& l" U. w; u$ E( X5 |; u" a' u
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
0 R' x& }' Y% _) S然后运行:9 ~$ ~" q& H6 W3 }3 x% M0 ^
#chkconfig –add openvpn1 n* O  R" z3 F' p2 ^* g8 K
#chkconfig openvpn on
2 S/ N) ?: B5 f  D3 h/ O9 v立即启动openenvpn! _4 P9 u3 E0 T" P0 y  S
#/etc/init.d/openvpn start
) I* V) l# t) O
! y/ p% t+ y0 z) ?7 L- R4 S5 d接下来配置客户端的配置文件client.conf:4 T0 U1 T; L! [
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key0 B) ^! z4 P+ d' ~" N
———————————-
5 |7 @8 l1 Q+ u) J& m" i, F# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
9 L5 c3 r1 t& h0 tclient0 z2 ?1 ?& c. f( P8 [
& Z2 m& d2 u1 j/ D' `' q7 Z! T
#指定接口的类型,严格和Server端一致# w  n& i: D9 b* a3 ^3 |: y
dev tap
- q9 B3 j* E; |;dev tun- D/ w" N# c' i0 a

$ X9 t  {5 i: p0 a9 L+ D- ]. X# Windows needs the TAP-Win32 adapter name
  w) K# p% i' A3 P7 H  f. N& s# from the Network Connections panel
1 ?* W: `' J* S8 ?$ o# if you have more than one. On XP SP2,
. a9 t+ z$ `" D7 ?6 Z# you may need to disable the firewall
1 ^; V+ \$ ^% E. m/ a: f# g# for the TAP adapter.
: H! `- i7 R1 t; C% K% v) o;dev-node MyTap; [% T5 t0 I/ Z

* e, g  Y% n( ~' Q0 @5 [# 使用的协议,与Server严格一致
3 q/ T+ Q: D6 Z3 _4 |+ `;proto tcp
( {- Q' L' M+ F1 Y& y! {proto udp
8 i: ?6 k% \; B
8 Y. b' k. q& Q#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字$ x/ {8 d# t0 d3 M' @
; u" |1 ~) |- x3 j8 x1 W9 e* |
remote 61.1.1.2 1194: ?8 P$ |% K/ w. K* `
;remote my-server-2 1194) S7 n/ s5 Y4 a, a# A

* q7 [3 _$ D0 l/ L) v# 随机选择一个Server连接,否则按照顺序从上到下依次连接
, h2 V: R( b3 I6 v$ r( e;remote-random
6 z( c! m+ f! o; U" y
/ i, x3 X# a- y+ c) O5 `4 i1 ?# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
& ?. Y) X4 S- q9 W8 u# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
( `2 n  U% `' L7 M, I' D# 这样无需人为重新启动,即可重新接入VPN) Q9 E  c; D1 Y% d, D
resolv-retry infinite
. H4 c% L1 r4 Q9 g- ^/ S1 A
$ T/ E8 p$ [! G$ A( D# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
3 V2 |+ t' H1 T7 F0 rnobind0 R$ l- M- C; B9 s! m+ c

  x. _% f; J4 y# S# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
# a( O! [0 p2 Auser nobody) ?$ j" X& g' n& @" G
group nobody
8 ~$ m( D" X* V, Q( d1 S# V/ y6 w) W5 y2 u
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
2 M3 }. \+ \% R3 Y0 B4 h; N/ T#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是' r6 b" E6 ]" L, x! y# C
# push “route 192.168.0.0 255.255.255.0″" f& a2 ~/ Q! `  U- Q0 x" b! o
route 192.168.0.0 255.255.0.0
5 L- o) W7 p$ I$ R
% x: N0 d$ i# a' V7 w3 A4 g# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
$ N% d/ F; J& c8 d. \1 U0 N6 bpersist-key
/ G( D8 o) w# V% r- s3 L: _/ dpersist-tun% t3 i  \% e9 Q( @: s1 L
5 n+ [) e) P6 L( S9 G# v  m- h
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面9 w  H/ R* A2 d0 g+ G
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
5 {( |4 K1 n9 K5 a$ Q) U# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
; z" g8 ~( [3 s; p8 Z;http-proxy-retry # retry on connection failures% b" ]% r! m9 K" C
;http-proxy [proxy server] [proxy port #]
3 k4 N0 f/ q  v* A0 i; ?: P5 p( j# c
# 对于无线设备使用VPN的配置,看看就明白了; [1 j0 }* v' s3 f, c" \+ z# K
# Wireless networks often produce a lot8 z5 p% X2 V3 O" I, Y/ I
# of duplicate packets. Set this flag
8 y8 V; Q6 l; P5 M# to silence duplicate packet warnings.
* [$ v5 J3 l$ V;mute-replay-warnings  {/ Y: H, d. f" q( b, x

3 o5 O' l7 @+ U8 N/ w9 [5 X, Y# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
* W+ ?* a) Q5 U5 ]5 nca ca.crt
# A& E( k0 a7 {( f# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。! n( _0 [3 D5 k) {" v: l/ o
cert elm.crt
7 r+ T5 [9 K3 ]9 {* ?6 I) @1 O5 ?key elm.key) q4 Z; y& I6 |

# n% O  c' n7 i0 z, I  v7 D# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
; a0 J: \: ~& s& E# T# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
8 o3 G, `1 J( x8 x* E4 _3 [# 因为他们的CA里没有这个扩展& o6 O" F' x7 [$ k
ns-cert-type server* R; t1 i: O* y/ J: W
- Y5 c3 _* M! i
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1" N0 r9 O6 G& ~/ K6 `/ s/ i5 l
tls-auth ta.key 1
# a1 `  W# R' @! J3 ]) g# X
1 {2 x* A; {1 m: ?2 l4 C' P3 ^# 压缩选项,和Server严格一致* n, S' c2 d: N+ R
comp-lzo
: |" |- q  \/ A" R( y% U
0 R! \' D) z9 y, N# Set log file verbosity.
# _7 @& C+ y, y8 f" @) U; y3 Wverb 4
4 N* k7 E. l& g( E7 {  a! @
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-5-25 09:56 , Processed in 0.083479 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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