找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15337|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
' A$ B  r! W7 Z& ]1 M—————————–# ~* v& x# ~  H& ]& g" Q
#申明本机使用的IP地址,也可以不说明
4 _$ o7 d. K$ V0 ]5 c" p% O;local a.b.c.d
) |7 v6 z. o8 o5 }( `#申明使用的端口,默认1194" _. _5 v( j1 @8 |2 `
port 11948 ~2 d$ e7 D0 D4 I7 v7 F6 |
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
  q2 s, M, e' p; G% I& C. O! ]# `! u#如果使用ipv6应改为proto tcp6或proto udp6
% }4 [2 Y2 r3 L* i5 O) K8 g;proto tcp
) A8 J) E- j& jproto udp0 \# c# x. c7 Q  ~7 |
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
6 o0 E( w# u6 Y2 P* f#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
+ e7 u4 F  ^8 i, W# U/ Hdev tap; R) x3 S5 q% a* P* Z
;dev tun2 z0 W  |# O+ r9 B2 m
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法8 n5 U( M$ r7 w, ?1 t0 k
ca ca.crt' d; T; k, N2 Z8 c: K1 W/ o
#Server使用的证书文件. x% P8 q/ ~3 {8 y
cert server.crt
; T7 f, l6 e4 P. R* C0 v/ q#Server使用的证书对应的key,注意文件的权限,防止被盗: l* [( T6 _5 c! k3 b0 Q  [2 I
key server.key # This file should be kept secret
* v4 p4 W; b! v' I- n6 x" G#CRL文件的申明,被吊销的证书链,这些证书将无法登录: v7 ]& ]' Z+ Q/ i- i& W$ P# g, g
crl-verify vpncrl.pem
, ~" ]( C& c, C5 M, ^0 G/ n#上面提到的生成的Diffie-Hellman文件/ }, j0 }- m& J3 Y# W9 W- [
dh dh1024.pem6 t+ w+ {" E/ e
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
$ J1 r8 D8 @  f5 e$ R: E; R: r#这条命令等效于:
" d" i1 l  n5 O6 V& ^% m  G% U$ A9 r# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入. g) {' ?0 ?2 {8 w! b+ Q$ U
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
+ }% A% |& i: G" G: E#
' E1 ?) y. f- ]# Q# if dev tun: #如果使用tun设备,等效于以下配置( r) l" ~. Z# ]; a
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
# G2 D4 |2 P: {5 S  n1 {$ @# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址- d: V% P8 l) m& X. v3 ~
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2" v& I8 v) M& e3 q
# if client-to-client: #如果使用client-to-client这个选项
/ [( j0 t% U) j3 M; O  Q# U# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
: e* e1 a. Z6 |6 z  f. y" B; b# else$ w; `7 P. [2 f. x
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
) p  C. s% i6 Z2 P" K' S4 Q  Q#* e( g* i; g/ ^9 l" P6 i
# if dev tap: #如果使用tap设备,则等效于以下命令
5 D( U: m9 B) m' w1 y+ O# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
* F3 v0 P' I  S& d! r) c- U# X# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
, ?( _+ j$ F+ A7 b# P# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
2 Z5 Q. N) ?. m2 A% a! U, C#
$ P" j( [* ?! ?: |6 ]server 10.8.0.0 255.255.255.0 #等效于以上命令
4 t5 R9 Z! D' _4 S9 r1 u#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
  t$ _% T, `8 Z* N% f) [#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址6 |) E# W$ p6 ]" z- B
ifconfig-pool-persist ipp.txt( [- v$ D0 r; e8 z
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用5 U+ r2 V( R! w' |8 B
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100/ @- I/ Z0 G8 D4 B: v9 Y8 ^
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
$ Y) I+ h( g- J9 y! j;push “route 192.168.10.0 255.255.255.0″
2 X% t2 I0 T; p8 h;push “route 192.168.20.0 255.255.255.0″
: M  y1 A# w" e. n- c# |#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
0 [- Y2 ?4 p) ]: n2 j;route 10.9.0.0 255.255.255.252" E8 z1 m9 A6 ]; w
#Run script or shell command cmd to validate client
& |5 y7 x' l/ r, T6 T& _3 G#virtual addresses or routes. 具体查看manual/ H7 {5 Y7 n: E: w
;learn-address ./script/ g0 U/ K% w& j* V/ a1 e. f2 n
#其他的一些需要PUSH给Client的选项# r5 ]2 P; }, C& ~( \) w
#! @9 T& b0 {, ^$ t* C
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走2 l' f( y* O( U; U
;push “redirect-gateway”' D: h# y" q( ~& U& B4 y* p. ^
#DHCP的一些选项,具体查看Manual+ U# ~. [: W8 I2 \! Z3 M
;push “dhcp-option DNS 10.8.0.1″6 A4 V& F5 W' p! D+ s0 S
;push “dhcp-option WINS 10.8.0.1″
! ~2 m: J$ T" g  W#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,& i0 I8 D0 i3 }
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
3 |0 m( |/ z% w+ Iclient-to-client# U6 i1 J5 s3 \8 H0 L+ K
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
/ D8 t. O( F- s#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
2 |7 E) ]" {, U( ~;duplicate-cn5 g7 c, b3 C* J8 L( e
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,+ g* k+ F$ F. f* z, D; t9 m
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,6 |! s! F2 k- S9 ^2 U8 y
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
5 L$ S) Y' I0 Z& a" x! c/ _0 Y#认为连接丢失,并重新启动VPN,重新连接+ }/ V% H9 v8 \( E
#(对于mode server模式下的openvpn不会重新连接)。6 Y+ @1 }% l* a9 q2 u7 s
keepalive 10 120* p  l- b$ [$ U; [
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
: e' q3 T3 G8 w6 S/ H#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
* N% `5 U( E' o3 J5 U+ |tls-auth ta.key 0 # This file is secret
: O- p/ s4 N4 x: N" p: R& a#对数据进行压缩,注意Server和Client一致! b% {/ C$ v$ ]4 G9 D4 s
comp-lzo$ a, ]0 P) F1 C5 F7 V3 F/ N
#定义最大连接数: n; |* s. B. b1 p% J) S# d
;max-clients 100( k$ X  v. {* Q5 C! |! C
#定义运行openvpn的用户
% i' I7 E6 p  O6 z& R4 Zuser nobody
0 R2 [% F- \* d" c7 }group nobody
9 [3 b; Z1 R7 E#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
* @( E4 o& P# a' S3 H3 {8 y5 M% bpersist-key
' `$ }( d% [/ ?) B#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
: m8 y& C6 P6 N, P& p6 u7 |4 R#否则网络连接会先linkdown然后linkup) O& @8 U4 B; Z9 g( x
persist-tun
8 _5 b7 u6 |; L/ H* Y#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
( ^% `6 D, x3 E# Tstatus openvpn-status.log
  p1 C7 d- U1 s! l9 \+ s  Z8 U#记录日志,每次重新启动openvpn后删除原有的log信息) M4 I' G7 F; J9 x% R- {
log /var/log/openvpn.log, |- n$ d1 `# F" Y4 @' r
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
7 i/ ^4 ], b, @7 A& [! B6 W: U;log-append openvpn.log
' ~7 [5 X) Y& C7 x7 g. x#相当于debug level,具体查看manual
& J0 _  W  c# _# gverb 3
# b* {. K9 ]7 ^# B——————————-0 M1 m& w# T3 @3 a9 \
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:- A5 F2 w1 ~! }
#cd /etc/openvpn
5 y1 A% @2 a- [5 C7 I; b, v+ S#cp easy-rsa/keys/ca.crt .
0 V# M; H9 P4 e) O5 t#cp easy-rsa/keys/server.crt .
1 Q+ y3 z  g% H* S# m#cp easy-rsa/keys/server.key .
1 l$ n7 }1 J+ i: W#cp easy-rsa/keys/dh1024.pem .. U' V+ G; X& K# |, @" H* _
#cp easy-rsa/keys/ta.key .
& p/ I& |  o* d) h; V7 T#cp easy-rsa/keys/vpncrl.pem .8 t( x/ O/ {9 b: j( r& T
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
8 _" Q: Z3 b/ e. o% x8 ?然后运行:
8 E' g3 `7 s0 a) o9 N7 d#chkconfig –add openvpn
  L8 L2 n% l4 \, \2 z#chkconfig openvpn on) v* j6 l9 Z  ?! b$ z
立即启动openenvpn$ h+ |3 a( z9 I# i1 `& @% k
#/etc/init.d/openvpn start
$ T! P( j% ?( v3 s
& W9 H  f6 q% }1 O; b( o6 X接下来配置客户端的配置文件client.conf:
0 ?2 q5 y/ s2 z) N; `5 G/ Y3 pLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
" c1 h) r6 i" i8 N- p, H———————————-
* M2 ~# D, t) [5 s4 D# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”6 x. |# U: F( P; u* b1 u4 [1 B! O
client
7 M) L/ c6 `" I# `$ Q7 [, S; b6 c
  c7 B8 k* Q# w) _, \+ h#指定接口的类型,严格和Server端一致
% w# [( ^0 [, @3 K$ Udev tap
% n" G: L1 U) O  L# r: ~;dev tun
( V; M, X* D2 _/ m2 C+ y( Z) D% m  ~' Z3 x+ `
# Windows needs the TAP-Win32 adapter name
; G( x5 x9 t* I7 l  i. y& {% g- Y# from the Network Connections panel
) v' \6 v$ @0 x0 a# if you have more than one. On XP SP2,
( _% z' q# U8 ~! j, a+ m# you may need to disable the firewall
4 s7 v. p/ U$ O5 s$ \1 W- f# for the TAP adapter.+ [, P5 y% {/ }# ^" V
;dev-node MyTap2 g5 q' n8 a5 k; R1 O4 \. f

" i. g& l3 w2 u# 使用的协议,与Server严格一致
: i7 {" J$ Z! G. I1 X;proto tcp7 S& H, d8 l/ x! g& H8 A, p
proto udp
2 M" q2 f# P" m% |
& E$ Z1 J9 b- n- y#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
! e9 W4 t! q- r& j) `, q
% z  d* A4 L; wremote 61.1.1.2 1194
( M6 L/ H7 R) |% V0 T;remote my-server-2 11947 T" L/ C- w) r

# f) f0 x2 o. H$ q: }, j, }# 随机选择一个Server连接,否则按照顺序从上到下依次连接; a1 ~1 d3 t3 P# z$ C
;remote-random! s+ h( G" r1 b& D: y6 n: ~2 X

/ R  o/ b6 K/ [0 M* j  r* B# 始终重新解析Server的IP地址(如果remote后面跟的是域名),! ^, b8 e- o6 F! W1 K2 B
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址  ]7 i6 S1 ]1 j0 W8 g! ?
# 这样无需人为重新启动,即可重新接入VPN
$ }; x* I/ m6 W% M# ?resolv-retry infinite2 M" Z$ W  [/ J/ `$ r/ j2 V/ W

+ X5 Z. p, D' z# }" e# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
7 A) R; d% z, ]& b0 Dnobind) Y7 i& t& D% \# i% [- U

/ t  b: k; b$ a' N5 d$ E5 `9 p# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作- u% \0 {0 v3 l7 T( e. ?& C
user nobody
2 _, C/ c9 w& Z( N' p5 U: U6 `group nobody
  `! i  ?9 F6 c) Q) z$ X- p' H2 u% m
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去0 @' ?4 P' H* `
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是7 w% k, B0 O/ z  _5 e
# push “route 192.168.0.0 255.255.255.0″4 X: [) S5 O* M3 V. I) t/ f1 j: E
route 192.168.0.0 255.255.0.0
4 C* l) ^& H6 i* f5 \4 r+ [
' O9 V, W# M- b( O, r# {4 l6 q# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
3 x& L- u5 n' i9 v7 g$ Ppersist-key
4 Y' m7 K$ ]% Z2 ^; d- E6 Upersist-tun
& [+ b0 w+ l2 v. u6 }$ y! J
7 l8 c! W1 N% I8 A; m  P/ F/ C# s# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
) e9 C) d. d5 V# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]+ |) v% D" j4 f5 n) |
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual; s3 s. k8 G! H2 r2 E& J! z5 f
;http-proxy-retry # retry on connection failures) d+ L& t* k& b% z3 I8 G
;http-proxy [proxy server] [proxy port #]2 @+ E; w; `: {! c

8 K6 d9 T2 Z+ T# 对于无线设备使用VPN的配置,看看就明白了; x, w# v" p1 b; M/ X/ E
# Wireless networks often produce a lot
- X, j( c5 i5 C7 N# of duplicate packets. Set this flag
3 v! N8 P: p6 P' R7 ~# to silence duplicate packet warnings.
8 P$ s" u: f* d6 n$ b2 H;mute-replay-warnings6 W4 a% T4 o- e$ c; i- i" @
( C, y, P/ H1 G  P
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件" S  t8 ?- _" y
ca ca.crt
- r, y1 A% [8 v3 J# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
2 ]! Q9 k9 K  X" v" Qcert elm.crt' S3 J% z+ [9 J1 L$ G5 V6 ?: \
key elm.key4 z' i& ]* n+ a# \5 f  z

2 L3 E+ U- y3 Q, X7 q! J# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
+ a* Q, o# l6 K* h; k, _# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
9 i/ L' A6 H* c0 v" }" ?: T$ r# 因为他们的CA里没有这个扩展( |. w5 t; s/ ?: L; ?6 m
ns-cert-type server
6 k* Z6 i, l; a8 v# a4 z/ [3 i. _% C4 R' _) R& M
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
6 E; r7 V. _3 J- A+ I( `" L! s. Gtls-auth ta.key 1
& P4 K  Z% N' ]4 g/ d( Z+ g
& o5 _0 y3 t8 D# m0 t# 压缩选项,和Server严格一致! |+ Z- H3 E9 N: v, Z9 C# _/ v6 Q0 y
comp-lzo: E9 E& i7 E4 D. e- E  U
. w! t, M9 y+ X0 L0 `
# Set log file verbosity.
1 [# y1 K% r" n; h' O# T+ Z! \verb 4 % m% g9 D9 e4 i* U# d  j+ h
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-6-7 04:10 , Processed in 0.067307 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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