找回密码
 立即注册
查看: 9255|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf! P/ H' p  F8 l, z( K1 D
—————————–
6 A) k! b8 d; `; n! K) L#申明本机使用的IP地址,也可以不说明: t# h5 ~6 S6 U
;local a.b.c.d
! }7 c2 {0 Q5 K6 ^# ~/ Y#申明使用的端口,默认1194
- E* |2 t1 m! ?; U1 _2 g) Jport 11941 S  @, g. o, S1 Z7 g' h0 f& O
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
0 `( f' V* R- g! f8 _  O2 K#如果使用ipv6应改为proto tcp6或proto udp6
7 v" U& A. }/ Z1 f;proto tcp
2 }  o% \2 A5 X& C1 Eproto udp
1 i8 \2 N, Q8 R; Q#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。1 t* |  P7 I/ e( C( P
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备3 B# G/ p1 x. @/ t
dev tap1 o4 `+ E. h: n! ?
;dev tun
% G! a3 P" l" x% M% B1 }9 B#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
& z3 J2 X% b# \% ^& i- o" J; nca ca.crt
" b0 _" Q  z1 w. _7 N8 z3 N) a#Server使用的证书文件  O* p3 G( w7 `  V$ \- g
cert server.crt
' `) `% w+ o5 ]. f+ g2 E#Server使用的证书对应的key,注意文件的权限,防止被盗
% ^0 K# m0 S7 }" ykey server.key # This file should be kept secret
7 @( q8 v- Q# i( U- l#CRL文件的申明,被吊销的证书链,这些证书将无法登录
; o9 N) _; Y; Hcrl-verify vpncrl.pem" J5 @- E, R5 _0 S7 i* m& s
#上面提到的生成的Diffie-Hellman文件
6 ]. d( \+ ]9 tdh dh1024.pem
. d+ |& V7 Z4 l( s9 N#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由! O4 y! P; u# b( V( p# {3 T
#这条命令等效于:
3 S! r, f1 K- H) d5 l# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入8 d  I) O2 l! b4 H+ H+ h* s# t
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client! L' m3 L0 G* F; {
#
- H4 w+ Y4 z3 D9 `' L+ v# if dev tun: #如果使用tun设备,等效于以下配置
" r, S  B: ^3 o9 `8 U! b# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址( o8 w' r. \6 ~" s' u
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址5 ~" k: J4 E7 @! _5 b7 G
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2
2 T% s: c6 `! t9 v  R4 z# if client-to-client: #如果使用client-to-client这个选项
- t* ]$ M# `' K5 ]4 U# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.15 i" |$ C1 v  [
# else
1 ]' w& D' y' P* V6 Y% q! @# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1. A7 L" E+ B; v' K5 Q3 c; g
#- A4 P9 t) e6 n0 H# I7 ~+ e
# if dev tap: #如果使用tap设备,则等效于以下命令
- d' C7 t2 t! [" M6 {# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
  k5 V. o0 G& y  T# i# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
( ]: E  }+ J% A" d# y# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机3 G! b; U+ D6 `  e4 a3 q
#
4 ~0 }) |$ D1 oserver 10.8.0.0 255.255.255.0 #等效于以上命令1 y2 q  L, C% _/ f/ }3 |
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,5 i/ Y, S+ h/ u5 b; a" c4 \+ I# V1 x
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
) H6 W/ @! j: g( s+ R  C, Wifconfig-pool-persist ipp.txt
3 i) C1 _# B3 t# }, H% O#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用3 Y& D2 P% b; q/ w
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100( M3 l2 K+ `7 F% W2 f5 d- g8 v4 U$ a
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用/ Y+ V2 y6 c2 y' O* l
;push “route 192.168.10.0 255.255.255.0″* m/ v6 L  u% ?
;push “route 192.168.20.0 255.255.255.0″2 p2 X" Y0 h0 L' Y, d
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
9 }1 u9 K7 [5 K: `* K! y7 ];route 10.9.0.0 255.255.255.252
3 c$ R8 G. q6 G6 M' {1 Q; r#Run script or shell command cmd to validate client( w& F1 Q- m9 I, [$ R% @
#virtual addresses or routes. 具体查看manual
0 s$ ~6 R: N. Z- n3 [;learn-address ./script
% H8 H# U. |0 L! y#其他的一些需要PUSH给Client的选项: N% c+ o1 q$ e& Y3 b; O; D
#( g5 g+ r$ I5 [( m7 f; ?& q
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
. P  j  ?0 q1 N% }5 n;push “redirect-gateway”
* E* F; Q. t  [& ^* b! |7 i  t# m3 @#DHCP的一些选项,具体查看Manual4 n  H2 K& |# ]4 P4 k- E0 ~
;push “dhcp-option DNS 10.8.0.1″
! ~$ f8 d" d: V/ C  Y. U8 ]; {;push “dhcp-option WINS 10.8.0.1″
2 B: Y& |# _& g# m#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,3 F9 k& s) k8 \0 C( [6 o
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率; q5 ^7 j; ?  Z, `
client-to-client# r  `8 q! j) @8 {: n. q
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
5 i5 W; g5 U  N4 Z7 G9 p3 C#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
9 M: j( I& v5 b6 M+ ?" N  F;duplicate-cn& r7 ~" _. H# V1 T0 m) l
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
9 X. t% {, K  N% C! r3 ?% n9 G. ?#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
7 x2 o* p6 ?: D% X, u, R#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,3 z3 j' d0 C) I$ n, n# L1 ]
#认为连接丢失,并重新启动VPN,重新连接$ M, ~  F8 K& s4 A5 c& p
#(对于mode server模式下的openvpn不会重新连接)。- p; C3 N* Z, z- }# x6 v0 {
keepalive 10 120
& W! J9 N' |' o1 n, y- c# D#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
! b" L; P' e+ f& c#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用12 K: u9 X: }9 _' _
tls-auth ta.key 0 # This file is secret
: m, `! q! }: Z* v% x- a#对数据进行压缩,注意Server和Client一致
* u3 a' @( K+ J* K; o# g. wcomp-lzo+ y, T% d' A9 F0 Q: D$ v+ [  |3 Z
#定义最大连接数% ?2 l) O8 s$ U- U$ N& k6 q( H
;max-clients 100+ H& R' {# a* }* \' V
#定义运行openvpn的用户
/ F& D. N0 k- B6 z' ~: u9 \user nobody
9 T; e/ s4 Z5 M4 Q$ k8 }group nobody
, N& N$ ]6 I# ~4 ?' s% w0 W#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
- l7 P8 E$ i- A: Z2 ^# lpersist-key3 R' E& u* Q$ n7 h. W1 g+ y
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
) D1 k/ d) Q7 R  s/ g' Y% j+ }  I. W#否则网络连接会先linkdown然后linkup7 a, V! n1 L1 E4 R8 F$ S
persist-tun
: L) G" H8 |8 p6 Y! J#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
3 ?  Q( u& c2 I  l* p% [status openvpn-status.log) `' V9 k) @7 c+ }( h2 f$ h
#记录日志,每次重新启动openvpn后删除原有的log信息
9 K& W' d5 G& u6 ~5 J" `: xlog /var/log/openvpn.log
2 u3 y8 C' s6 }& }8 D#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后, e3 y# I( @6 L7 M8 m/ P
;log-append openvpn.log5 h, P5 Z) g0 A7 _8 \7 d6 p1 |
#相当于debug level,具体查看manual
2 |1 i# N9 b6 _verb 3- `& d* y1 G8 S; b" F
——————————-
" z( {$ m- k# M0 X5 h把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:( r. g6 ]0 v: ^+ e5 j
#cd /etc/openvpn
+ {  w7 K% s  ^#cp easy-rsa/keys/ca.crt .% Q- V2 T* s+ R1 {; O4 C
#cp easy-rsa/keys/server.crt .
: E6 Y& ~- R' [#cp easy-rsa/keys/server.key .
9 A7 A. g8 D" b$ M# A#cp easy-rsa/keys/dh1024.pem .
# C2 e% E7 e/ c. L#cp easy-rsa/keys/ta.key .
& L7 C1 K1 O# l! X7 F#cp easy-rsa/keys/vpncrl.pem .3 n6 N, p4 J6 k! ^' M
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
  ]; ~( O8 u5 B然后运行:
3 B% r2 z' d/ i9 Q; A( E7 ^#chkconfig –add openvpn9 A& n2 |% [( F# G$ w1 P
#chkconfig openvpn on
$ U" U( N6 U' z4 }0 b立即启动openenvpn
( j8 z0 u$ V" d: [#/etc/init.d/openvpn start8 |  A& s# Z. G7 ]
, k2 ^4 l7 s" [  J
接下来配置客户端的配置文件client.conf:
6 e* E8 L& Y6 R# W% S. zLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
5 Z. z' L0 h0 b  Z———————————-6 K2 X* k1 P2 I9 C7 D
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
+ M7 N9 u+ v; lclient' Q2 S6 q  z4 v+ d
4 ?( m% D8 W5 X4 a* D- a# G
#指定接口的类型,严格和Server端一致
5 Y6 z1 C0 }/ h8 N# Fdev tap
" s% K( F( s' j;dev tun
, k' g& P2 R7 E. e6 ~7 s1 p4 A9 C
7 o" P5 k; m! s; F3 R4 S- Q1 d# Windows needs the TAP-Win32 adapter name
. y& X8 L! O. ]% }! \6 c3 m# from the Network Connections panel
6 @! N' m4 G" j* p# f  ?# if you have more than one. On XP SP2,
) W, |- k! t5 h8 B4 l' {# you may need to disable the firewall0 X. V0 K. t* S3 T
# for the TAP adapter.
: `3 `# x" }8 v/ x  X. W;dev-node MyTap, }, L5 c; Z/ V$ E0 Y& [

9 K# D0 t6 k3 z4 c) M; \# 使用的协议,与Server严格一致: A( E- U! S. {! Y% h
;proto tcp% l6 O" N9 T) s! O3 E
proto udp+ d, g7 m. ^( Q% a5 e; Q) U9 a

. S8 H) ?# ]: y* m7 ^! E, q#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字3 o' |: ~% ^% A! f

  v* e$ r9 k5 t& S+ @" W2 Dremote 61.1.1.2 1194( E, E9 t, e' m8 L  \: c- O$ F4 l
;remote my-server-2 11945 v. p; b" J2 h

' Y2 b$ r) y3 y' t& n( u# 随机选择一个Server连接,否则按照顺序从上到下依次连接
$ v4 f; d- h1 r5 D: `;remote-random
/ }6 L. Z6 Q: Q! M* z6 U' C6 ~* A8 _. b4 c: {% v7 l
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
, Y# V1 X* Y6 w1 O1 L" s" u# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
# @- l; M9 v( V# 这样无需人为重新启动,即可重新接入VPN
8 s+ |) R# w; D/ P( m/ u: \, ]0 q2 W7 wresolv-retry infinite
: p& ~: J6 S3 C/ g5 Y2 u! _: h; [* W
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
4 `9 z( P! c8 S9 N# Mnobind, |) h3 J- J! x; H9 l

; s- X+ E' n$ [/ E7 g3 _# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
9 q- y9 B' T. A/ h" U& E: Vuser nobody) |+ x- |' F! ]4 O' @5 B) s1 p& t9 k
group nobody
" R9 y" `7 l* X* g* s3 H
# V# O+ x# Z/ k8 G#在Client端增加路由,使得所有访问内网的流量都经过VPN出去9 U" P( Y) e" Z+ `+ u7 X
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是, K1 d* S; h- ]2 m' U
# push “route 192.168.0.0 255.255.255.0″! [3 ~' m/ x- ^% r: J
route 192.168.0.0 255.255.0.0  Z0 B, R; `2 a7 O/ J. F
  `( w1 v' Z4 Z
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备' k  M: H! c8 ]6 O
persist-key8 A( D+ r: F5 n
persist-tun
$ Z# a4 ^( C2 Q" E' n. }* }- r/ f, q
4 M- s3 U* ~2 n) i9 v# y# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面4 a6 f. ^' c' X  J( S# f7 L
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]. l8 m2 X5 f5 Q7 \
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
3 [! F& m0 n9 K;http-proxy-retry # retry on connection failures
3 g6 |3 b* c! c0 \3 \. F  |' o* g;http-proxy [proxy server] [proxy port #]
  G3 T1 I. J3 \5 [
0 i- T& Z. q% Q, N. B" |: r' ~# 对于无线设备使用VPN的配置,看看就明白了( U4 c6 f6 r; W% ~" X
# Wireless networks often produce a lot9 o1 P: e& V) T1 v3 e! v9 v- V  g
# of duplicate packets. Set this flag
/ s/ g& ?* a  P/ C7 b5 Z& b# to silence duplicate packet warnings.
9 p" Z7 l  P6 x6 P7 ~. z;mute-replay-warnings& @, @7 z) @  G- }  b4 N

# e7 t8 s1 s% q7 U; ^6 {2 r- F# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件- M. V) A$ H$ u3 T3 s
ca ca.crt3 s1 d. z4 F' V4 V4 V8 G1 d. j6 `
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
  f8 P' N9 x9 _0 k6 k3 ^/ V" b- {cert elm.crt% D  a" t  j% J6 s  S+ ?* M+ ~
key elm.key
# Z) e0 d( C$ I1 T5 d2 g7 A8 E9 d7 @. |9 n
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
7 c/ C$ y. w1 h8 E# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
. `7 q% k7 F/ k: ^0 f# 因为他们的CA里没有这个扩展- w. ]1 q+ Z* P
ns-cert-type server6 h$ I8 Z  ~3 h$ r5 O( k* p

8 t$ w6 s: T2 V' ]8 \3 _* d& T# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
+ u: ~2 {4 s8 ^3 J  l2 ktls-auth ta.key 1
5 t: H3 X& l6 Q. g  }- ?5 h
+ m1 v/ L0 B' p  E0 t# 压缩选项,和Server严格一致' c6 l# }& ^. f6 ]
comp-lzo
: q( B) h. |7 H2 T% J% w6 v% F; c) C5 ?/ _6 X
# Set log file verbosity.
7 s7 j+ I0 B+ hverb 4
4 \. U: |$ A, m" x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-17 02:10 , Processed in 0.085636 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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