找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13942|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf  `' R4 R! M5 L0 d
—————————–
6 z8 s0 @) W! |3 \* y- A  V#申明本机使用的IP地址,也可以不说明2 B( D9 p0 {( j! r2 R
;local a.b.c.d7 e2 M% `; ?5 N; a/ z
#申明使用的端口,默认1194
! V3 P3 n; a0 }port 11943 ^* A7 t* m: T; [, V
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议8 ?/ a' o3 n4 u# }& N- l1 O  u
#如果使用ipv6应改为proto tcp6或proto udp6
; e: `! @" w8 O. k; Z! T( a  @;proto tcp 6 Z4 _8 t, z4 ^% _
proto udp- j. h) Y. U' N7 D+ o5 |3 ?/ H8 t
#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。
. S2 T' G) |5 r3 r; q/ y; v- J#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备% Z7 Q: H; c) [8 d
dev tap* S2 E1 }! X: ~, ^3 @3 g) B
;dev tun4 j2 Q: i# U' a* U& a) v+ c
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
- H4 p; K; F% u7 R! s8 Rca ca.crt/ a& v" ^8 G7 E4 m
#Server使用的证书文件
" Z! a( D6 f& j+ Ucert server.crt6 e/ Q6 O! v# H. Z
#Server使用的证书对应的key,注意文件的权限,防止被盗
. K2 n* ~- x* z- W$ Vkey server.key # This file should be kept secret7 Q2 o9 |/ h, j; R- c
#CRL文件的申明,被吊销的证书链,这些证书将无法登录% ]! u- O' t  Y* C; V, j: H
crl-verify vpncrl.pem; x; E, n. [9 g/ f
#上面提到的生成的Diffie-Hellman文件% z. a( [8 a  N) ]8 L8 x6 ?7 t
dh dh1024.pem6 g0 I+ j1 p7 {6 v0 E! C- h
#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由4 O/ c0 n5 [/ J- n. {! \3 C
#这条命令等效于:
. b. ?  D) _. i# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入, y( @3 `. z7 p1 ?4 f
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client! l* [' d. h; D# r# u, w7 r5 B# _
#9 G; l+ ]" ]2 E* j
# if dev tun: #如果使用tun设备,等效于以下配置
4 Z% q/ H& R7 b! y8 j7 e# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
4 ^3 M# S- g) v+ E# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
6 ]7 q7 g+ q" b5 D0 B) }% q# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2/ G/ y1 W, \9 y6 W1 s: B
# if client-to-client: #如果使用client-to-client这个选项& K& b, f* x& \0 B/ {3 f
# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
( o$ v  Z) g7 I6 ?! [9 ~# else
9 u" z: p  n, E- k* f$ Z# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
" ]8 z" x( v7 L# K#
- \& i) E- J( u! c# if dev tap: #如果使用tap设备,则等效于以下命令4 m# T; r0 a! `* k! O6 x. v
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址$ t& M  h2 o) R: T3 V$ I# ~; j
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码! I! O8 \4 B! c# h3 [, l. W# X3 S
# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机# z, |# h1 \8 t
#5 x# Z/ t) r# K! m0 p
server 10.8.0.0 255.255.255.0 #等效于以上命令
! a5 C# z/ R/ p8 m2 h#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,+ ^8 g6 h; P) v/ t$ U
#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址
  A- |' t5 @1 V! f4 ]% Jifconfig-pool-persist ipp.txt. |2 _9 Q- ?, P1 E) f+ p, o
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用2 P9 D" h  L  C( G) M- c  x- E2 A; ^8 a- L7 a
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
' f8 _( q( K; p4 v* b0 F#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
  A* M# e# R; d# N; k;push “route 192.168.10.0 255.255.255.0″- d# `3 d$ h# n/ }0 B: j% n
;push “route 192.168.20.0 255.255.255.0″! o, b6 ?2 z( i+ q4 f* m2 j
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
) B% f: \, z4 `# S3 D6 }* e8 \;route 10.9.0.0 255.255.255.252
3 i& e% L3 i. }4 ^) V1 Z#Run script or shell command cmd to validate client
* b& X0 x8 \4 Y; n#virtual addresses or routes. 具体查看manual* F6 w4 S: g  C/ |; h
;learn-address ./script% `( d) {, f& s5 P5 |" S- o
#其他的一些需要PUSH给Client的选项
8 [8 Q8 ?( v9 a8 x( }; i0 M) I#
3 ~8 N! j* N% T3 g! v- |#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走
, W' i8 O+ F! e) e;push “redirect-gateway”, `, f3 y. B7 O% T! ?
#DHCP的一些选项,具体查看Manual3 }1 V0 P) Z3 q) C: [
;push “dhcp-option DNS 10.8.0.1″2 L* u5 U5 h! T
;push “dhcp-option WINS 10.8.0.1″
7 \7 J" a4 e' G( B3 u#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
7 ?. a# E  G1 D/ t* o" ]* \#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率
7 k9 Y8 @, A/ w7 C) W. `client-to-client, g, G0 W' t. k4 R0 |7 Z: M/ A
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA
5 S: W- P8 l8 `) Z' J" w+ B0 |3 o#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN
& C7 B+ u* C: x+ a4 {;duplicate-cn3 x4 C  G  W/ _
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,
! p. e1 U! u4 x: x6 f9 v; W#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,1 m- ^9 h# C( j9 g  Z
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,3 R- F  K( W0 @0 j$ j
#认为连接丢失,并重新启动VPN,重新连接, D! a4 M6 ^1 d
#(对于mode server模式下的openvpn不会重新连接)。
7 J5 e4 ~5 \; |4 [( ~6 s5 v. _keepalive 10 120
* J2 j5 m! K7 e0 ]) D7 g#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,
3 k$ D' a5 ^' {7 ?! O#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1" G3 F+ Z: p8 u8 p
tls-auth ta.key 0 # This file is secret
, k% p& ]( ^. B#对数据进行压缩,注意Server和Client一致5 ?* z8 }( K, y" \6 \6 P9 o
comp-lzo+ Y2 C$ h4 G- k9 z- e0 i$ c
#定义最大连接数3 o5 l" y; \! @, ^( J
;max-clients 1004 A* @+ }1 x3 v$ N
#定义运行openvpn的用户
9 ?+ u7 j$ ~1 @/ t3 D' nuser nobody1 m5 P; j( u- r6 {) w
group nobody
- F/ j( V8 K7 O$ a0 F! {) \" x: w#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys  k2 F$ u4 T! P- @  e
persist-key9 _. u2 o, F  f& q
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,
6 Y( C4 H  h) h/ i; V#否则网络连接会先linkdown然后linkup
$ S" U0 K- q7 y5 [persist-tun& L9 _+ q+ K: U0 u8 }
#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作% u$ b3 r' ~$ x
status openvpn-status.log; i, B" \8 k  }  ~% A: D: }
#记录日志,每次重新启动openvpn后删除原有的log信息
1 h( i: @1 @) t8 Z, E+ Olog /var/log/openvpn.log
- C8 M/ S; L# R4 c#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后4 o/ G0 ~; p& C+ z2 I0 }9 I
;log-append openvpn.log
9 ^& ~; X; L7 F3 R#相当于debug level,具体查看manual
% ~0 c' p% ]; Z: t3 o% Sverb 3
6 L. ~8 p( O# i7 a6 e——————————-
$ z; i! v) Y1 m0 D9 F0 T7 p) ~把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
) u, D9 h! x! w7 d4 j' h#cd /etc/openvpn
( c/ Z/ R5 X7 B" P" s#cp easy-rsa/keys/ca.crt .
/ H% o& \* [1 C% h& `8 [. i) ^#cp easy-rsa/keys/server.crt .5 _% }! l  a, d. F5 j
#cp easy-rsa/keys/server.key .
: g  P( {! e5 \. x: `6 f#cp easy-rsa/keys/dh1024.pem .
9 C' ?6 |" o4 e1 B- z- [3 h$ d#cp easy-rsa/keys/ta.key .
$ @, c& g" P9 C% B' l/ A* p# @#cp easy-rsa/keys/vpncrl.pem .8 ]: ~% M6 n$ \2 t' R1 e/ j0 X
创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn, g' L7 ]1 |) H, @7 x
然后运行:
' z( O1 ^# H! ~1 a# V3 J#chkconfig –add openvpn
8 i. f( p: B" p#chkconfig openvpn on6 |- [& W! e* t$ S- q0 ?8 s
立即启动openenvpn1 T- O( q& g! [5 ~- W/ M) L
#/etc/init.d/openvpn start% O! [4 s$ u* p! O% I" m  [% o9 U

, c/ e, s+ m# C3 u接下来配置客户端的配置文件client.conf:" [% c- z1 h8 u' \  t1 H
Linux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
8 ?; h: `2 Y% b% G! c———————————-
$ y7 I, Y& d) r# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”# A, p2 ]  j" o9 C, {& s2 {
client
3 s- q8 |4 g; k1 |/ w5 i/ v. g, u; k6 d6 n; V, s$ O4 g
#指定接口的类型,严格和Server端一致. x, Z5 c; L: e0 k+ o. ?
dev tap& |5 f) W- i! Z, h+ ~& b  K
;dev tun
$ W& \. {% m; I5 U# O% }" v5 j4 @, @2 ~' d* f' p& t* n
# Windows needs the TAP-Win32 adapter name2 u( ?! e5 r1 }/ {* z* ?6 z, g
# from the Network Connections panel- g. e" |  j& ^& L
# if you have more than one. On XP SP2,1 _3 {/ a- H* q3 j( T
# you may need to disable the firewall/ Y, c; t# ^7 F5 F2 _. V5 W
# for the TAP adapter.7 R6 L" f3 [3 s+ S" z
;dev-node MyTap
* O: t/ M7 D6 \; b) O* G6 P$ l/ [6 ?  i4 |% T' i
# 使用的协议,与Server严格一致7 e2 S5 t+ G, d; I" Y8 v: p
;proto tcp
/ W8 D: U, c3 d2 Nproto udp
& w9 ^8 X) L2 C9 @
6 Q1 Q; {* j! ?) E* j/ Z' b. C#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
" Q6 Y3 s6 a4 ]2 c3 P( E: h% _+ }! {. `5 |! \$ y. |8 C
remote 61.1.1.2 11945 o0 E0 P2 `6 i' s, W. I
;remote my-server-2 1194# y6 G  D- U. w# k

% l8 Y) k- b6 C" ?% i& A# 随机选择一个Server连接,否则按照顺序从上到下依次连接
. T: {; }) {1 e: u, Q;remote-random
2 t6 H5 |6 d7 A+ h) w
  H! ?* Z: Q" k" J2 p# r# 始终重新解析Server的IP地址(如果remote后面跟的是域名),: n, C  l% O1 [% w& a3 \, Z
# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
/ v$ I1 |% u2 m* K# 这样无需人为重新启动,即可重新接入VPN; q" g5 M! D4 V4 e# T* P
resolv-retry infinite, p# Z' l/ x/ n! S1 I- O5 Z
1 B3 I7 |/ X) K+ B; R
# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要
' `/ K& d- d2 y' I9 t: |! Dnobind
. l# x$ L4 H# q# V4 y8 Y1 q, B* G2 H' ]
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作' e4 k7 P( c# R3 h5 T, U. D% J
user nobody
7 F$ d+ A6 j' g/ e/ Mgroup nobody
( N' f1 _/ n# ~: q  L3 e) W! p# ?# H
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
+ [6 K7 `& R: g6 S7 [; }) Y  G#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
: D7 F- y' D, k: U( P% a0 d; X( ]; p# push “route 192.168.0.0 255.255.255.0″
. K1 y. h4 E( ?8 U. M2 w  `3 Xroute 192.168.0.0 255.255.0.0: K0 O& H0 ^* V% H8 r  K

# l' C- x: ~2 p0 l3 R! c# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备
5 O) s0 a) P# D5 T5 u* a  n% x* vpersist-key9 H! q( z/ y# s0 s3 I& x5 K
persist-tun1 i# W( g/ O  b6 d- V: d5 p5 k

0 K/ k) g, Z: v8 W# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
. X) ]7 a6 h( ~# W, q# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]
/ T$ D% L  A2 H. B7 D# l# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
6 F! i# R; F* _% [. `# C8 C;http-proxy-retry # retry on connection failures
2 J0 q( c; B2 s6 N/ m6 m7 A;http-proxy [proxy server] [proxy port #]4 O/ ^5 v0 u$ p

% L4 I+ L2 C# E  y# 对于无线设备使用VPN的配置,看看就明白了
/ j" _$ B4 Q. D: y1 p* y7 `# Wireless networks often produce a lot# a% n: g( c6 z5 u8 k' y
# of duplicate packets. Set this flag9 e3 I0 N! o9 `) L% D
# to silence duplicate packet warnings.: N/ w. L. V' I6 W! t. {0 i
;mute-replay-warnings2 Y6 M0 G+ }* F  B

/ l- {. ^0 _* E# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
  G9 P# {( U1 F( y( Dca ca.crt& G* `' o# T" |$ i" ~. S8 ^1 J- E
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。
% ^8 @& U) z: c+ S( @1 H! rcert elm.crt+ q% q+ o+ a+ _! l% m9 ^7 Z
key elm.key) K' T2 e3 K, c! r% Q- `4 }0 ?9 V
. j, k" W6 G  T
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
. t# O% V& F2 T2 h# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
* r; f- r+ t8 a8 F4 l# 因为他们的CA里没有这个扩展
" E, B9 a6 [& Ins-cert-type server5 B" m6 V5 t  j
/ r1 l6 a9 g" Z0 o2 g( a
# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1
- G- G  F9 J* r4 x/ O# s4 h8 ptls-auth ta.key 1
# G2 o$ X# o3 J6 d* j- S. r
5 [, m) i8 w, `4 I, P3 _/ R# 压缩选项,和Server严格一致, A0 D- Q# |8 }; |. h" q4 E
comp-lzo6 \, W! Y3 f2 g- Q9 @" f
, D( @7 Z2 X2 g3 A( M6 h7 i+ l$ b
# Set log file verbosity.4 R  T- K6 W. L
verb 4
: Y+ I# g. h1 w* v4 z, f+ F, h1 }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-10 14:30 , Processed in 0.045986 second(s), 24 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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