找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12327|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf
2 e. H0 p% p& d—————————–
7 k8 t9 ?5 ^9 K- i9 s- x#申明本机使用的IP地址,也可以不说明
$ E( I: k5 s$ U/ y2 T;local a.b.c.d  o$ |- z# p( Q/ o8 V5 B
#申明使用的端口,默认1194& v2 r% B/ y; X/ m0 b4 n: N, S
port 1194! e$ [! {3 f: w) f7 P
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议
* P  E4 s! _  n' v#如果使用ipv6应改为proto tcp6或proto udp6
  M; W7 t; Q! v1 |! Q4 \! W;proto tcp
& P6 Y0 [# ~5 [* Qproto udp
0 @- [5 y" x5 J& q- u/ U#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。. D9 m8 T1 e# e2 I
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
0 R# W2 K* `% ddev tap( n% e$ c* g5 ]. y
;dev tun9 s' W+ F& b+ Y, N) k
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
5 s# m) o1 M. W: z2 f6 |ca ca.crt
/ U+ \6 K3 p$ j: \#Server使用的证书文件5 M& J. d4 i1 {: w3 c# s
cert server.crt2 h: J1 ]+ _0 o/ O
#Server使用的证书对应的key,注意文件的权限,防止被盗# t) `3 }! m/ H3 {
key server.key # This file should be kept secret5 a9 c; }* v! V! Y9 s  z- T
#CRL文件的申明,被吊销的证书链,这些证书将无法登录7 J4 P5 G/ t& i( r! i, d  F
crl-verify vpncrl.pem& D( F- G5 l  w
#上面提到的生成的Diffie-Hellman文件
' W0 `( T) N9 p4 w9 ]dh dh1024.pem
) z6 m: M- p0 z4 I9 @#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由( _# m. k; a3 n8 h
#这条命令等效于:
. f: p, Z/ G9 V9 [9 @, r# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入2 N7 E1 T9 r( v. ]
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
: ?. n8 G/ v  G) U; h, g: J#
$ T5 _- B: t$ c1 R0 t4 F# if dev tun: #如果使用tun设备,等效于以下配置1 k! x% M' h, J, Y+ l
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址
0 C3 A% l  I, P/ a. ^' H$ Y# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
: A, f: }/ o' Z6 N3 o$ I& e# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.24 G7 }7 @; S) S3 X, T6 M
# if client-to-client: #如果使用client-to-client这个选项
0 u' u# d5 O$ r, s* @) l6 M. X# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1
" y1 ~* O0 |) L9 ^; T; N# else
) d4 [* \/ ]- Y, p# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.1
" Q$ l+ e2 [" ?/ N- v: A#
, V* F5 W9 Y4 y" k1 B1 a; \# if dev tap: #如果使用tap设备,则等效于以下命令
  d% A2 _) d& S: ^# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址* k. Q, R8 C- D2 F+ S; v2 k: o* ^$ L
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
# N" d! m, n# m3 N- X% }" P# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机& V8 W! K/ i9 x3 D" Q+ x0 M
#
# g* o. _" i% T8 M, T0 Fserver 10.8.0.0 255.255.255.0 #等效于以上命令0 g6 d: Z( O) H  U! f2 e! ]0 W
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
8 W4 ~+ c3 m/ L* }#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址7 Z" H0 n# i7 b
ifconfig-pool-persist ipp.txt$ w0 Y( u$ H& M3 I1 v+ g3 }4 F
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用  E  G4 ~8 B) l* d0 B, S/ o9 j
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
% y3 m5 w# d, W  C#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用
: W5 e) a0 N4 A2 ~;push “route 192.168.10.0 255.255.255.0″
* z  s3 R1 R- F! M4 ^: G) X;push “route 192.168.20.0 255.255.255.0″
- T( [( r. D& R, C6 R#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除+ @5 c* u  l' A% M7 s: Y9 c
;route 10.9.0.0 255.255.255.252
1 r4 _0 |, x8 D( D$ n8 T1 F#Run script or shell command cmd to validate client2 |& U6 H  R( z$ d0 A8 g$ n: y# @
#virtual addresses or routes. 具体查看manual( ?4 W: ]. Q+ q4 ]3 U3 K7 k
;learn-address ./script: e7 Q/ r7 q" O( @0 Q+ r
#其他的一些需要PUSH给Client的选项
6 Z& H( Y- o/ B+ t3 c#/ J1 w) w) w* W  d
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走$ j7 M# a5 M, C
;push “redirect-gateway”
7 }5 B  I: h  q+ s! I% g#DHCP的一些选项,具体查看Manual
+ v& s- q6 h2 g8 `4 ?% M% k;push “dhcp-option DNS 10.8.0.1″" H" C& d& Z8 z4 [
;push “dhcp-option WINS 10.8.0.1″
1 D9 ~9 f+ R6 P0 j#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,& O* ]: g! \0 w0 I
#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率/ N/ B+ y! A5 Q8 y! ~; o
client-to-client, a0 u1 \2 I# c8 m+ T
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA2 ~- ^' m& _9 n
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN9 w* Z, m  p$ v! I7 F1 X
;duplicate-cn1 G' a8 w6 u/ W) h6 Y/ _4 s
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,% M  D$ z0 _$ T3 B! c* D
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,
; z* a; S7 i5 T) u#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,
( y+ x- g: ~. R  V; ^0 O$ }, D9 ^#认为连接丢失,并重新启动VPN,重新连接
1 D; X% ^5 H$ s3 [#(对于mode server模式下的openvpn不会重新连接)。3 s  p/ ^- Z4 ^2 ]% A
keepalive 10 120& k/ d- c' A9 D/ T
#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,& y3 l- g, }* `9 R
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1
: L7 y+ @7 H8 h( G2 q# rtls-auth ta.key 0 # This file is secret
# C- f3 [& Y" \9 G  T#对数据进行压缩,注意Server和Client一致8 o* P2 ~5 s! n$ e( ^* V, ^
comp-lzo5 O, ^( P* W# H! f
#定义最大连接数
0 J5 a. y# n. Q! S3 a" H;max-clients 100
8 B9 ?) h! H9 \8 C3 c& |#定义运行openvpn的用户
5 p0 o; u- j! @4 a% ruser nobody
2 H2 x, @9 u4 Q& @# p% ~: ^group nobody0 s7 P; Z* }+ l
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
, a" o8 w$ \0 R6 \! {persist-key- L$ ]* L6 b* M3 s, H, [$ y
#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,9 Q5 y- e& L* I
#否则网络连接会先linkdown然后linkup- ?# Y( m5 z- e- @( W8 L  [% f
persist-tun
3 n* N* q/ T5 b  k$ q#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作
" e9 i6 {; ~3 u+ \. m" Wstatus openvpn-status.log* |$ p- g" d0 O; P. E
#记录日志,每次重新启动openvpn后删除原有的log信息
- J. D7 s# D9 Slog /var/log/openvpn.log  h( ^" }$ g+ r" z
#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
" A6 o4 l9 ?# i, p;log-append openvpn.log) s5 c% T* C  t  b" K8 x' y
#相当于debug level,具体查看manual( f) D3 [" D9 W* U! L( i! s. e
verb 3
9 K. s, h8 J4 R5 m+ {; |——————————-4 H5 J, f& Q5 d9 ]% {
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
0 s5 a* S! ^& m( r. i( R4 X. m9 y#cd /etc/openvpn1 z; ]# K% ^/ G- z5 U' c
#cp easy-rsa/keys/ca.crt .
( D- x  U  h4 X#cp easy-rsa/keys/server.crt .! f2 O6 u9 I( z
#cp easy-rsa/keys/server.key .& J7 I! ~4 A$ l& |8 H$ d' P
#cp easy-rsa/keys/dh1024.pem .
3 `6 t4 W4 `+ ^$ r#cp easy-rsa/keys/ta.key .$ o4 k! H& d. W) g* q
#cp easy-rsa/keys/vpncrl.pem .
2 C# H& `- t+ V! l创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn5 o4 u3 ]4 C- `7 g& z6 N; C; j/ u
然后运行:- O1 a! f/ a. H- _. U
#chkconfig –add openvpn
+ U) M8 m) U$ P) H#chkconfig openvpn on
1 N3 m  p$ o0 K立即启动openenvpn
: T1 o' e+ n% O, C9 A#/etc/init.d/openvpn start$ j1 Z! y1 h' A+ E( i
7 i. s; z! o: B6 G( r) r% U  x
接下来配置客户端的配置文件client.conf:
9 T. i4 j7 I5 X* p/ U/ TLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key
# c' s7 b) a3 R; K5 l4 ]* T———————————-7 e2 m5 K/ s% j% r1 w: t5 J9 Z
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”
2 z$ c' i2 W+ h  r8 a. fclient0 }, {8 W* \6 @7 D6 [
& E* e, H+ g) q& {# D1 x
#指定接口的类型,严格和Server端一致
1 S6 E4 j2 p& M2 J# f  A8 Kdev tap
; T* ]$ C& M1 B+ S;dev tun
* a/ k% S7 B9 l
" F& o% n) T2 ]8 e% r! I# Windows needs the TAP-Win32 adapter name
. L- M* P% Y5 f% v6 R: ]# from the Network Connections panel
; {$ I' r( Z2 K4 w  N) k# if you have more than one. On XP SP2,7 n- q, T0 s% K; {
# you may need to disable the firewall
& @& ~4 C7 y" }# for the TAP adapter.
" l6 }2 s% T  T0 {- i" \;dev-node MyTap# h! u4 G  i0 E: ^2 p. w# r
. c, Q, f8 R6 U9 ]8 P; @+ [
# 使用的协议,与Server严格一致: k8 a! F. ?* f9 n- b2 l: l
;proto tcp
4 A! B. d/ i' f* I! n+ ^" D& Kproto udp  q% S, ?  k3 y9 \

. a# `. E1 d: f#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字% V2 I+ w$ H9 m  y

- u; C3 e0 H5 o6 [7 L" o* R1 Rremote 61.1.1.2 1194
4 T5 ^4 k! E7 R+ S8 b;remote my-server-2 1194
! `2 R! e! a5 v
, v* c: m" W5 u9 m' o0 b* B# 随机选择一个Server连接,否则按照顺序从上到下依次连接
/ Q# l4 A: Q: X/ [;remote-random" P9 c) }7 t1 s8 x

6 F7 P2 H) B/ u4 n- f1 S% E! }8 |# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
) F% y' j9 K5 W; Y# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址
& P& H. k. y; D- y) ]+ Z1 }* _# 这样无需人为重新启动,即可重新接入VPN
0 b6 ]; C+ H. H3 wresolv-retry infinite6 e( |8 o3 Q! l7 s

, G$ T  @+ E% S# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要1 B9 G* r6 h# V" M
nobind
7 ^% z( S4 W% b; ^3 N# J& C2 Q
* X- V- l' K# G# P7 P# G( v# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作$ Q  C+ I$ I2 B5 o1 C2 E8 h' O0 p: o* `
user nobody
" i+ N% P) R  R' G( [( ^* r! ]1 lgroup nobody
  y* [2 ]1 Q- \1 D, x8 H6 Z0 s0 ~. [- W; E1 z  l8 E4 \) a
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去/ o! ?' K+ n9 k& w
#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是
4 ]3 u* ~, Q" m. F: m6 G# push “route 192.168.0.0 255.255.255.0″+ i, |$ p  I% V$ s3 W5 g
route 192.168.0.0 255.255.0.0
, }! Z1 {5 H( P# g  n7 r2 Y9 b! H2 V3 i! V5 h; w: R
# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备8 j9 ^3 J+ h, ~
persist-key! X/ `7 S, {+ j+ }
persist-tun7 W3 V* D1 i. t8 v7 T4 b7 R4 Z& [

. H: l% r) B9 c1 z2 V# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面
  ~% m5 U7 Z5 d% y" i# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]9 f1 F9 \5 ~& r2 l% s. c
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual
0 }8 V& k+ j8 ^" D3 h6 b;http-proxy-retry # retry on connection failures
+ k/ o2 D  M+ _0 O;http-proxy [proxy server] [proxy port #]9 H+ ^% S$ D8 {, V" X" J

! U1 ?$ B- I, ]# 对于无线设备使用VPN的配置,看看就明白了! l* J  Z( C+ o5 ^. c) R) g
# Wireless networks often produce a lot
, q$ B* j3 S5 }5 ]' B- n" m# of duplicate packets. Set this flag
1 e) y0 n8 J6 v# to silence duplicate packet warnings.9 ~' u8 D$ |1 h, i2 Q; a$ T" s
;mute-replay-warnings! S7 A2 R8 [, o1 B9 t
+ [' U7 S1 S9 D  h7 n
# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件
( q# x( h+ C" d5 Q9 ~  j- [% qca ca.crt+ x# N0 `$ ~8 ^
# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。. Z7 ~* J1 z) _/ f/ a& o8 t
cert elm.crt) w! Y& K" P+ U
key elm.key/ ]: n. x: t1 h$ @7 |5 h) k9 L8 @3 I- |

' ~# y7 U+ A# H, `# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
* u4 q9 v& i( o- m+ O( _# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server
6 ^4 h6 b; @* k5 ~# 因为他们的CA里没有这个扩展
% E& e3 r$ t& [0 Y3 p2 G& U7 y- a/ A# Zns-cert-type server4 g: F& v, H3 f

# x: S( r: Q7 n% {4 q( ]6 G' B# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1+ h, r; U3 A) ?$ R- d7 Z( f
tls-auth ta.key 1# A2 j, m+ k( }, |2 D
9 G/ a# B  J2 b5 @- S
# 压缩选项,和Server严格一致
$ a. M/ M4 J8 E; C9 Y& {# Qcomp-lzo! R  g0 U- x4 U# x+ ]! x- y8 p* C
+ d5 u6 n5 E$ `  @( K2 q
# Set log file verbosity.3 R9 M" C+ C# Z. z
verb 4 * _# E; I' F$ j
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-7 13:37 , Processed in 0.105232 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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