找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14834|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf3 H, m* h* u0 w. m0 |. i0 l  D. Q
—————————–
- D* g( I4 N2 d#申明本机使用的IP地址,也可以不说明
; ], I0 \2 j8 j  h2 H;local a.b.c.d
  |. H- a4 L6 N% S1 |: T#申明使用的端口,默认1194
+ v5 @7 M+ N& Y8 f1 H0 Fport 1194
8 n5 w$ h( O3 e. H' m4 S$ R5 M* G#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
% _* ?' ?) h3 Q2 R% P) o& f#如果使用ipv6应改为proto tcp6或proto udp6
! t9 \/ ?* s0 I. i2 n. x) @9 p;proto tcp
. h5 |8 @6 T6 _) H$ c, j; Tproto udp8 |2 b) V9 h: z5 \: r+ X
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。, f, u# h, x  a  Z
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
% K* i8 k) _- T1 _7 w! }dev tap" T& ~+ v( {6 D. A3 e
;dev tun
" {, x. ~; N( @#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法* b$ l6 U3 y, ]9 f0 J- d
ca ca.crt
" n9 @; z6 P! F5 C# P1 K#Server使用的证书文件1 Z$ @9 K5 H( W& w: W8 P7 u2 A
cert server.crt
2 K2 P3 \# C( Z8 |9 w: G3 l#Server使用的证书对应的key,注意文件的权限,防止被盗. x+ z/ l! z* W8 X+ V" Y4 u
key server.key # This file should be kept secret/ T! A) I% V3 D- `
#CRL文件的申明,被吊销的证书链,这些证书将无法登录: n9 X& T! n9 _1 f  i
crl-verify vpncrl.pem+ F7 }8 ?! U% e$ _  f" J2 ~+ T# V
#上面提到的生成的Diffie-Hellman文件
8 v6 E" E7 r/ H  y0 `dh dh1024.pem$ h* \" P% `% X. U
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由. |6 v  z. Z! I& ~
#这条命令等效于:
0 X) R8 S0 X9 g- j# ?$ H# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
; B/ d- B) {& w2 `2 S: ?/ z1 E# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client/ P  Z$ p/ A, k$ I; Q$ n  P
## m3 [+ b6 ~# x7 ?" T
# if dev tun: #如果使用tun设备,等效于以下配置, [8 r! {) m& z. t( y" R, s
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址; _* ]6 E' Q% d! ^: [
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
/ N$ b" k4 b: j7 m4 i/ H. B: R# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2: b8 M- Z% z/ A* _" [' F
# if client-to-client: #如果使用client-to-client这个选项
+ R1 q9 |; g( M* t. h" s9 n. m# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
% d2 g: T  T0 ]6 q# else) M- D4 |4 r9 L. K0 L/ K, ~: I
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
1 x  T# E* L; I& F, {* \3 a#
1 e' d! z: _" @& E4 `# if dev tap: #如果使用tap设备,则等效于以下命令
; @% Q5 k. e- y( z" F# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
5 O$ _" O) b3 ~; e- ~# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码8 }% x2 M3 ?* [
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机' c- ?; y- s; C
#
( W1 W% `  c7 M2 N4 {; M. C. M9 }server 10.8.0.0 255.255.255.0 #等效于以上命令( q; T; P4 P$ \; G6 H3 h
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
8 [7 H6 m3 L4 {+ l+ y4 Z. v#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址+ @8 x6 i. G! V0 m  q, d
ifconfig-pool-persist ipp.txt' f* c' V1 B- r" H9 p% w: t  P
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用# Z8 e; X8 u% |0 O/ e
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
, j3 V+ F3 u7 v0 T" I+ \, D#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用" l' t5 |0 w: {+ y9 T: Y3 `+ O/ v
;push “route 192.168.10.0 255.255.255.0″% W; `/ N4 V9 P
;push “route 192.168.20.0 255.255.255.0″  w2 D& Y  X/ |4 k% K. N2 i; V
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
8 x" R) }) d+ B& x;route 10.9.0.0 255.255.255.252& ^- ?: Z4 i  _% H' G% P8 U8 d( \
#Run script or shell command cmd to validate client
0 w8 H: X; l, K# I9 P6 _#virtual addresses or routes. 具体查看manual
3 f* a% ~3 w6 A) _! L;learn-address ./script& E9 h4 b% `7 \( ^
#其他的一些需要PUSH给Client的选项
  K4 U# Q% Z; e4 \! Z) q1 j% y  w#
, J1 k) o5 d# S' X$ O#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走5 u7 K3 g2 T& ~, j1 s. b& D! B
;push “redirect-gateway”$ @0 c$ G. l- C
#DHCP的一些选项,具体查看Manual5 N; e. e8 O, P; I/ `5 p& `
;push “dhcp-option DNS 10.8.0.1″/ H- A/ a+ \, L$ i4 L& D0 M
;push “dhcp-option WINS 10.8.0.1″) W- s" E. N) K* a
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
* s) A, X3 i5 Z6 ]8 J#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率0 H/ h- y+ K7 e7 X, W4 I) D! T
client-to-client
: w! ^1 a% S& a6 |  Q#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA/ J" d; l& Z9 b
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
3 E& D, ]* T+ l- F' U; s6 z# t! a" k9 I;duplicate-cn
4 l9 e- S- A3 _5 _+ J* g#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
. b' j2 d3 P( X7 Q# n3 d6 n#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
  \9 W  O( e0 v#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通," ~: J& r  W& |, }. \- I
#认为连接丢失,并重新启动VPN,重新连接7 O! p6 {1 ^: X7 t, \
#(对于mode server模式下的openvpn不会重新连接)。
8 M: X2 L+ m1 ^& M+ Ckeepalive 10 1207 w  K& a. e3 J' P
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
/ e2 e: r$ B/ ]9 u  F#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
; Q# T9 I0 i4 ]0 _  A' ^tls-auth ta.key 0 # This file is secret
7 M+ z2 z/ S0 N+ d: R#对数据进行压缩,注意Server和Client一致! S" H1 f# V+ n/ L, Y: f5 ?5 h
comp-lzo4 J. m; R; D7 a" E
#定义最大连接数, y: x5 n0 T  q- H* d
;max-clients 100) b  y2 x7 `! M! A  p4 ?3 o# {8 X
#定义运行openvpn的用户+ i% ]: Q1 |$ u: n+ E" z" N: B2 J( W& G
user nobody
1 o+ }+ @3 h* W& v+ \+ qgroup nobody
( H0 `4 d; M1 m0 s0 g#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys( v' E9 N& g1 I( x
persist-key, t5 h* k& \% I' V7 D
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
* F+ U. |: i" O( y2 b#否则网络连接会先linkdown然后linkup. K+ @% }8 U& M& U; {6 v
persist-tun5 Z6 W! A9 D/ }; p: [
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
4 w/ K) E5 |0 t( S1 @: a0 |5 Istatus openvpn-status.log
9 }7 [- M6 O* g* c) C. Z: F#记录日志,每次重新启动openvpn后删除原有的log信息
* ?, K& E! Y7 T- J; d2 Ilog /var/log/openvpn.log7 f) V4 o; A* R1 F2 U" {' N
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
, y6 t4 o% A1 x9 C5 e; x! S- E;log-append openvpn.log! A( I  ^" j3 T' C" W
#相当于debug level,具体查看manual& R( ?. e( ?% Z: W
verb 3
, A1 `1 f1 I5 C# }; T——————————-
3 z# r1 u1 {, a; m" p把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
+ \8 _! o( J: P$ N#cd /etc/openvpn4 f# u$ g) l/ W4 ~% @
#cp easy-rsa/keys/ca.crt .
8 k& j- t, U2 q  s( G" l3 W7 \& |#cp easy-rsa/keys/server.crt .
6 h' {0 j, n" ?/ ?#cp easy-rsa/keys/server.key .7 `! ]) k* t: z: L$ B: F
#cp easy-rsa/keys/dh1024.pem .
2 I$ o! o  w+ W) Z3 q#cp easy-rsa/keys/ta.key .
$ c# G. z7 E8 F' G#cp easy-rsa/keys/vpncrl.pem .6 S& e% Y1 y% M/ y- ]
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn) J" p9 G' s7 _) D; j1 c* ?4 L
然后运行:& d( t3 u3 |1 }6 t4 [; t
#chkconfig –add openvpn3 z  ~$ X3 ?1 }- j8 T9 x
#chkconfig openvpn on
' w6 z( P# l% c# q  o/ n; U) G立即启动openenvpn
+ [0 _* Q1 P' j; U& X8 D#/etc/init.d/openvpn start
5 T( f0 G0 a9 u, q$ Y. X2 _- C$ P; F* b  d$ n9 g  G
接下来配置客户端的配置文件client.conf:
" d* U4 p; m, [/ v, `Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
3 L7 J9 F7 I; E———————————-
) u# C5 t* R. `  v2 f) s# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”- D5 B8 ]6 @/ c0 H- ^+ K9 d/ r
client
  h) r$ B$ m5 \6 V) f0 M3 {2 W4 m  O* Y6 h9 y; R; T0 e4 c! N
#指定接口的类型,严格和Server端一致% W' \- x7 C- @( J9 z, v
dev tap1 \% w' [( P2 Q8 M( o' ~
;dev tun1 ]7 h+ g3 |: ]! A# Y6 p

7 ^( ?' p+ ~$ g3 x  v- T# Windows needs the TAP-Win32 adapter name
$ a3 t" U0 c# m) i$ a* n2 m( K# from the Network Connections panel# B$ _" G: \. M
# if you have more than one. On XP SP2,' |0 s" V. H( t/ V- Z/ Y
# you may need to disable the firewall
6 T# N6 v, D2 P# for the TAP adapter.
: c5 v4 q$ @: ^' C. V;dev-node MyTap
2 j" d. Q5 d4 u- o
8 q! @) J: Z% i$ H* F) v: z# 使用的协议,与Server严格一致$ ?+ H# C' m! o9 u3 P3 [4 o, L
;proto tcp
% n- {: P' {! j0 _7 }proto udp
+ c3 U# c6 b+ b) {! U/ H$ a6 L+ d! d/ U, T& R
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
% g4 A# x  [3 T  x
" d+ r4 `! l1 t+ c) ]$ H# Zremote 61.1.1.2 1194
5 c  k0 t1 P$ i6 ^& H$ N;remote my-server-2 1194) L: W. U! B# h  s& i2 D+ E- J
6 c3 [9 l. g+ z9 w& N
# 随机选择一个Server连接,否则按照顺序从上到下依次连接
* S! x5 y5 o! {, @- r' F  }+ t;remote-random
' [6 G; S0 O* C( s8 W9 j+ F: q& S; y/ [8 }7 K
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),7 a% g3 t+ y1 t$ }
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址" K3 r) i+ W  T* D# g0 k$ F; [
# 这样无需人为重新启动,即可重新接入VPN& j8 X; y7 q" ]" d
resolv-retry infinite1 k2 U/ b  m4 ]* d% ~8 `
% G! T3 s7 i; w+ m9 N1 p/ u3 w
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要' T" \/ I) L8 `0 t. W
nobind
  Q* R' k* F9 ~# E* O% N1 n9 k& S4 P% l
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作' P& e2 Q& U+ |% X9 j, K0 t0 Z8 Y" k
user nobody
7 t9 C( i; a6 h8 q* j- M5 Xgroup nobody/ q* t( M7 X  K3 o% l# o. C. p2 D$ c

. o1 T% t, j6 ~% p1 F#在Client端增加路由,使得所有访问内网的流量都经过VPN出去% b2 n. l7 ]1 `. r# X3 e
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
( g* I: |3 G0 Q" d5 \' U# J, |* P# push “route 192.168.0.0 255.255.255.0″) V7 E- x, ]9 S/ {$ f
route 192.168.0.0 255.255.0.0
2 m0 n: [0 f1 i! H( C- G+ U, N' ~: |7 x5 Y0 |* b# g- `
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
& j0 O9 [: Y/ spersist-key7 E) i6 `0 t; E! [! T
persist-tun& [( s4 j$ P- V

6 a) j1 Y0 M. E& b" P# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面0 v6 a: _! F% G2 d5 m7 @
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
- }: }, }( D8 C; f# h% e# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual- X" X& F8 a# W
;http-proxy-retry # retry on connection failures0 j* U: G) c- w" c3 N; V3 J
;http-proxy [proxy server] [proxy port #]- ]) Y% G) }& p9 s7 Y0 W
2 Z# q. P& V6 p7 D- p. v
# 对于无线设备使用VPN的配置,看看就明白了' O; M4 s" O( A7 \
# Wireless networks often produce a lot6 X( Z2 G5 U3 w) c+ k
# of duplicate packets. Set this flag
' O( Y$ ]% S+ L# to silence duplicate packet warnings.5 }4 b, A+ j! a  z$ v
;mute-replay-warnings8 K6 }. M9 ], J. L
+ x4 d" Q" T  s2 ~: _
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
; Z) |) ^2 _0 j6 X0 {, |ca ca.crt
% A7 U9 ?" ^, D3 e# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。7 o+ a4 Y, i0 X( {0 g
cert elm.crt
% A4 E5 @3 Z0 u- K; }) `$ M. U2 t/ y0 tkey elm.key
/ u' n. M7 r9 [  K' ^' G3 N* D# c" v& s: Z% Q) k4 A/ U
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项& A  r* ]0 H' _9 B
# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server, u6 L/ r( R/ U) Z! K5 ^* V
# 因为他们的CA里没有这个扩展
, ^8 ]1 Q1 @$ r' Q  ^) F6 y! Bns-cert-type server
, |1 H* W8 O; P" l& r
4 k; e- l. m6 F( P# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
1 o1 j, o5 T5 S- Y# `+ otls-auth ta.key 1
# p. Q4 w& P( O/ R9 y8 [' h3 v* ]5 [9 ]  S  Q& ^0 s
# 压缩选项,和Server严格一致! B  T- u& U$ c+ {% Z* z
comp-lzo
3 ]0 C% y7 q2 P7 c, }5 U" P: k- L( L$ q- @' T! e9 |
# Set log file verbosity.
% j# y0 [3 f7 d1 L& rverb 4 , v4 B) G" V) @/ @- T4 G6 m3 D% }- ~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-4-14 15:44 , Processed in 0.084479 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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