找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14488|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
7 l% a3 u7 t6 J7 S# C; ]2 U" `9 `- X—————————–
: b2 |% X  l! n" C" j! N5 X#申明本机使用的IP地址,也可以不说明
2 S3 N: x, p7 A3 o; t, Q# q/ F;local a.b.c.d
0 u( w% j8 B1 [3 p* X#申明使用的端口,默认1194
9 q6 w: ~1 K) |port 1194
) c4 u1 v" Y# H) E, w+ r#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
6 }; T/ l3 P/ H  \+ f" t, o* x) c#如果使用ipv6应改为proto tcp6或proto udp6
  e: D2 v# ]& q% z9 z4 {;proto tcp 3 J7 `! ^: U, _) _/ b+ s+ {$ w6 b
proto udp
; ^5 K( y; z) Y6 B#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。, m1 S/ P1 O/ L  c
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
: i  {' X' \4 x0 s% ]dev tap
- w  y7 w' v" _;dev tun" H7 a  L6 h1 `! h) F  U
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
+ D* f* B( P" O4 @/ D8 Q/ eca ca.crt
" e; A7 b$ a* w; g$ W7 u#Server使用的证书文件
) {3 F4 v6 |( u/ I0 ncert server.crt. _- E8 b8 S! c; ]& B3 e
#Server使用的证书对应的key,注意文件的权限,防止被盗
% o0 A, k7 I) I" |key server.key # This file should be kept secret5 s0 b8 Y# `) g4 V4 \$ w
#CRL文件的申明,被吊销的证书链,这些证书将无法登录, E7 d' Z9 `1 }0 l1 z3 M8 b/ n
crl-verify vpncrl.pem4 _2 Y  N9 f& h* j" z
#上面提到的生成的Diffie-Hellman文件% I0 T$ K7 ~1 B( D
dh dh1024.pem
" m. ]4 p/ s" _& _  v( d$ w5 w, G#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
2 f5 |. f- l, I% X4 n. t- H#这条命令等效于:
. ?2 D& D4 W1 v; T$ s# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
. w8 F( r, }7 d/ G. Z# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
) i! Z2 F! j$ [4 w: F6 q+ H) V; w4 ~2 {#( D8 [; `, }- g. Y
# if dev tun: #如果使用tun设备,等效于以下配置1 x8 ?& h4 Q$ {" W2 w- r
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
* y( ~+ T; a% r. o* g# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
; I& \; @3 j. E3 b% g) o" ?# d# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2
9 ?& D1 |9 ?* b5 D# if client-to-client: #如果使用client-to-client这个选项3 i# z* f9 T$ Q* G0 f& Y
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.14 u! H: P$ {: T
# else
- m! {" E: x4 Z7 O! M. \, E8 [# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
1 [$ T# D8 O/ A+ W! E2 L: Y#& K% }9 n9 {: Q" J; |
# if dev tap: #如果使用tap设备,则等效于以下命令
7 d# ]9 |7 S6 V# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
1 T0 ^4 p4 R: w8 ^# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码6 s; _5 i8 S8 R0 M
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机4 Y) l2 Z! d- T7 {: [
#( b8 y8 L2 H' q9 t+ N& K* k* Y0 }
server 10.8.0.0 255.255.255.0 #等效于以上命令; n* U5 k& s" W
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,7 O% o8 T, @$ ~: `" m) H9 p- \8 [
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址; [" ~+ p% k8 R% D! ?
ifconfig-pool-persist ipp.txt
3 I0 x; a' l4 i: G' r2 D& k#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用
& D- {& l' g% |;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
, n- ]) e! I, Z  w" |#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
0 J  j! F: ~" \3 e' ~! n;push “route 192.168.10.0 255.255.255.0″
# z1 S' Z7 b9 M6 Y# F;push “route 192.168.20.0 255.255.255.0″1 ^2 \* X2 G1 y: x1 X0 U
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
4 e5 w/ j0 o/ |1 u' s3 N2 |% x4 K;route 10.9.0.0 255.255.255.2526 H" d" K/ L9 f- e7 p% E0 G$ m
#Run script or shell command cmd to validate client
% e6 y! l+ h- L; l: S- o#virtual addresses or routes. 具体查看manual0 r: m& x' g( h1 |
;learn-address ./script
; ^% w0 ?; \: e, V& b#其他的一些需要PUSH给Client的选项
) P  ?: r. d' u0 ?#9 _9 m/ K6 G/ s
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
5 q" s; u/ _$ c- E2 c9 z& ?5 s;push “redirect-gateway”
- Q$ g8 n9 x+ o9 a  u. F1 p8 A#DHCP的一些选项,具体查看Manual! f/ h. d2 |* C, S0 X; i
;push “dhcp-option DNS 10.8.0.1″& T+ ]$ U& H* N" _
;push “dhcp-option WINS 10.8.0.1″
+ c; E5 N" a, _4 ?+ N#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,2 K7 G; t* c) x5 l' }0 p4 Q6 i
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率, S, A# V& y7 V7 T2 O5 Z* ]5 a5 ?3 A2 C
client-to-client
3 G3 ?5 [. {1 {, b% v7 F- n#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA. a( y! ^5 y  N% I  J3 \
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN$ Z% \8 @; N" @) g5 E. X
;duplicate-cn( v. X' V/ F: r' h
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,& {. T( R0 D( ~, n8 u6 o4 I
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,; W" z9 C% O4 U9 V
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
5 l, b, [9 s+ [' F  J. E& m: U#认为连接丢失,并重新启动VPN,重新连接
! w+ L7 K, x; f. B#(对于mode server模式下的openvpn不会重新连接)。, l3 q; z- U% P. {) q( e) a9 I
keepalive 10 120
$ _/ C" C" \7 v#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
. x% F& |  w; ~" y& ^  ~7 r3 y7 x#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用18 r. f0 ?6 n) {4 M! }) ?+ n
tls-auth ta.key 0 # This file is secret) c7 w9 b2 @8 i3 C. V
#对数据进行压缩,注意Server和Client一致  O" D/ K% W4 G# k+ [
comp-lzo+ C9 m1 }( e$ e) T
#定义最大连接数1 J! f: F: u$ g7 D! l8 g# i7 k. }
;max-clients 100
7 H; q5 Y6 [; H# j  c#定义运行openvpn的用户4 f4 ^! M; H8 V
user nobody
  }* V' [3 l7 J. y5 vgroup nobody
) S. z6 N% R4 x/ P* ]4 H8 u#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys4 j/ l" L: j- t) ], L" _4 |
persist-key9 B# M- ]  F; J2 t/ \
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,3 G" R5 C4 k+ @- Y% ?1 p0 f
#否则网络连接会先linkdown然后linkup
# X+ i) E& k6 V$ Spersist-tun: [8 T5 q5 n$ M6 n  d
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作3 L* L0 ]/ B7 n- l5 V& l
status openvpn-status.log* C$ k2 Z* G1 p2 O  S8 U
#记录日志,每次重新启动openvpn后删除原有的log信息- O3 C4 E/ `- f/ z
log /var/log/openvpn.log
9 X+ e( I+ N+ f# q/ z- p#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
' Z' _; S* v: r6 w9 V' Z( f) ?6 |;log-append openvpn.log
. L" m1 r. R' b8 U2 Q#相当于debug level,具体查看manual5 F/ S# X! I: L' S
verb 3
- r0 N0 z0 A" z+ z2 F——————————-
2 j) |7 _, L( W把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
* A& m' l$ R2 J" |4 e0 W#cd /etc/openvpn
* X" ]2 b- @, G0 o* Z% k: I#cp easy-rsa/keys/ca.crt .
2 v0 c) [3 L; w3 d4 }#cp easy-rsa/keys/server.crt .! ^! |8 ~0 P# q: y
#cp easy-rsa/keys/server.key .2 n) m# C' @! h# K1 k6 @1 N5 n
#cp easy-rsa/keys/dh1024.pem .) |! g; O8 W, K. R" Q: M
#cp easy-rsa/keys/ta.key .
" c1 @  `' e3 P' r4 J" Z7 X#cp easy-rsa/keys/vpncrl.pem .. y, M: B$ B! L  s' ]9 q4 S
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
* N% d0 p5 h, M% P% o然后运行:3 `8 S$ z4 }3 N3 n
#chkconfig –add openvpn
, L5 T. `7 O. r/ p0 r" V0 Q#chkconfig openvpn on; `/ h$ H! k8 K: ^0 }9 L* A+ Z
立即启动openenvpn7 j. x- ]4 W9 w% t7 {
#/etc/init.d/openvpn start4 N4 G# o% [) ^5 J* b
3 t8 E+ k/ t$ J: M& F# p  O8 [) {, S! d5 P
接下来配置客户端的配置文件client.conf:
7 X, @* I- B) j  ~) b8 O9 k( nLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key9 g( s2 X4 o6 S, q
———————————-
! ^$ }0 O4 c5 O; u$ Q# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”7 k. a: m9 y2 m8 h
client* t, V8 [2 m8 |  T$ R

. o8 N  ]$ ~% {8 t, u# ]6 |- ^" Q#指定接口的类型,严格和Server端一致1 V8 k2 [. a4 m
dev tap
; l& K' U. b: ]" r3 a6 c! F$ S;dev tun9 J* a/ l, r6 ^2 R6 ]/ M" P

: n4 Y. g; {; x% z# Windows needs the TAP-Win32 adapter name
# i# u3 S4 Q3 n, S, k# from the Network Connections panel
: h* @: V3 |5 @+ q, _# if you have more than one. On XP SP2,
# `" C! Y; N6 o# you may need to disable the firewall
. |) u: l+ I. W) `8 e8 O, |, R0 h# for the TAP adapter.
4 J& r/ x% @/ k- J+ |;dev-node MyTap/ L3 x3 B# G) {4 M* M; ]
) V1 E* _3 x  M; f4 E: y
# 使用的协议,与Server严格一致$ E" W% F2 E  i
;proto tcp* C- t% D4 R. n- E9 b3 f
proto udp
/ o# M7 ?/ C6 M& y* Y7 C) B/ [2 Y. q, X
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字& c7 A$ j% c! G8 C7 K2 l* c

8 x3 W% `1 R% x9 @) C0 iremote 61.1.1.2 1194
' g  b2 {; e: K4 F2 S;remote my-server-2 1194( x& D3 p4 r1 v: ?
- a+ R- p: O7 C% w
# 随机选择一个Server连接,否则按照顺序从上到下依次连接
$ |2 f( @# ?- H) u' s;remote-random
1 I0 f# g6 t: s# {4 S
) I# t" F, D2 e4 ], E# 始终重新解析Server的IP地址(如果remote后面跟的是域名),7 U& V* P2 j7 c3 m" S! C
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
/ ^; C7 F5 n# c" j. S& }# 这样无需人为重新启动,即可重新接入VPN
" h5 q  \9 a8 }" X' c$ Jresolv-retry infinite
* O/ b$ u) M0 ?2 h+ _  J, c$ a( T& l8 W4 h
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
, V+ M8 L1 s: J. z: g6 tnobind4 |6 n6 o8 N" R/ `9 p
1 l4 t0 r: s$ s0 E; x* X4 w
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作  d! \$ Z* S9 k1 [; Z$ U
user nobody
9 G  b& n. g" h5 z) c0 lgroup nobody9 Q& i' I3 A! E- i

# I& r8 ?' J* J0 l#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
  [) N, l0 E4 I' U% J2 u#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是: E. q& `6 }5 }- K
# push “route 192.168.0.0 255.255.255.0″
5 ~8 C1 k  n) R4 n% _6 A) H7 Uroute 192.168.0.0 255.255.0.0
) G3 V3 M2 I' J6 D' j; C: T6 p; D/ e0 u3 p
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
/ t! B9 E6 h% Y3 S3 Gpersist-key
! R2 W8 g, \4 s% Mpersist-tun$ r3 B3 {& D8 B+ m, ]
* }% J- |/ h/ Y# p# b
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面  p  N( P( [3 u, V$ z4 s1 D
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]: q, S% V$ o4 p" R) S  F8 j
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual, |+ e5 m9 g: j  o
;http-proxy-retry # retry on connection failures/ h; ^3 k6 p% p9 ~3 W& M/ w
;http-proxy [proxy server] [proxy port #]0 w* K# i- t3 W
1 n; f/ ]& w6 O/ B7 P5 Y
# 对于无线设备使用VPN的配置,看看就明白了6 }2 ?9 F) k. e( d/ e
# Wireless networks often produce a lot
. q9 u( d% c& v4 U$ u* N$ i# of duplicate packets. Set this flag% s  D: w+ _  R4 U( r+ ^( x3 Q) t
# to silence duplicate packet warnings.
: v, N; }$ C' w' J$ `$ r;mute-replay-warnings
* g, q  @- v, i. w5 S# @
" R5 Z* q% c3 X0 X4 @1 H, m: N# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
3 X- T2 |& L+ T$ z8 j' Gca ca.crt1 `  m8 z' P: D" {/ \
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。% l* v# [6 b) ]& E" ^" i) _$ c
cert elm.crt
! C4 e% s. ]7 F0 w; D, xkey elm.key
$ F& `3 i2 U" q/ r( t: r
. g) F0 Q$ Z8 U3 d8 R( U* H' B% o# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
5 H& E  E. t. x# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server( c( K3 F" g0 Q( b  _5 j
# 因为他们的CA里没有这个扩展: |) n( k+ X! Y3 ?+ K0 J
ns-cert-type server
# Z0 ]: V5 Q0 L# S$ a" V/ i
% H7 M6 N4 i% Q9 w# 和Server配置里一致,ta.key也一致,注意最后参数使用的是19 n9 s  Z7 k6 J$ t: _4 Q
tls-auth ta.key 1* e' x, |% F2 G( j# r' q

+ ~7 [) O: q# X$ L6 D; y; U  y+ G# 压缩选项,和Server严格一致+ v: |* K! I/ D$ g
comp-lzo% J  r7 }. d/ B  h

2 o2 ~5 |, p( u7 h( u( J2 ]# Set log file verbosity.0 `1 C" ?6 J( O  I! S
verb 4
$ o7 _! |0 n4 \( v/ e
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-17 19:22 , Processed in 0.059799 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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