找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14390|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
8 ~* b. p3 @* f* ~—————————–
0 V# l% N/ u  z8 X3 B9 b3 a#申明本机使用的IP地址,也可以不说明
% r# Z0 w! T+ ^4 f% C" R; A;local a.b.c.d, K+ ^9 V: R$ Q4 {5 }; p; f
#申明使用的端口,默认1194
+ j3 |; Q* `8 }! p/ Q2 ~' _port 1194* G9 @7 |' p4 J, z1 {0 M( |- q
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
, }1 i" d5 q2 o#如果使用ipv6应改为proto tcp6或proto udp6  @  S& o6 ~( Q
;proto tcp 1 i$ o) u* _8 p% c0 P. q
proto udp( h! W8 ?  g& j
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。; r8 Y; A8 u' y4 H5 K1 d' I
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
: o2 J( q% J' h4 z% [1 N) `6 O, k) fdev tap
* K8 i& r) b3 I1 u$ ]2 W& ];dev tun
9 {  T6 r8 D" p( t#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
( v* t" J$ b7 a* s' dca ca.crt
4 P9 F; A5 j; r- D+ P#Server使用的证书文件
& g9 |- a; s# R/ o, P1 A$ g% u/ rcert server.crt
/ {8 ~1 ?: O; R( ?& E4 x#Server使用的证书对应的key,注意文件的权限,防止被盗, m8 l) j/ H; L. m: N5 a& k" Y
key server.key # This file should be kept secret
4 v, g/ `  f; h. M2 u#CRL文件的申明,被吊销的证书链,这些证书将无法登录
4 _: R# D1 m& D; t! t1 ?; Icrl-verify vpncrl.pem! {4 K# }; x) w* @, h9 h
#上面提到的生成的Diffie-Hellman文件$ [* D2 W. H5 o" ~+ Y
dh dh1024.pem, b' r( l( Y7 B" @( T6 r
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
; [1 j* j( X" I* h0 G* Z: l# N#这条命令等效于:0 F, \3 A% ]5 k- d/ m0 c
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入$ R0 q' x; R1 v6 q
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
1 E, \( j- w. k8 `/ A! N% [#3 V% F" O+ d/ B( {
# if dev tun: #如果使用tun设备,等效于以下配置6 I) C' v/ N1 P9 t, F4 C, S
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
8 f/ N7 W1 [! P$ j$ {# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址  \. Z4 r( A) V# C  Z
# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2; M3 q5 d6 Z/ N2 p7 C4 I
# if client-to-client: #如果使用client-to-client这个选项! M0 I# @* [0 h) l
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1  P' a1 k* \6 Q& L3 j8 u/ v
# else
' Z  r; K8 ]3 s) r6 z# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
& {% S, `' C! G- {#4 b: S. _* d' ^, Y
# if dev tap: #如果使用tap设备,则等效于以下命令- w2 s& @# w2 B6 Y0 {7 H
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址4 g* {  h) i2 D0 [
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码. B9 e0 J/ T9 _5 u, ?
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机+ w4 q$ r. A5 z& z
#6 O& n1 ~. x' e7 F
server 10.8.0.0 255.255.255.0 #等效于以上命令- C% W% x# w( s
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
" r4 h( M, h; w" G5 i+ O#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址3 M, \% \7 c) c0 l1 c4 m6 Q9 H6 [
ifconfig-pool-persist ipp.txt
+ ]0 B/ D$ ?+ i; g% u1 `#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用3 C1 ]) U& Q' S1 }3 D
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
5 X7 ^5 T2 |/ n  k& \# r* `#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
% X+ |. b& K; E;push “route 192.168.10.0 255.255.255.0″7 ?' P* E% C  i
;push “route 192.168.20.0 255.255.255.0″
+ ]3 e1 P. W) ]. r#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除. ^- {7 a: s" ^+ T8 w3 u
;route 10.9.0.0 255.255.255.2525 R( ?5 k6 c: u$ ?/ s8 t. e' z
#Run script or shell command cmd to validate client7 E2 M# p. X+ N
#virtual addresses or routes. 具体查看manual
( ]( l; W, y) z9 Z+ a7 F9 `;learn-address ./script
* d+ m  ]; R. r) x7 g0 s. _1 l#其他的一些需要PUSH给Client的选项: S$ F0 }0 O7 M: M9 X, N
#8 d3 @0 z) o5 `' E% f' D
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走% h2 B, t$ j: b& W7 s
;push “redirect-gateway”' F' D+ a: g5 p* y: j6 l; K; n  v  ]
#DHCP的一些选项,具体查看Manual. ]: Q% |, O0 I* T. t7 o1 Z# J
;push “dhcp-option DNS 10.8.0.1″) y3 z; l' J/ f5 Z9 F2 A
;push “dhcp-option WINS 10.8.0.1″
- A" d: K' d2 ]#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
4 b+ v. G9 j$ F, Q4 b* B; B#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率7 M' S9 q) O# o! D: `
client-to-client
: `  M$ i8 g# a( D8 F6 U' v#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA5 _  M/ [) U/ Z1 x( x3 v# r
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN4 W0 O9 D! S- d1 E' i6 E
;duplicate-cn2 i: y5 t5 ^$ ^
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效," o  E, @+ t8 O4 t5 y& G6 Y
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,3 p& J9 }  A8 \) {& p: b
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,7 I8 E% x2 W; K
#认为连接丢失,并重新启动VPN,重新连接3 `; P" ]3 |; Q: o! O: P
#(对于mode server模式下的openvpn不会重新连接)。
9 {5 }  F. B8 \" e( p$ S4 L: ekeepalive 10 120+ e- K3 c5 ~  i  |( `
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,7 c) |7 [% T9 E, W) a4 Q% S- w
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用16 w7 V* @1 N1 }' p
tls-auth ta.key 0 # This file is secret) H  W, Y9 P3 e
#对数据进行压缩,注意Server和Client一致
1 @& M$ J+ n4 O; jcomp-lzo
& q4 Z8 A3 i# }" g#定义最大连接数
* L! B2 E6 B( D5 _7 Z% j0 f;max-clients 100& `" `! j0 q' Y* f
#定义运行openvpn的用户
: F+ w. [$ E0 r& v$ c" Kuser nobody
: n9 w+ b; x# x0 B  j, B: g, Y; bgroup nobody
8 }: j7 J" c4 L) e#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys- ~8 |( l6 `7 I/ o/ z8 v/ W$ d
persist-key6 G) j( E7 e# f* e2 w4 u9 y9 g
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,0 S9 N7 J0 N$ T/ [# u3 M- \
#否则网络连接会先linkdown然后linkup
# O5 E2 F& f: D* Vpersist-tun5 b- t/ v. P) b% a
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作' D& J  u0 ?/ W& R
status openvpn-status.log
( E, ^6 T4 ]: ~  M2 O; K0 E#记录日志,每次重新启动openvpn后删除原有的log信息
" q0 J9 |3 M+ [; |8 c  T- Tlog /var/log/openvpn.log2 P) u% \0 e6 w/ |
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
$ o) s0 O" ?- V) Y; `; z# Y2 t;log-append openvpn.log. `+ l& [" K/ E: ?8 A0 s; K" y
#相当于debug level,具体查看manual
1 m* H2 w* D1 o& bverb 3
3 D; Z7 O) j  Y" ~——————————-) ^( `7 R( u9 M& ^  K* T( e
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:" O' Z2 m: J2 {4 a) _7 E
#cd /etc/openvpn4 e/ C* L. O+ t/ _5 q2 E# h
#cp easy-rsa/keys/ca.crt .
2 q5 ]2 }2 n3 e1 c" i8 U0 `#cp easy-rsa/keys/server.crt .8 @2 ?. Q" v+ m4 F0 P2 y
#cp easy-rsa/keys/server.key .* Z; J1 y) o6 y) g7 T& \9 s0 o* _
#cp easy-rsa/keys/dh1024.pem .% [9 A! z2 m* a" ?( r1 {
#cp easy-rsa/keys/ta.key .
, u2 j' n% C# l. Z1 [. K#cp easy-rsa/keys/vpncrl.pem .
% ?2 ^* U7 V3 j8 n创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn* v  F4 J4 Q. d$ R% `5 a( ]  k
然后运行:
1 [/ w' K& L' i. W4 b& @#chkconfig –add openvpn9 o% P% x6 y, ?4 R+ r7 y8 v
#chkconfig openvpn on
( e2 E: G  ?/ ^* h" g" j8 I& I8 v立即启动openenvpn) C+ |. s. Y) m  w; I4 O
#/etc/init.d/openvpn start
+ }6 L( w/ u: u; T
9 M3 ]3 D. p, t- u接下来配置客户端的配置文件client.conf:7 s$ `& }) o- V4 L6 D
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key, }- J% l" X* K: W* f$ _4 C
———————————-
3 J! O" F( Q. w# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”; `$ W) L/ ?; Q% q
client: Q1 r# Y4 F0 b  S; o& ?

0 U, V0 D, Q' L8 i. r6 j#指定接口的类型,严格和Server端一致% Z# L% A; L8 z! }
dev tap7 j& [- M' {2 y
;dev tun1 ~+ M  i/ a; N6 h

5 ~/ C2 \0 G) \9 z! x# Windows needs the TAP-Win32 adapter name4 J) ]- |3 E: Y7 T- }: l
# from the Network Connections panel* u% t# R+ {/ F' Q" y) r3 l
# if you have more than one. On XP SP2,( Q4 [- J" z) q" ]& c. S
# you may need to disable the firewall
0 d$ F4 S+ g$ ~7 B$ m6 e# for the TAP adapter.
/ i' _9 [5 A! Y4 R: H; o8 l;dev-node MyTap
. G0 Y& ]& z* |# w% }) j& |! W) `: s% P9 V
# 使用的协议,与Server严格一致
( {1 q/ G) E  ?: C  u. @;proto tcp
( G0 ~* T& J5 M9 \( U% Z  F1 Z1 B( fproto udp& }& i8 y- I6 t" R- R

3 T" t: N0 O6 z9 y#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字5 K1 d% l# G4 d, ?3 B; R  E
8 y4 t/ D/ p) a/ r  |8 W
remote 61.1.1.2 11948 i0 ?& E9 y% m3 M9 h! @
;remote my-server-2 1194! ~% P5 w$ Z3 Q; j0 F0 t5 b( ^' S

. |* W, O- W( V4 _: d1 n. f# 随机选择一个Server连接,否则按照顺序从上到下依次连接4 Y1 G7 e) N4 t7 P" m; t) ~
;remote-random  ]2 _! \( a6 M1 I6 G1 O
; U+ w! B( p5 @. k: B
# 始终重新解析Server的IP地址(如果remote后面跟的是域名),) D6 {" i, Z% {1 E* K; T5 O
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址. x: X# x: K' J& K  R4 Y
# 这样无需人为重新启动,即可重新接入VPN3 C' c8 }7 {" d7 i) l5 G/ x$ j
resolv-retry infinite2 w# m4 E7 \+ R8 ]

# n% H2 [, q% ^0 E; b# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
0 Y+ T. G6 H9 p' P1 U, w$ F8 knobind
: P# X9 @% U3 o7 |0 j" c9 i" b8 }) N6 K4 v
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
& h2 ~& ]9 [& r! @user nobody
5 T" E- e2 t* @; Rgroup nobody
  F! C, b9 I/ K/ E  W. X) d5 C5 _
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
/ z! `8 |/ R- N8 H4 q  k  Q#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
! r. L2 s7 J0 K& l# push “route 192.168.0.0 255.255.255.0″! Q) T: l& C) N" f& z
route 192.168.0.0 255.255.0.0
8 U: W0 I9 Y. X
  n  i8 O5 S3 }  f5 U& j0 a, u( C( ?# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
* P& C5 N7 S- y: j$ Xpersist-key4 w; k4 Q) G9 x( R% H
persist-tun+ ~( N+ @$ Q# j% S) ], d) S9 I
( w2 ?7 W8 H5 P% ]5 {& g8 z% R
# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面; e6 |) u; Q' M. _) r% F  f6 E5 r; F. ^
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
! v+ q) a% _" K0 t# |- L# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
7 K$ z7 O  {) H1 g' {/ \;http-proxy-retry # retry on connection failures
$ ~! j; m+ O9 C( U;http-proxy [proxy server] [proxy port #]( k8 k: v. {% I; ^  |  K% H
# A' r- x) {* e9 q, o( h2 n3 f
# 对于无线设备使用VPN的配置,看看就明白了0 a( J' P& N/ t' k3 ]4 V
# Wireless networks often produce a lot
4 G6 I/ y9 S, P# of duplicate packets. Set this flag) C7 a( e0 W; h" W9 H
# to silence duplicate packet warnings.
% u4 k  M$ `" D( `6 s' V;mute-replay-warnings
  L3 _/ s* N/ z4 ^: D2 i
# n; K' \" g: n' M% ^9 U6 u# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
  s! D6 r* _' E6 V9 Nca ca.crt
  k' k5 [2 L7 ]# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
. Z" r3 J! k& w- }/ x; R' y' Dcert elm.crt
) Z: M% t  d% r. I: A1 E8 R8 Okey elm.key+ G) A. w2 v) ^' z: x6 |9 }
/ c' `6 J, y/ _! l% n  w
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
- w+ s$ E- o: q/ D" K' O+ A# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server, H# p" T2 |' u) {& A% l3 J
# 因为他们的CA里没有这个扩展/ j8 b9 h1 d. _+ \
ns-cert-type server* i/ Q6 `5 e4 v
: x" Q" Y( y: G% N# j+ S, U
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1- W6 P6 F3 @; R* ^- S% B* d
tls-auth ta.key 1, d  E% q9 U9 I% z' [2 {+ J

3 n/ V$ w( {' L; w& ?# 压缩选项,和Server严格一致& L  L1 N0 r- u7 X
comp-lzo
2 A% C4 R: i$ n' }" S! ^8 k; P! i" m
# Set log file verbosity.& U6 Z; j, B; r: [4 E9 T) @
verb 4
% \& R3 p6 W5 H; T& c
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-3-8 13:23 , Processed in 0.080072 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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