找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14111|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf7 _* i8 O9 @: G/ n4 J
—————————–
# r$ z3 c, r  T7 y# e- o#申明本机使用的IP地址,也可以不说明
: Y! y3 N" l- t0 ]5 H* `4 H;local a.b.c.d
- f, Z8 w/ }& X#申明使用的端口,默认1194) ?4 Y2 v: {9 J7 R0 ~
port 1194
2 O# N* l0 w" \) f#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
9 {: w9 o, s7 P& _#如果使用ipv6应改为proto tcp6或proto udp6% I& f+ C0 t$ r; B+ M( }
;proto tcp 7 U9 A" y8 Z& d
proto udp8 q- o: x+ m. @& X. L; _
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
4 N1 \4 I* `! L6 v- f#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备! M2 [" ?- ]) x4 l$ [
dev tap  |/ D. X( F6 q+ r- N; k* ]+ |
;dev tun9 W! x. w) i4 [4 R- j' B0 _
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
, ~& s# I! K# A, k- \ca ca.crt
' Q% E& R! O- v+ N#Server使用的证书文件
0 E, t$ w3 ~; ucert server.crt$ I0 r. I; i. p! |! c4 w5 Q) b% F' V
#Server使用的证书对应的key,注意文件的权限,防止被盗
; Y2 W: S7 R7 B! @key server.key # This file should be kept secret: q( m. r/ g7 e5 A3 Y
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
7 o0 r8 _& c# Rcrl-verify vpncrl.pem' w5 X3 R. }- k8 A  e2 A/ R' s  w
#上面提到的生成的Diffie-Hellman文件
+ l, Z- J) E' \+ z4 Cdh dh1024.pem2 \, {0 Y9 w7 g: h
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由3 D' ]0 e( b9 @7 ?* C
#这条命令等效于:) t' o: t! ?* j
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入2 }7 S% N; \" P! V* Z8 F% r
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client2 l; o3 f& `7 ~7 u; F- ?
#7 _+ B  X; Z& s/ \0 C
# if dev tun: #如果使用tun设备,等效于以下配置
: g) C2 P, F8 r# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址( a2 U, k% [' E% H( [% q
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址! ]3 P2 {. j' s/ c: r: s
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.20 q+ k6 n% W* j# u
# if client-to-client: #如果使用client-to-client这个选项2 y; q. F- S6 r, D& {
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
* Q( y7 K4 Y0 L/ u# else8 H! k6 g; \' s; G
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1* t" z0 V% |, r
#
. I/ T1 J3 _. [$ ]# if dev tap: #如果使用tap设备,则等效于以下命令
, I5 X/ P6 t: g4 L% z# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址* }% z/ c8 h# B: |5 H
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码/ W% N! J" g! A$ l2 N. k  _+ J; b
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
! @0 J7 b, x9 N8 I2 D) J# o* l#1 U+ q" O8 q* E1 C# A# a
server 10.8.0.0 255.255.255.0 #等效于以上命令
$ {  _3 v% i* b1 p3 ?( b! n# J#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,9 T' v0 E+ d7 e% _6 d
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址6 Z2 n1 f6 `; y3 x7 n
ifconfig-pool-persist ipp.txt
& u4 z! o$ w6 q1 ~#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用! z* j, Z: O# _, }5 x2 M8 `
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
+ ~' x; {6 M0 h2 s9 r- ]#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
# q( f* n' h. P3 i: }) d: u1 n: L;push “route 192.168.10.0 255.255.255.0″" g7 s. t0 G2 f3 J  m
;push “route 192.168.20.0 255.255.255.0″
+ z+ Z+ {: t: c. m#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除( M8 n4 d* S3 m; l) J2 v$ Z
;route 10.9.0.0 255.255.255.252
- L4 L7 K% _+ D" m2 p* @* ?9 o#Run script or shell command cmd to validate client3 ^$ y1 {$ x" e, v! C* R, X7 |
#virtual addresses or routes. 具体查看manual. E' Y  I" R/ X6 D: S' E# D& |
;learn-address ./script
8 P) T4 |, H& _$ H! P! h#其他的一些需要PUSH给Client的选项
2 L" [, j% H& z4 a- l! l1 K9 t. Z2 ]#& a& R% D6 [( n) F# ^6 R1 V0 k( x% P
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
6 S6 e5 \* N2 s2 s% d;push “redirect-gateway”% V# V6 p4 Q$ Y) C3 P; w+ U* ~( {2 \
#DHCP的一些选项,具体查看Manual$ [' j, e5 T+ p9 p% t1 b% U
;push “dhcp-option DNS 10.8.0.1″7 H0 V# T  o% W9 F9 B
;push “dhcp-option WINS 10.8.0.1″" v! H7 F" N9 r4 p
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,5 f: \! L" L. r0 x* ^6 K
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
  K3 I' I* }, ~client-to-client
* e5 I. m+ N4 P#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
1 o  z+ O5 e# x' W/ {6 T#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN& j% ~% R. ?# B2 z) b
;duplicate-cn- i3 }1 J3 s' |+ o1 Q5 w
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,9 ]) ?: O& I2 w! O
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
* z* M3 K9 R1 H! A$ N& c& P#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
. Q% @  p7 d3 x" |) j5 N#认为连接丢失,并重新启动VPN,重新连接7 z+ y6 w" Y8 h2 e" P
#(对于mode server模式下的openvpn不会重新连接)。
+ [) T0 f1 B! O" h8 Ckeepalive 10 120- t! w! p. u8 l
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
$ B6 u6 ^6 n2 e" |. B. v#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用11 E  _  E: S/ x% y3 Z2 `) f+ C# S8 V' |
tls-auth ta.key 0 # This file is secret
  x3 H- p1 M% K% e, I& K2 @#对数据进行压缩,注意Server和Client一致
2 q- |2 T9 a$ o, X& u& \* Ecomp-lzo
( }% R$ J" [$ g! x#定义最大连接数4 V4 G( M9 Q; n3 V+ h" w$ \
;max-clients 100
* s- h+ \" Q! u2 s9 P6 k# @#定义运行openvpn的用户
1 b' [/ ]% S5 Q* j% {user nobody3 Y1 ?, X/ a" V# F# |$ G* W
group nobody1 e; L' B5 h- A1 S$ ]
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
: e7 p# s# d: Tpersist-key
9 r7 L" o: j7 ~* V# R: [#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,3 U( z+ k" E% @3 Z1 Q5 |4 x
#否则网络连接会先linkdown然后linkup
+ N- r7 l# \7 ?6 {! y) [persist-tun
( I2 w' q/ O) w  j/ J#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作8 ^+ J4 ~! y+ a* v9 I1 m
status openvpn-status.log2 @8 E6 \8 n) p8 v; n
#记录日志,每次重新启动openvpn后删除原有的log信息
( N" G% b1 S6 X# T! |1 v3 q& Rlog /var/log/openvpn.log
: P* a# t4 |5 R#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后. u- ?, A) T( U
;log-append openvpn.log
, [  u2 f! F% D$ L4 H& u#相当于debug level,具体查看manual4 b& `7 r6 S" Z7 {8 g
verb 3/ s8 q+ g0 W) l) S
——————————-3 \1 `6 X' `. X0 @1 s0 Q
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
4 d+ Q) R4 v7 V' J3 S- U7 S#cd /etc/openvpn7 C/ j8 o) W. a* G  x; S! J" ]( ?
#cp easy-rsa/keys/ca.crt .
, A; g+ Q8 e. D. ?) E+ c#cp easy-rsa/keys/server.crt .
( Q+ s1 d' B8 _/ Z7 t. t; f. V#cp easy-rsa/keys/server.key .8 j! f' F( p  r, B9 u# ~  [8 A% z
#cp easy-rsa/keys/dh1024.pem ." ^/ ]# I. g, R$ v+ P
#cp easy-rsa/keys/ta.key .
7 U" h; o  Q1 s4 l. C: s! y7 |( W#cp easy-rsa/keys/vpncrl.pem .$ s6 g0 Z8 l3 A8 t( ]4 a2 e7 Y; G
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
8 Y: I& ]- A0 _然后运行:
: a# n$ _: T/ g; V3 J% _#chkconfig –add openvpn6 B: R2 }: o- a3 D
#chkconfig openvpn on
, n1 ?0 `  j2 T5 A, s1 v立即启动openenvpn
2 P  F; k1 ?9 e% y#/etc/init.d/openvpn start
7 R! s/ k9 s1 ?% Q9 N8 i
+ g/ K3 U* Z- P3 V接下来配置客户端的配置文件client.conf:0 l* I$ q5 m. v/ e- g
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
& a& R# ]  Z/ t0 M+ N7 R———————————-# |6 E4 A! C% J( K( e
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
# |9 D) }; g. |4 L. y" Zclient6 Q8 _, g, M7 Z/ P% t& a2 J# Y

" t" c! S9 d7 A( l) c# o& L#指定接口的类型,严格和Server端一致
& |" `% u, N1 k% J8 E& k5 bdev tap+ Z( R8 g  L# J+ @3 y
;dev tun
( w! e( m9 C* M: ~' K& L; N8 R' a& f, m+ w! j2 O  U  j8 z3 g
# Windows needs the TAP-Win32 adapter name
& f1 e# ~# H/ _1 Z! J# from the Network Connections panel1 {) i& J; U. ~- n
# if you have more than one. On XP SP2,8 w0 B; w4 o& I4 ?
# you may need to disable the firewall: g) {- M. g" k2 p
# for the TAP adapter.
+ t: S8 Y% }7 V; p;dev-node MyTap
+ V$ ^% |* j8 e, V3 V
, K: M5 a# N2 B# 使用的协议,与Server严格一致
1 g+ _9 n% A3 ]4 n1 H9 }2 P5 H  q;proto tcp
! ]1 r/ s% q+ G; k' Hproto udp, e% h$ T2 _" C3 c  i1 \

% I+ s+ P4 V8 n; @  t#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
0 @4 h* L4 M2 u2 p; {2 C
, b" M. _2 w; Y3 R) Z5 v5 [7 ~remote 61.1.1.2 1194/ B+ y* d) e, F, x# J4 E  B
;remote my-server-2 1194
0 g5 x. E9 Z& @+ c3 n0 T; O- h' k1 q; I
# 随机选择一个Server连接,否则按照顺序从上到下依次连接7 U4 R1 s+ R/ h- X9 D) W( ?
;remote-random
( J6 i7 [8 H9 ?5 c* p; a( F& V: X2 s
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
0 u7 C# d3 `1 L0 i4 F+ r) c# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址  Y5 p% P/ r: f; b
# 这样无需人为重新启动,即可重新接入VPN. p+ Q# v3 u' g) ?# P
resolv-retry infinite
6 s5 x5 g0 }# r9 B+ h8 o" F$ ^, C6 K& Z$ z7 f# a0 h
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
7 y6 c6 ^" k& Knobind+ _  b8 _$ J# x( l% _  C

' J, N' O0 t3 u1 _9 |# D9 k- I/ p# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作. P5 y* q2 k' M( H
user nobody
: q5 E2 [/ o6 d! Y1 `group nobody+ N/ O1 v! n9 L# L6 w& o" p1 o) e( N
% v; Y. z) g  z% X( f8 L: P! F
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去2 k# v6 Y6 M- h" G, }/ x
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是- V1 T& y( `$ g
# push “route 192.168.0.0 255.255.255.0″; @( G" Z8 ]( ?, r# d. J! a
route 192.168.0.0 255.255.0.0
4 M) d( z2 r$ J- F
4 h% m; p9 w7 V- |1 |) G& X# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
4 z% m1 j  V; O1 apersist-key
" ^, q! Q4 m4 ~5 ^  C. t8 A! Npersist-tun
$ r% U! F5 \  h2 N# {7 J7 ^! y' R
, ^# t3 \. e% ^5 g4 d4 A* s# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
  a. R" Y) _7 o# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]3 O) ?/ X$ \$ |- y) a
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual- z* ]* p7 C2 t7 c
;http-proxy-retry # retry on connection failures6 w6 s, C4 b+ ^: n/ w
;http-proxy [proxy server] [proxy port #]
9 W7 j- a6 P. g7 L( x) l; o4 w, o4 X5 v
# 对于无线设备使用VPN的配置,看看就明白了0 L/ A& l  h1 J7 |) n
# Wireless networks often produce a lot
9 c/ Z5 r1 y" r& w# of duplicate packets. Set this flag* X9 I9 H7 J: O0 }6 N& Z6 u0 H( B& R
# to silence duplicate packet warnings." m" S. A+ M, [3 R9 S# @
;mute-replay-warnings
" y8 d4 |, ], e- R. N* X3 Y$ m4 A7 y# L& h5 O7 ^6 y
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
7 \- e6 L0 j) W: b% jca ca.crt
5 i3 I6 x/ ^( Y& q8 I+ J8 M: F0 e# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。! E3 I& E* @( l0 z4 Z" o6 H6 |! u! l
cert elm.crt9 r. [4 d. C, q
key elm.key  {' p1 i7 H+ m) m7 [9 _/ P

3 {+ D3 ~: X* G# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
4 v( g# s. `& F; V) z8 I2 f$ _# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server# y9 t! c8 o" B* G# Q3 E
# 因为他们的CA里没有这个扩展4 I* n' V: |# k1 e8 L
ns-cert-type server  y* D& m# E: }' Y# A
/ _9 s* Z. Q' ?6 s
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
9 a# ~; L/ Z% w- L' `: utls-auth ta.key 1
& b  }# q& p# i5 N. G- G5 B% v* F9 P, ]  t) @( O  e% `5 M" [, p0 Z
# 压缩选项,和Server严格一致
# K: h2 Q/ y) V5 e  F& icomp-lzo
0 U* d( y, E! \0 S2 i- n: U: A
; B. T, z2 j2 D0 W9 _( b4 M7 w* f# Set log file verbosity.
7 v/ N; o, O6 Overb 4
- l, @* F3 M; }* o3 r* O
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-2-4 05:08 , Processed in 0.082843 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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