找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16385|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf4 y5 H8 `2 ]4 l" a/ o
—————————–6 Q1 P* E% B& z- h) a- h
#申明本机使用的IP地址,也可以不说明! |( M3 P9 e& l6 T' V7 V/ z
;local a.b.c.d+ w. `9 o% Z- a0 G
#申明使用的端口,默认1194/ T% j/ Q3 |& M) K2 a& p
port 11943 j- p# Q% T8 l. c* p( b
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
0 S, u! C8 r( C+ A#如果使用ipv6应改为proto tcp6或proto udp68 ?2 Z5 m, w) Q# }1 ^# v; D
;proto tcp
" G, F' y1 R* v. M; zproto udp
2 X; W6 Z5 t* a7 W#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。8 y. n2 @: k7 M1 ]
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备$ \2 |, S$ U( f+ W) X3 Y7 \4 F
dev tap( e2 J7 q! q- O8 |. W3 @
;dev tun
) J) E* ]2 D' _( z# o#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法' W# T8 Y1 ^1 s/ T  t6 Q
ca ca.crt
7 I1 ?4 A$ D, T#Server使用的证书文件
. x* h4 b# H! Z, @cert server.crt
6 i8 }/ q4 E) t8 m#Server使用的证书对应的key,注意文件的权限,防止被盗
  P2 J8 ^4 I- W4 s# Wkey server.key # This file should be kept secret
' t: [9 h- x4 {& L. T#CRL文件的申明,被吊销的证书链,这些证书将无法登录+ E( X3 h3 L) Q: W, l- l6 y
crl-verify vpncrl.pem
9 N0 O4 Y& T( q. ?* g+ n  y+ U/ J#上面提到的生成的Diffie-Hellman文件
: ?0 |" B) Q. B, x  rdh dh1024.pem$ h  \( ^( q2 K) f9 s
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由1 M" {# g" V: s9 o. C5 ^! ~; E$ v
#这条命令等效于:
4 X1 n* X; H, Y; j# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入" b7 {) V) ?, e- {0 \' f: z" Z
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client9 u& U8 r% {; y) g
#( A$ s6 `! A; a6 i) l7 w2 |
# if dev tun: #如果使用tun设备,等效于以下配置3 I6 F  G3 e: a! S3 v; I* L
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址" V& e: U, _' ^9 W  h
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址* ~6 C! ]% Z( ^7 F5 Q
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2$ u2 K, s& g+ z
# if client-to-client: #如果使用client-to-client这个选项
" Y1 n2 j- E0 G. F6 F2 q# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.10 Q9 R' m  `9 h
# else. K9 v7 H. p. {# |3 f
# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.16 x# o/ ~( S$ |# u) }+ i/ U9 }
#
6 B3 Y1 H5 F3 b& o# if dev tap: #如果使用tap设备,则等效于以下命令# s4 U7 h. x. z. |6 s% T8 \
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
: s' }+ c1 s! V* K6 j  ?3 ~) d# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
! A  B6 k, C  |4 z# d% C# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
: f. k; A$ }) w& I' b#- O7 `4 G" u+ c  ?+ z
server 10.8.0.0 255.255.255.0 #等效于以上命令, z$ L# _. v3 q8 T3 F8 n
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,6 J* i+ O2 @  e2 S
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
2 H1 G- q* U( E3 @ifconfig-pool-persist ipp.txt
7 Z1 S: g9 H+ c9 v4 o* C$ C: G#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用+ m' h4 e3 m, `8 n0 |
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.1003 q  ~" n& L3 B! o
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
7 S! s6 D" v0 C) d7 x, Z;push “route 192.168.10.0 255.255.255.0″
8 J2 R0 d5 L% ]% I* S;push “route 192.168.20.0 255.255.255.0″
5 V9 Y$ o7 k" w: n* j( `3 J) e' h#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除* |2 v7 f. x5 G$ x# F" V
;route 10.9.0.0 255.255.255.252& Z" s* N. ^% A
#Run script or shell command cmd to validate client6 K1 y8 q& K! _7 z) \
#virtual addresses or routes. 具体查看manual7 f2 p% ]0 Y5 [7 Q5 p; o
;learn-address ./script4 F, ]; L/ ~: e3 R
#其他的一些需要PUSH给Client的选项
4 e" F1 m6 Y' o#% H* k! h- m6 ^  E! O6 m. V/ u
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
& ]( i& q/ @3 p( R;push “redirect-gateway”3 C3 ~% t- U" a" x1 G) U* G  s
#DHCP的一些选项,具体查看Manual
8 t8 Q/ p) L, z+ `* i) t;push “dhcp-option DNS 10.8.0.1″
( y: c0 s+ ^8 H9 d, Z) \) q;push “dhcp-option WINS 10.8.0.1″. j3 f1 {2 {6 n9 a/ L
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,2 m' K+ e  K7 i* k( ~( O* i
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率* v6 P# U* X9 w' H: S$ s7 b
client-to-client
" H: ]5 v/ ^* j' J- H; ~1 f( h#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA: t3 f/ I- m& q- j7 D
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
& f# M" A7 g- E  I3 z5 d% l. t;duplicate-cn% H$ I9 W/ ~/ B6 j$ U  e" k
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
* e3 c. X! }  q# I1 e$ g: f, Q#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
8 [: \5 `/ ]' w1 E/ R#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,3 {) q& F0 r: p9 v2 A7 A+ t. g
#认为连接丢失,并重新启动VPN,重新连接# r% D3 m6 z' U  }
#(对于mode server模式下的openvpn不会重新连接)。
9 W3 c0 {; O  b9 Okeepalive 10 120
7 Z9 i" q( P* w& d% k#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,6 F0 q, c9 H8 o! B' F- D
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1" D( g" ~/ C) D- r, W* B
tls-auth ta.key 0 # This file is secret% _/ n; ~5 }. A9 ~' g9 K& E
#对数据进行压缩,注意Server和Client一致' J' t- W& X! a( d1 L4 y9 i* g; d
comp-lzo
" a5 r/ F+ B& g2 F' c#定义最大连接数
! Z/ }8 H, A9 ]$ }+ s$ K;max-clients 100
/ y) [2 \) ^' V( z" |#定义运行openvpn的用户
8 g# z: s6 g2 ~5 b2 a. S8 Q, o- fuser nobody
$ l! Z/ Y1 m0 }0 u" z2 @group nobody
, M8 N3 L& x! Q% n) P2 ~6 ^#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
0 K7 [% M! |& _' K+ ?8 ~/ {0 v3 ?persist-key
" f- ?' ~& X, R6 F#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
, z5 E  |5 \1 G, U#否则网络连接会先linkdown然后linkup' \8 a/ ^6 v9 V6 \3 w! @
persist-tun4 l: }* D" B$ t! I5 q8 P
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
; r# k% `+ A" ]" V7 ustatus openvpn-status.log5 u- Q4 L  D5 j' I
#记录日志,每次重新启动openvpn后删除原有的log信息
1 Y2 R2 J; j8 _, mlog /var/log/openvpn.log
$ j8 E8 ^* V/ w" R#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
/ o. P7 L6 a4 @4 J;log-append openvpn.log
5 g& O" A2 x' _: z, ^8 m/ m. U#相当于debug level,具体查看manual# l" f/ _" L1 C* Y
verb 3
, f  Z/ _# ~! W+ p8 f" x——————————-7 o: D# e! I" y7 Z9 H% r
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
* d5 ^# z% D( O" W1 @3 v#cd /etc/openvpn3 ]: n$ i; u5 ^1 b3 J
#cp easy-rsa/keys/ca.crt ./ s8 E% v; K' f
#cp easy-rsa/keys/server.crt .
5 R. X1 P0 E4 K+ ^5 G& o; |+ l#cp easy-rsa/keys/server.key .
# i  Q- e- O2 Y  y& T2 Q; V#cp easy-rsa/keys/dh1024.pem .1 x, |/ o, h5 R) h( h; L
#cp easy-rsa/keys/ta.key ./ r4 \$ P+ m8 W/ P- B
#cp easy-rsa/keys/vpncrl.pem .7 k9 D, ]$ y; N/ r
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
' N% u3 H" K  d9 l* a9 b. o然后运行:
! z; C% X2 X2 l/ M1 z  ^/ @#chkconfig –add openvpn
8 x7 K! a5 `; `7 r; f4 I#chkconfig openvpn on9 y/ c' k4 H7 T+ v6 X9 b
立即启动openenvpn% ]4 U( |) j+ {$ ?$ R( |$ D
#/etc/init.d/openvpn start3 `8 G9 Z9 R1 k/ T+ @

$ v& u! g3 x. R) ~! o接下来配置客户端的配置文件client.conf:8 Q; R+ T. |7 ]. F! S& A
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key  Q1 f6 T2 @6 e' p
———————————-
5 D# p3 x  w" f# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
- @9 o. f. S9 W: H: J6 q- b& @7 Wclient
9 a5 C1 a6 P& u/ r  f. O- F2 {+ q* m- ]9 Z
#指定接口的类型,严格和Server端一致& ?/ R7 Z5 \: u  f# [
dev tap
: e1 m7 ^4 D0 T1 R;dev tun/ Y0 N- V$ O  M/ h" u, Q
' r% q; D0 ?$ f0 G3 K3 w2 w
# Windows needs the TAP-Win32 adapter name. _/ j0 J/ _# W
# from the Network Connections panel8 ^0 X! x, f2 s0 Z8 F
# if you have more than one. On XP SP2,
9 ^3 j  L& F4 @, X; u* Y" a# you may need to disable the firewall
) N- }% U- B* Y, j# k$ h) y6 m# for the TAP adapter.5 _9 `* t9 s- X0 b
;dev-node MyTap
% e, p1 P% q* T: @9 V3 f4 d
' B: ^$ b4 y7 w% \# 使用的协议,与Server严格一致
% x$ ^- d) F, V! _;proto tcp
8 h8 o: Y8 {0 S! cproto udp
% N' D+ r3 I: x/ F: [+ V# }- v5 u9 r7 q
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字# G1 l! H9 z0 V/ u+ J# }
9 h% @3 i2 H4 q* u7 i  C
remote 61.1.1.2 1194
, f! ?9 j5 g+ Y3 e) d;remote my-server-2 1194
0 g! j. u$ c( s- E3 I7 S4 `! m1 {/ \
# 随机选择一个Server连接,否则按照顺序从上到下依次连接# @& `4 l7 y' u& _
;remote-random( k" U, Q$ Y: e: X- @1 p9 e% H
6 j: J7 @1 {1 B& q
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
% O' U! [# _+ Z% C3 c# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
1 J" s/ [# V. r- [% v( L5 G# 这样无需人为重新启动,即可重新接入VPN
6 A2 F! {2 g4 W! I1 q5 _resolv-retry infinite
4 P1 C: R6 d$ X# S6 K5 D/ s" b" ?2 g
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
/ A8 O7 J* |. znobind
6 v4 l, f7 t! Y/ P6 N
- e' I" S. C7 u! y4 g# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
! [  j4 P/ Q7 j9 u2 ~user nobody
) L$ f3 @; ^0 W1 sgroup nobody
3 R6 X3 o$ m0 s- _/ g/ w
: H+ J9 q6 v. @! X#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
, D$ v8 |2 x' h/ j6 @2 `! X#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是8 z% f' p  O1 G
# push “route 192.168.0.0 255.255.255.0″1 y. \4 W- \$ Y% n
route 192.168.0.0 255.255.0.0
2 ?. t; H( _8 m  Y# J; L/ {; Q4 l& f8 {
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备$ R- Y! `0 A8 \' k3 g" H1 f
persist-key& y/ Y+ M- C1 ^  C9 C; [, i0 C+ S
persist-tun& ~8 ^( b( s. D

) E! A0 T0 n2 i% I; @7 ~; M# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
2 j; k* {1 K3 _$ \# {# y+ S# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]( c) V' [2 k4 L7 r0 O% T+ R
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual) G. W+ q# y0 u4 b6 f3 v
;http-proxy-retry # retry on connection failures
8 p- i) @7 ]' I+ ?" U2 l2 k2 z;http-proxy [proxy server] [proxy port #]4 y0 N" o& l8 j; c% B. X1 D4 C+ d1 V

) [- D; V$ U+ Q. J# 对于无线设备使用VPN的配置,看看就明白了
/ t+ y) x+ _. L7 w9 |# Wireless networks often produce a lot* R% X9 ?( N: I& s
# of duplicate packets. Set this flag
" }& [2 a% q# I6 ?& j& ~9 K0 P# to silence duplicate packet warnings.
, B' R$ k5 Y; n% L4 n;mute-replay-warnings8 g+ D- V7 H, I( ]

* K! b+ p2 L( `& e5 T9 P# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件  r1 m/ N! {6 u1 z
ca ca.crt% Z8 H1 x+ z! U) D4 B0 y
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
+ t0 u7 ]$ I* E6 l  P2 l* D' ecert elm.crt4 ^0 J: ~# S2 h9 ?% c' B# R
key elm.key
. n2 E4 F0 M! {( ?4 s
" Q  `, }: `5 R0 H7 t' |  E# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项* @( e8 ^3 [8 c* [
# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server5 M8 x5 |1 x; z, N, f
# 因为他们的CA里没有这个扩展' K1 D- }9 F& b! v) ^! S
ns-cert-type server
. L! Q% Q1 i. W) G4 j) Q. G! N5 f
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1% K1 D9 X' K# F
tls-auth ta.key 1
* E. e8 A, Y. ^+ V: v3 D1 U3 P/ V( Z, z( m1 |
# 压缩选项,和Server严格一致( ~6 W4 H4 W; c+ e. `: Z7 ]
comp-lzo0 S# T* |4 I7 B9 Y! ?  ^$ S

2 {$ S" N* B, L/ v; W* e# Set log file verbosity.
1 j+ k( v, E) b3 O' d6 g: iverb 4 , i; g( ]3 @1 h6 ^+ \# z
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-9-11 10:58 , Processed in 0.621601 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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