找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14144|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
, E# p& A; n% _—————————–
/ m* p; j3 J: M1 W#申明本机使用的IP地址,也可以不说明3 u$ W9 d& Y6 N8 t$ ]
;local a.b.c.d
8 _- d- V' j: v9 r$ C. s#申明使用的端口,默认1194# z  ?' |; q, n8 y/ h, ]4 z5 U3 Q
port 1194
! \! H% x' q( ^" ~3 W& @2 n) a1 F#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议- y5 f% E; e/ [
#如果使用ipv6应改为proto tcp6或proto udp65 y' d1 ^2 V* q! }) ~
;proto tcp * v, X. `  s$ ]: |, }- Z" X
proto udp
5 _1 k4 x, ^8 X& D& @: i3 w, [# h#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。' P) B' Q  ^# h8 U% t. v! L
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备! [! ], q8 a' [2 p' Y
dev tap, `/ s6 _; Q7 q8 {: e- j' t
;dev tun' F" F' i; L8 q- K! `& F1 {- w
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法$ {, i( Q, K. K# s8 L! e
ca ca.crt
: x6 u" u2 L; i. v8 I#Server使用的证书文件
( b8 A1 l2 s: D/ \- W0 ?4 kcert server.crt
: ?/ x5 r) _% ^6 X2 y9 \#Server使用的证书对应的key,注意文件的权限,防止被盗
9 A* G4 M1 E7 o, ?8 t7 w# Akey server.key # This file should be kept secret  v0 s1 M  H# W/ x6 }" O4 |; }* w
#CRL文件的申明,被吊销的证书链,这些证书将无法登录
. Q, p3 Y+ u: d# }4 r; kcrl-verify vpncrl.pem
4 x) n; x& v& j. F2 ]' V6 z' ]#上面提到的生成的Diffie-Hellman文件, K6 G( X8 d- P! w: P9 }; S8 O
dh dh1024.pem. q5 C/ a# k! o% O
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
. M) B5 S' @8 Z: b( G# ~0 O* e7 I" Y3 {#这条命令等效于:
  v% O. a4 \% F# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入1 m& X4 |2 X$ O6 U# ^
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
1 u7 O' t- t1 X0 e6 x% O5 Q#5 w/ k5 p; ]$ f9 u
# if dev tun: #如果使用tun设备,等效于以下配置6 Y, q1 g" L: S  r* A9 e' n
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址3 n; w+ ~: w0 T( y3 \$ q, K- _
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
8 X! j8 y3 A4 Z1 \. m5 Z# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2) V% s; v6 {8 X' p- U' k. X
# if client-to-client: #如果使用client-to-client这个选项. H0 i" |8 u" r+ j
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
9 ~' j) ?( x4 W6 z& L# else
7 A  S4 a, L/ f# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.13 G8 u) V8 Y/ c( ]
#
! I; d; ?+ V. T8 _- e# if dev tap: #如果使用tap设备,则等效于以下命令
6 o9 `: V6 t7 c% C7 ?4 D# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址
+ c) _- q& X& t5 z# _- H' W( {# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码+ g% e4 o. W3 Z
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机- S2 C  ]; [5 U, d9 o
#. j$ I% s* z4 x
server 10.8.0.0 255.255.255.0 #等效于以上命令4 ~- A/ a; P# I( H) e8 e" R0 u
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,+ d/ `3 [) c4 {: @. e% q
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址" R9 H  B0 Y( A1 W
ifconfig-pool-persist ipp.txt1 E) {$ S% j$ L0 }
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用8 q% O& N  B. [# a
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.1007 E# Q4 \( ?& ]& R3 C& L4 Z
#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
, |" I2 a" E% L2 O; g0 f5 t* i- R;push “route 192.168.10.0 255.255.255.0″
6 t# |) G$ v* d0 P) t;push “route 192.168.20.0 255.255.255.0″
) u  u5 i) w8 |; P& t; |$ y#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
; w; G. ?- m+ R: Q2 p# W# D;route 10.9.0.0 255.255.255.252/ Q' g8 m' \' V3 H6 g' A
#Run script or shell command cmd to validate client# P+ d/ T4 e/ |* j8 S/ l
#virtual addresses or routes. 具体查看manual# a  E4 \7 k! T8 {% A6 C
;learn-address ./script
  ^7 Z& w7 o2 b0 _) _9 X#其他的一些需要PUSH给Client的选项; y: o8 O& N* v0 O' N6 y. w. U4 F' _
#) e- D, {" l( d" @( K" Z
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走7 y# A' v8 x. M( R' g# b# g
;push “redirect-gateway”
! J% p0 g2 G) N% T+ t; w7 ?1 J#DHCP的一些选项,具体查看Manual: @; t/ s: G- z0 E4 f
;push “dhcp-option DNS 10.8.0.1″  p$ h5 M3 ~! F8 _- q* e1 Z) ]
;push “dhcp-option WINS 10.8.0.1″" I/ G7 ^& Y( x2 ^! L' |9 m
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,  ~& w) o& Z) b( _% F2 a( N
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率( z* p- H; z1 I$ O# E- |1 n$ R
client-to-client
/ L& S1 Z/ I1 K8 X#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA: ~$ n; }4 R! ]3 p: n/ y, f) f: O
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN: \& r; S8 J$ A; b. o9 `; p
;duplicate-cn0 n" y+ f# F7 g1 q+ C  e  i: M
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
/ V# y$ D3 d5 w1 P#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,5 l, H% J8 Q7 r3 E3 c) M5 |; u6 ?
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,( h: M" E8 j* t0 M2 h
#认为连接丢失,并重新启动VPN,重新连接
3 |  P  j4 c. e$ `#(对于mode server模式下的openvpn不会重新连接)。" M5 {* X* x3 y% _
keepalive 10 120& B! Q# v9 v9 {9 E5 M8 p1 J" X
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
+ Z1 g9 T  `! K9 y2 j$ a/ T% S# e#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
+ i) O4 V  K' A" M! Utls-auth ta.key 0 # This file is secret: b( K4 {& z9 o! |/ P
#对数据进行压缩,注意Server和Client一致3 t6 u, M; a. c3 Y
comp-lzo
8 W) T- q$ w+ p: t#定义最大连接数0 Q' K7 z/ K, `: b, z8 o& R
;max-clients 1000 ?5 b- |1 W5 `/ Y: ?3 u
#定义运行openvpn的用户
0 ?8 W# f5 M( u! B! z4 Puser nobody% r- v" ]+ y: q, f* q+ B
group nobody  x% d/ f/ v+ X
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
% k+ o3 y% G, n- N% W; r6 [6 I+ Y0 upersist-key
* v' N. O  b# H6 v#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
% \+ D5 U  a" J& i' e  \#否则网络连接会先linkdown然后linkup3 h( x& \# r( h( P) L' b' l* k
persist-tun
( X) z# B9 u! J" r  c, E#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
1 g  L4 S- A# N: B* `7 kstatus openvpn-status.log4 ?: }; D/ p! v' z7 k- q; {/ M
#记录日志,每次重新启动openvpn后删除原有的log信息
; o4 P. ]' H3 h, n  x. `log /var/log/openvpn.log
: K% s. ^0 z8 @0 M" h1 J9 _& V#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
' o0 {2 G% f, X3 V# K% _0 F  [  }) t;log-append openvpn.log0 @- C) I' `+ r: w" \
#相当于debug level,具体查看manual) z& h. K6 U* [. @
verb 3
, z4 i0 e+ ~5 B——————————-
) H* T, @  n" p* i7 B把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
( K  C- b  K, }7 b#cd /etc/openvpn! K  F; O5 E6 _  i
#cp easy-rsa/keys/ca.crt .
( ], H( g5 J. Y4 X* x. ^#cp easy-rsa/keys/server.crt .
: L4 l: A+ M; [$ f# {, q& F#cp easy-rsa/keys/server.key .7 U( o9 i5 p4 @3 y+ G
#cp easy-rsa/keys/dh1024.pem ./ H  H* V% ^& q4 A% M9 y
#cp easy-rsa/keys/ta.key .
( A) ?& t8 A: ~$ U3 K#cp easy-rsa/keys/vpncrl.pem .
. r$ s) @: k* f* f' b创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn+ T  c" d7 q0 s0 _
然后运行:( l9 i1 x) u# S8 w- [
#chkconfig –add openvpn+ F6 n: `. ?- ?9 K
#chkconfig openvpn on
+ B: y- _' g7 ]( V' @$ \立即启动openenvpn
% U, J& E# A) o3 F/ _#/etc/init.d/openvpn start2 @$ c/ @3 |3 g. B: o8 ?. u

: D+ U+ C, l0 C3 D接下来配置客户端的配置文件client.conf:
* k3 [- n/ x) W/ ~Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key7 v9 l- `7 M8 q# o- l
———————————-: O. R/ a! V" Z2 j
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”/ d5 {; ^  d  o- s
client
# {7 F3 U8 ~/ M3 J, O3 C% T7 `' n' F6 M+ h+ _% @" w$ \3 X& \2 ]
#指定接口的类型,严格和Server端一致
1 W1 N+ }4 k1 z% L6 F& V5 Rdev tap/ ^* G7 h9 Q6 U/ v* ?2 q4 N( Z5 c
;dev tun
, B( t: B3 `+ u4 _1 w" m% l# H( w. R5 I, E1 b6 e, A/ K
# Windows needs the TAP-Win32 adapter name
; _, d5 t8 D9 N& m$ M! z" y5 X# from the Network Connections panel! N; D1 {- J5 [1 \0 T( k+ `) Q
# if you have more than one. On XP SP2,5 B- H9 n7 L: @5 H2 y! M& m
# you may need to disable the firewall% w2 j; N9 h' o) I; s/ m# |
# for the TAP adapter.
0 ]; m* m/ E- R# C0 _;dev-node MyTap
6 X" Y& A" K; ^& m! |
: C7 a3 X3 N/ q1 o3 z4 Y* r# 使用的协议,与Server严格一致9 O4 |7 t0 ^; A
;proto tcp
; V8 h  ]* H% Q. X4 oproto udp
3 Y, e$ `/ p! H$ F- a& ^8 W7 |" Z3 z) w3 [! I/ B* e: Q
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字* K0 A' s9 g2 o+ M
/ `2 B2 h0 Z0 [; c& y3 ~% g3 D
remote 61.1.1.2 11942 l4 B! ^% }' ~4 }! E2 y
;remote my-server-2 1194
6 ?, Q7 n- d! ^" ?/ L% n+ q
' R* E- l' ?  B7 y# 随机选择一个Server连接,否则按照顺序从上到下依次连接
1 W6 K/ ]; B: p% E3 q;remote-random3 `1 X: T7 ]& }9 p1 M

1 w  |- w; k+ n% T3 y7 H' s# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
  L: m' s" G/ o! n) V  N# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
% v5 y( N$ L$ W! X' `4 C8 B" `# 这样无需人为重新启动,即可重新接入VPN1 V! ]& p# D+ u& c4 s* M/ f
resolv-retry infinite1 u7 W: T9 U: ~7 N

/ y( w& V4 C; P+ T$ X! @0 Y# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要0 x+ f& [, q8 R- T
nobind3 x7 R1 s1 l. W+ @* }+ a
& N8 l6 R: e" Y
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作: Y3 X  ?. w- |0 {7 B
user nobody& |# ^$ y3 Y2 `# V, e7 |& Q
group nobody  H) g3 O; t% }3 r

( O! H7 U8 d. m/ z3 C1 {- Y#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
( K4 Q" {9 }6 b. `. Y, f#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是6 z& G- s& v! P; l% }# L  d# X! a
# push “route 192.168.0.0 255.255.255.0″8 z. ]5 c; U" h
route 192.168.0.0 255.255.0.0" y3 G8 r7 S0 N7 w
! M0 l7 ~3 [1 x2 X. _# s
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备/ ^# \+ v' }$ M. K& k
persist-key
# a0 S# A0 f- Y9 P: H/ p/ X1 Ipersist-tun
4 H& P( E/ @5 ]7 K  L7 F( I. o* ]4 O' v
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
. D& b2 w/ h' G2 \6 c( h. o# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
: t5 B; u, F: s0 C# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
  w% D% Z9 O# p;http-proxy-retry # retry on connection failures, l! b9 g5 a2 B) {7 t9 N1 ?' k
;http-proxy [proxy server] [proxy port #]
/ A" d) G5 S. O
$ I$ {% y$ ]( f4 b/ U# 对于无线设备使用VPN的配置,看看就明白了, K: a6 K; T* m  P' }+ g  K
# Wireless networks often produce a lot
% G1 G( ~1 @5 z1 H; ^! f# of duplicate packets. Set this flag8 X% @0 j% y. h2 H  p1 e
# to silence duplicate packet warnings.
9 W3 }: q8 @, x  i! b( K/ q;mute-replay-warnings
+ e: _4 {2 g" V: \. J
& M8 C* O% F" j) Y7 D! q# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件7 U1 R6 n( I2 C
ca ca.crt" ]; g9 t# F2 E# K" N" {
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。, [- H6 ?8 t# B7 y
cert elm.crt
  m: T6 w" E  I& u. Z+ }( {key elm.key
% b  v. S+ ?4 i( G2 {! l) y6 W1 ^3 n
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项0 \6 x5 [( I0 d) @$ {* o( z9 V3 v
# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
0 |1 g7 g0 H: R- D+ ]2 x. Z  a# 因为他们的CA里没有这个扩展% t, _7 v* o, i: Z! C
ns-cert-type server
  T- @/ _' x3 `, X1 X# h; U" q, \5 w- I* {
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
; A! j# m- r, e' q9 Rtls-auth ta.key 1; [) }7 g$ b8 K1 g0 e; r- N

  I6 }8 }5 ~. C" V1 R4 U# 压缩选项,和Server严格一致
) ~8 f! \: H2 y* ]; v, jcomp-lzo
: M$ ?7 F/ D6 S7 ~+ a3 q0 z
4 r" v6 |8 j( T! F9 I6 w# Set log file verbosity.( R' H  e# K# {2 Q6 f% x
verb 4
# y" c. H5 O5 K2 q" r; O! U
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-2-7 02:20 , Processed in 0.076329 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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