找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16552|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf# ?7 p) |4 r  s$ o" k$ |
—————————–4 t  L0 O8 M. k, L, ?7 l
#申明本机使用的IP地址,也可以不说明  Y" G1 E8 a0 v4 F
;local a.b.c.d
% M2 v' g9 i0 ^/ A9 K7 b& S#申明使用的端口,默认1194
' k# p; F9 f' Wport 1194. t1 T/ }. Z+ j) v
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
; S  i  w5 X2 I9 k#如果使用ipv6应改为proto tcp6或proto udp6
  L% n- g, z& x;proto tcp
$ U' c1 U* k: C( |- I9 Gproto udp
7 I; ?1 u. n  P  j2 [; Y- ]#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
' `7 D8 U+ m' h2 @1 L' ?7 l2 G#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备- G" s! U8 w4 }/ y$ l$ q/ c
dev tap- ?& E5 S9 g4 }& M* B
;dev tun2 b' R4 [6 d! w" l4 E5 w+ {) p
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
+ @; G4 P1 }  X1 n6 k% N4 Oca ca.crt
0 m- u2 J$ l) A  V#Server使用的证书文件
1 _$ Z9 L7 n: I* ~cert server.crt
+ e2 |7 V0 w( v5 b#Server使用的证书对应的key,注意文件的权限,防止被盗
0 ]+ C- v  x) x* Mkey server.key # This file should be kept secret
8 I# A# G3 j1 E0 o$ {#CRL文件的申明,被吊销的证书链,这些证书将无法登录1 c6 f: |0 \+ q$ h1 E
crl-verify vpncrl.pem; _& e; W+ P4 {, O% d: c) U3 ^
#上面提到的生成的Diffie-Hellman文件
# [" u+ U9 i3 Y8 ?. F) n$ U% tdh dh1024.pem
3 h# z3 t+ |: O, {1 [+ e. d7 D: Y#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由& S0 H. Y* [6 i6 S2 s
#这条命令等效于:
+ c4 V& F2 F4 K! g- j2 R5 ]# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入
! o  G1 p, ?6 K8 N' y! G& Z# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
; _  v- S+ _* P# \5 c7 j: x$ G, e#
4 C4 k; g' y9 O7 X* p9 V7 I# if dev tun: #如果使用tun设备,等效于以下配置
, Q1 X, s' j- Z2 x2 q# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
% O" X3 F8 {1 |6 u( r* ?8 s# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
3 R$ L- N' P; o- @) @) [# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2
8 ^9 A: I" I: E3 A# if client-to-client: #如果使用client-to-client这个选项
- y: E6 t7 J( R# F  p$ c4 g# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1% b1 S& D: r9 B/ l+ X, M( t( y) ~3 ?" s
# else
8 C4 }* R! s& U6 U7 G# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1& n6 ?( q0 T* W! W/ a
## f( ?2 `2 d- O. G5 \. i& n# a3 d
# if dev tap: #如果使用tap设备,则等效于以下命令% `- l' n9 Z5 y
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
# e# e( h! D; X& ~( y, X# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码+ L  P2 `# D% l+ ?$ L: S
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机
! a, @0 A) N: S& z' k# i, o: F#* R9 w& ]: K" P$ e4 Y! S) q
server 10.8.0.0 255.255.255.0 #等效于以上命令8 ?1 j# ~+ G1 g. s- d$ [, u1 H
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
- K) R6 p0 F. e* _/ j#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址7 ~+ d, J( |5 _0 L$ o3 t, G; \3 H
ifconfig-pool-persist ipp.txt8 n  u4 h0 V4 M7 b& M4 _0 j2 j' `* C
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用: l- s0 m1 }, y
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
; x# n# ?4 l0 e* A#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用7 @. p4 i5 |" E+ a+ w/ P! a
;push “route 192.168.10.0 255.255.255.0″
# }, b" D9 y8 X1 h1 h;push “route 192.168.20.0 255.255.255.0″" @' k) E2 y# {. D
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除2 a5 {3 ?  o8 Z& p9 g' y8 }
;route 10.9.0.0 255.255.255.252$ Q1 [8 g. v( {( W6 A
#Run script or shell command cmd to validate client, ]/ g# k' C% p) Y+ f: c* _
#virtual addresses or routes. 具体查看manual
# s2 b1 ^5 M# e;learn-address ./script* g2 ~8 J$ T7 j" v' p$ {
#其他的一些需要PUSH给Client的选项/ f* L7 v: q) [! S
#6 `0 j8 B* C' j+ G- T% c
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走5 k% z4 o1 e( _
;push “redirect-gateway”% X' o8 t. U2 u! h1 J
#DHCP的一些选项,具体查看Manual
4 d* @) h" \; U2 ^/ B;push “dhcp-option DNS 10.8.0.1″% b% l9 f8 z6 F
;push “dhcp-option WINS 10.8.0.1″2 W( U; C% A$ r  v/ U  a& O
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
5 z/ Y" Q2 {1 V; t#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
+ A$ a5 Y6 ~3 B* Z8 Pclient-to-client5 C% F+ R7 I% A
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
7 M$ k0 e* C+ F8 u#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN) H4 T* ?, r; f! u
;duplicate-cn5 {) n7 X6 S7 y
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
8 u, J& l  R2 }$ F#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
9 A. |# K* ?1 i* o4 S#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,5 J' v* t% q9 l! @9 I4 [/ {
#认为连接丢失,并重新启动VPN,重新连接/ ^7 i  D  x/ }/ `% N) }
#(对于mode server模式下的openvpn不会重新连接)。) ~, w( K! I2 J& W
keepalive 10 120
) Y! Y. _% X9 N4 d( Q3 }- `#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,: P! |6 l5 v* ]6 U- j" e$ c+ O
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1( a3 X) b8 ?+ Z# b) N3 ~( n% F
tls-auth ta.key 0 # This file is secret
* ~0 l. F+ w" {3 s$ n" Z#对数据进行压缩,注意Server和Client一致) x# }" Z: i2 Z' g/ `9 q5 K: R
comp-lzo1 G( ^- U) ~! a! h& D6 l
#定义最大连接数
: g% v, q* R6 Y. L- ]( d+ m4 `;max-clients 100
% J- c& ]+ r" f- |* R#定义运行openvpn的用户) A4 ^! X6 t6 X0 k- U. g6 S
user nobody
* I  Q6 r5 \' m# Y! c/ Xgroup nobody- }2 d* M4 ?% d* m
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys% Y) X$ T- T4 C* k; D) N/ G1 Y+ z
persist-key* F" r5 N* b; p) j
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
, g7 i- @$ K, _. t+ H$ L$ T& n; c#否则网络连接会先linkdown然后linkup0 n+ p! v6 B6 j0 Q1 P% I
persist-tun
3 y# e( Q' o% v: R- H% _#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
$ M2 o6 Y5 k4 P0 j8 R5 fstatus openvpn-status.log0 W  x3 X% N2 \: p1 u8 d
#记录日志,每次重新启动openvpn后删除原有的log信息) j. U/ _9 x+ o3 d( ?+ ^
log /var/log/openvpn.log
, B( }/ O! T4 L- `3 L- b#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后, J; t/ E4 {; N
;log-append openvpn.log
/ t& Y3 Y5 A  y/ c) w" y, f#相当于debug level,具体查看manual
3 J' u* V4 k* y0 O: |1 sverb 3
5 i, E$ D+ L' U5 O! v——————————-
5 u$ B. m! T8 G# o7 y把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:+ F7 A; B  n" d7 G, ~
#cd /etc/openvpn, j+ K6 H4 C1 F7 m
#cp easy-rsa/keys/ca.crt ., p9 l6 D$ L0 k+ x  P( Q6 p" _
#cp easy-rsa/keys/server.crt .
8 f9 o$ }" a: k% @' i#cp easy-rsa/keys/server.key .
. a1 K3 `0 s1 x) b8 ?#cp easy-rsa/keys/dh1024.pem .5 }4 E4 Z1 Y. Y
#cp easy-rsa/keys/ta.key .% H  b- H: X, F" z, e' V
#cp easy-rsa/keys/vpncrl.pem .$ T( S8 Z( v. K( _' {* N
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
1 |9 {4 I0 a- r9 D' ]* T# _然后运行:
: w* F  i7 e2 G! s3 q. N& I$ C#chkconfig –add openvpn
" \5 B3 F$ Y1 G# d. e% S) y3 V0 O#chkconfig openvpn on
  ^# O+ @3 a2 ~3 L8 M# B5 g8 e立即启动openenvpn
: f* O7 R6 _+ a6 R* M6 l#/etc/init.d/openvpn start
7 l" u! P6 w5 \4 w& g" w6 s- R
# U( `# W( \( O1 x4 Z- A- H接下来配置客户端的配置文件client.conf:# d+ B) p: W" x: x2 y# d5 S9 U
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key7 l+ L: j2 l6 [! Q
———————————-+ T% m, ?& E/ C( p
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”1 N4 n; c" ~" _( o; y& Q
client% _( J& i3 W) k. b5 Z" G3 T
9 B; I- w% Y/ _0 h  }
#指定接口的类型,严格和Server端一致6 ^% i. }8 l4 j- R% W) P& g+ K
dev tap
+ n' e0 ~+ y3 }0 \3 X;dev tun1 A3 A! ~" u8 Y& V" ^, m
( R" Q7 g4 R2 }% d3 C& |
# Windows needs the TAP-Win32 adapter name$ y, k, ^6 O) D( z1 U. C, v" Q
# from the Network Connections panel
9 w+ N( k  H5 L# if you have more than one. On XP SP2,
% G1 U' i  v* r. L7 t- s# you may need to disable the firewall9 d+ k0 n8 g5 ~$ m4 q
# for the TAP adapter.6 B, ?$ Q6 a: ]' _2 `
;dev-node MyTap% a# Y& U; T! p$ r, C  P
( j2 Y! `- d4 H6 N9 R4 M6 r+ d- N) u
# 使用的协议,与Server严格一致
+ T& d( Q3 Q) p: @3 ?! d$ Z2 ~3 R;proto tcp1 J4 N" N) R+ b' g) I- W5 i& z& w
proto udp
' f( t2 Q% q1 S2 T8 Y! N9 Q6 n5 ~$ D4 s1 j- o
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字3 y. h3 A: j+ O$ ?) {
6 T- P7 V& {' F7 {, N
remote 61.1.1.2 1194
. m+ r8 z, k8 C* i9 E& K;remote my-server-2 1194# ?% u( I7 S7 ], }& O8 m( y/ F
! V# T8 f4 _: s3 Y
# 随机选择一个Server连接,否则按照顺序从上到下依次连接
9 q4 A) e. `" I: k! G& s;remote-random: _3 h& G; j7 ~; r7 N7 b2 G

) m, \9 T# F+ B9 @6 f' _/ F! ?# 始终重新解析Server的IP地址(如果remote后面跟的是域名),( Y  K* x, [6 P! {4 S& o- Q
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址# f7 ^- O  C+ Y0 V( I
# 这样无需人为重新启动,即可重新接入VPN
8 ]1 `1 N2 x! Aresolv-retry infinite% T9 B0 ~( @2 c/ E7 D0 F5 T6 \

& `+ d, d+ Z& _* }# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要. C- a' g8 Q. }; J; ~! W) T
nobind
! E# s* `/ a1 J% B" Z6 q' g+ Y$ Q4 z  i4 y
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
" I! ?( Z7 b" |& f# kuser nobody
2 V! v9 F/ ^7 n; n3 y; {6 igroup nobody3 X# }. D* o+ G) K! f4 e

: C& k4 F' I1 C( G: L#在Client端增加路由,使得所有访问内网的流量都经过VPN出去2 Z2 a3 f; q7 E8 K" L
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
* ]& D- f9 c4 g& c9 ^+ \$ C! J# push “route 192.168.0.0 255.255.255.0″
" u4 A$ a  w9 C" z% {) }3 Froute 192.168.0.0 255.255.0.0
' N- D, M& R% f1 X' a, G1 Q( K6 ?
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
2 n" F- s9 u# Y# j- b" T7 ?persist-key
7 U8 v9 z9 g1 }+ opersist-tun0 w/ k' b, M. Y3 k: r" X
3 G3 H! ~' X& X3 @) x$ N) F. `
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
8 @. K8 R9 m! c5 Z; u# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]9 M& _: y8 p: \: `
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual$ n2 L- e; [' F2 e# ]# P0 @8 n& ~
;http-proxy-retry # retry on connection failures# r7 |- f2 d3 f- s
;http-proxy [proxy server] [proxy port #]
0 b& N* _: V8 v  X+ ^; K# C& f4 p- E9 u% }' S' C, |9 R
# 对于无线设备使用VPN的配置,看看就明白了
, H4 b6 s7 [  [' {. H# Wireless networks often produce a lot
2 t( [+ r0 u6 [9 p% T+ n2 l" }: g# of duplicate packets. Set this flag
1 _; Z$ ?( Y' @& W! |8 a# to silence duplicate packet warnings.
( P7 c' `4 C5 T' V2 x4 }  R;mute-replay-warnings
  I. h, r+ c* y1 w4 S" Q8 \. c
8 _* ]7 ?, g2 z! r# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
  i- z4 l3 L3 _" S) N2 Mca ca.crt- I) h* h- a" d2 |7 q8 I
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。; T( w; R- T) q% n- e, M5 [  v
cert elm.crt
2 R" F; f2 C8 x2 S2 Ukey elm.key
4 A- q  I4 ]; K3 F  O- ^0 L9 w( l* F6 U/ V6 q0 `  L; D, W' Q
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
$ I% L: O/ o# s  @# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
/ {6 b) _" r& D" {3 G. n3 d# 因为他们的CA里没有这个扩展
% S+ ?+ Z  k5 M* j7 h, kns-cert-type server
/ u! z8 ^% v3 D) D3 @& [- D
8 p% y- j! _" @7 j1 l" b  ~# 和Server配置里一致,ta.key也一致,注意最后参数使用的是18 J& G- L7 V# J$ V
tls-auth ta.key 1
. e9 f: P: G/ D8 X
( X( b0 n2 n: m' T# 压缩选项,和Server严格一致
  m1 c4 O4 [+ s$ C8 ^$ E" mcomp-lzo
* s. e0 {! M1 E$ c0 L" X8 G6 V- F; S9 B. h% c2 I5 R
# Set log file verbosity.& \! H( P& l& }+ K/ N9 a
verb 4
5 n, p* X6 ?' a! f' G3 V: ~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-10-1 22:16 , Processed in 0.130113 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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