找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 16198|回复: 0

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

[复制链接]
发表于 2015-10-25 10:02:35 | 显示全部楼层 |阅读模式
Server使用的配置文件server.conf) i: }" c: m: L: V7 x1 _% e
—————————–
  E! }! Z, t2 [5 \% e( I) B- ?#申明本机使用的IP地址,也可以不说明
2 ?& X8 z1 @8 p0 N+ m5 l: |0 F;local a.b.c.d
) `9 r+ S- ]6 V" P5 j7 K) ]#申明使用的端口,默认1194
) u9 }! z  q9 f; ^0 n& |  i) L, jport 11946 n- J. @: p0 _+ n/ ~5 C
#申明使用的协议,默认使用UDP,如果使用HTTP proxy,必须使用TCP协议6 ~1 v: m) }& s
#如果使用ipv6应改为proto tcp6或proto udp6
$ V, F0 a  [) p: f4 j  f( t+ F;proto tcp
( `0 A" I. U9 i. U7 l8 Xproto udp
2 o0 T% S& M! }% `( z+ }8 P#申明使用的设备可选tap和tun,tap是二层设备,支持链路层协议。% T" B' H5 u" i( c+ h" O( y5 P
#tun是ip层的点对点协议,限制稍微多一些,本人习惯使用TAP设备
$ p' ]1 U0 M- D- N$ P" jdev tap
# ?2 a! I! b$ a;dev tun6 b5 I1 _- t: E3 W* R! N
#OpenVPN使用的ROOT CA,使用build-ca生成的,用于验证客户是证书是否合法
* u2 ]: `" D6 Rca ca.crt
0 l" O& _! V' a#Server使用的证书文件
" G- Z! {, Q9 \5 L8 o! X8 b! ?cert server.crt
8 q" `& a/ }9 a2 \#Server使用的证书对应的key,注意文件的权限,防止被盗
3 j' _. s7 W2 B' a" bkey server.key # This file should be kept secret3 T9 i& \& C9 q9 }; X9 x
#CRL文件的申明,被吊销的证书链,这些证书将无法登录7 w) w, H, m* a- y& Q8 z
crl-verify vpncrl.pem
0 n; a- X- Q( w6 v8 r#上面提到的生成的Diffie-Hellman文件. v1 r5 ]) O3 y) S; O
dh dh1024.pem
! g8 ~9 b$ ?+ O9 r9 D1 y, H' ]#这是一条命令的合集,如果你是OpenVPN的老用户,就知道这条命令的来由
4 U9 k8 M3 \+ J( F3 \6 N#这条命令等效于:9 ~' A' s! r- }2 m9 {
# mode server #OpenVPN工作在Server模式,可以支持多client同时动态接入: @" @* y0 Q1 l
# tls-server #使用TLS加密传输,本端为Server,Client端为tls-client
. Y+ b2 o2 ?& ~( T$ s6 w# i- R' r. z#
( B2 S* M3 U% e! I+ |# if dev tun: #如果使用tun设备,等效于以下配置, K( _; k/ ]  V1 i7 v
# ifconfig 10.8.0.1 10.8.0.2 #设置本地tun设备的地址4 M/ h% S2 Y# Z5 O, ?
# ifconfig-pool 10.8.0.4 10.8.0.251 #说明OpenVPN使用的地址池(用于分配给客户),分别是起始地址、结束地址
3 y- O, W# m0 d+ @; U# route 10.8.0.0 255.255.255.0 #增加一条静态路由,省略下一跳地址,下一跳为对端地址,这里是: 10.8.0.2  R- B$ s$ e2 p2 d" z5 U
# if client-to-client: #如果使用client-to-client这个选项
/ W- H/ X2 a3 s2 F# push “route 10.8.0.0 255.255.255.0″ #把这条路由发送给客户端,客户连接成功后自动加入路由表,省略了下一跳地址: 10.8.0.1. V0 ], m3 |2 Z
# else
: m# b% K# j3 t; D! G) ?# push “route 10.8.0.1″ #否则发送本条路由,这是一个主机路由,省略了子网掩码和下一跳地址,分别为: 255.255.255.255 10.8.0.16 g# p# M. l' h
#
- a1 V/ I  }. r! j. ~! [9 p3 O# if dev tap: #如果使用tap设备,则等效于以下命令4 G1 l& ~5 a0 O  Z1 D8 P
# ifconfig 10.8.0.1 255.255.255.0 #配置tap设备的地址* [3 [  H  G$ [9 G( H. g! U
# ifconfig-pool 10.8.0.2 10.8.0.254 255.255.255.0 #客户端使用的地址池,分别是起始地址、结束地址、子网掩码
1 v7 E  v8 T' [& q# push “route-gateway 10.8.0.1″ #把环境变量route-gateway传递给客户机+ N, y. s9 o- S) Y
#
, \! m+ p+ T" e& A3 Q' Gserver 10.8.0.0 255.255.255.0 #等效于以上命令( c* ^! J3 S/ s* H! _- b0 I
#用于记录某个Client获得的IP地址,类似于dhcpd.lease文件,
- i, \' C" P- y! B9 E) ]* C#防止openvpn重新启动后“忘记”Client曾经使用过的IP地址% X; h( M; M. H& Q, u
ifconfig-pool-persist ipp.txt. j) p6 `1 |; v+ x9 U' Z2 R
#Bridge状态下类似DHCPD的配置,为客户分配地址,由于这里工作在路由模式,所以不使用; O" V# d0 J8 M% z  n( D
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
3 w$ _* ~* {! u5 k( Y9 i; @#通过VPN Server往Client push路由,client通过pull指令获得Server push的所有选项并应用6 V% _# s" N: x( B2 {
;push “route 192.168.10.0 255.255.255.0″6 j% q( v+ L0 q. G& R
;push “route 192.168.20.0 255.255.255.0″8 v- B. D2 z0 r. \/ \( a  m
#VPN启动后,在VPN Server上增加的路由,VPN停止后自动删除
# ?7 V6 e, U( E;route 10.9.0.0 255.255.255.252( z1 L5 \: ~0 G- [5 M
#Run script or shell command cmd to validate client" m) F7 @- M1 C0 M3 D& P
#virtual addresses or routes. 具体查看manual
+ i4 m. Y/ `0 D% u: j0 y, _7 n9 H;learn-address ./script
+ T  b& ~# H, c" Z5 i' z#其他的一些需要PUSH给Client的选项) l  T, E& [& p" m- V
#9 ]+ E% j; H7 h' p3 r
#使Client的默认网关指向VPN,让Client的所有Traffic都通过VPN走% v+ H  p8 ~" O  O5 z0 n" T0 o
;push “redirect-gateway”
6 g. [# b! p; T1 d6 M#DHCP的一些选项,具体查看Manual* Q( \7 ]) r! u: W. f0 E
;push “dhcp-option DNS 10.8.0.1″
$ M/ {% Z. k& j0 ~4 B' R1 U;push “dhcp-option WINS 10.8.0.1″9 t* `! @% c$ t) M
#如果可以让VPN Client之间相互访问直接通过openvpn程序转发,
: }- c4 m" C& b( U4 a#不用发送到tun或者tap设备后重新转发,优化Client to Client的访问效率6 a. K# }" ]( D1 Y- v  X* s
client-to-client3 o7 R) G1 e7 P% y
#如果Client使用的CA的Common Name有重复了,或者说客户都使用相同的CA, X5 m' |4 T' y) N/ G# v, H% J( \9 p
#和keys连接VPN,一定要打开这个选项,否则只允许一个人连接VPN* x; u# k( y8 `- h. P
;duplicate-cn( @! N0 d' j, n+ x
#NAT后面使用VPN,如果VPN长时间不通信,NAT Session可能会失效,/ k- X. b0 L6 R( k# B: V/ V+ C
#导致VPN连接丢失,为防止之类事情的发生,keepalive提供一个类似于ping的机制,: [- ^6 n3 k4 o" _& d) u# w
#下面表示每10秒通过VPN的Control通道ping对方,如果连续120秒无法ping通,. o3 d" X, A  ~
#认为连接丢失,并重新启动VPN,重新连接5 W( X2 M, ]9 g: q- z1 m) w0 a% Q
#(对于mode server模式下的openvpn不会重新连接)。
" x/ }1 E1 r. |) [# f3 |* |7 vkeepalive 10 120
, r1 e7 `* r) U#上面提到的HMAC防火墙,防止DOS攻击,对于所有的控制信息,都使用HMAC signature,/ N, p; ]: R( A7 X$ M! K2 K
#没有HMAC signature的控制信息不予处理,注意server端后面的数字肯定使用0,client使用1+ \. V: R4 \7 ~& g& @, p: L
tls-auth ta.key 0 # This file is secret- u' r) b2 C% T. p% P1 l! W& G
#对数据进行压缩,注意Server和Client一致" H2 q/ M3 p' P3 Y
comp-lzo; z) U" ^$ p" L  U/ ?
#定义最大连接数
' b8 n  x. p  A6 @2 }# };max-clients 100- D; G+ X) k6 J
#定义运行openvpn的用户; g  y9 q$ E  m0 k
user nobody* k- z' J: C! R7 l! Q  M
group nobody
* Y* ]) a, e" i  f) N" `#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys$ B7 o2 _* E9 r& I0 r4 H
persist-key
) f% M# T2 s/ j' U3 l. @" j+ V#通过keepalive检测超时后,重新启动VPN,一直保持tun或者tap设备是linkup的,7 k5 Q) \, h8 S( \6 y% \6 k8 d6 {+ j
#否则网络连接会先linkdown然后linkup
- f& Q* w, b' O6 npersist-tun
9 J& n6 E0 r4 ], ~# I7 x#定期把openvpn的一些状态信息写到文件中,以便自己写程序计费或者进行其他操作+ ~; W) j- [& j' v4 g& k5 A
status openvpn-status.log4 M* g! T3 L& @
#记录日志,每次重新启动openvpn后删除原有的log信息3 k) x- y9 f9 ]5 a
log /var/log/openvpn.log
! P. ]: e3 Y4 r. f% R: A6 v+ z#和log一致,每次重新启动openvpn后保留原有的log信息,新信息追加到文件最后
, l! F9 g8 |, _( c8 r;log-append openvpn.log2 P" D. @4 p1 \) Y7 b  A2 [
#相当于debug level,具体查看manual# k" ^; Y+ t0 t' A9 P6 t
verb 3
8 L9 `* p; S! K) B) }——————————-/ s7 c/ \! Q6 b+ M8 X
把server.conf文件保存到/etc/opennvpn目录中,并把使用easy-rsa下的脚本什成的key都复制到/etc/openvpn目录下,命令如下:
/ O4 O* X$ o1 ~2 W#cd /etc/openvpn. e" Y$ C3 K; w5 M9 v* Y
#cp easy-rsa/keys/ca.crt .4 t  r. k. }8 m+ H& H# N
#cp easy-rsa/keys/server.crt .
2 y: s. E! G0 b4 C+ Z9 U#cp easy-rsa/keys/server.key .
  ?6 K5 ~1 t" S#cp easy-rsa/keys/dh1024.pem .
6 x9 L, c6 V% V- \0 x: d#cp easy-rsa/keys/ta.key .
/ R: E4 @, |% H  o#cp easy-rsa/keys/vpncrl.pem .
; E% ]  L: w0 \! N9 l创建OpenVPN启动脚本,可以在源代码目录中找到,在sample-scripts目录下的openvpn.init文件,将其复制到/etc/init.d/目录中,改名为openvpn
  j; D5 p; ]* L) Q然后运行:
- l) n1 i. l5 s) s( h5 @#chkconfig –add openvpn
$ Q9 _& p  t& @5 L7 H0 l#chkconfig openvpn on
) G1 S+ ~! B1 F7 ~) u) D  |立即启动openenvpn+ Y+ ~+ A9 b- q! B2 X* W: L
#/etc/init.d/openvpn start
( x7 O7 _  u/ D
! c) H! t) i1 ?: A* F接下来配置客户端的配置文件client.conf:
5 F; u% L4 P0 F+ O$ mLinux或Unix下使用扩展名为.conf Windows下使用的是.ovpn,并把需要使用的keys复制到配置文件所在目录ca.crt elm.crt elm.key ta.key" b2 X0 f; H  y. s' M
———————————-3 x9 h" w& X# S( o
# 申明我们是一个client,配置从server端pull过来,如IP地址,路由信息之类“Server使用push指令push过来的”! g7 ^# k+ K; F) O
client
! Y* z2 h) \5 D7 V6 ?/ |) Z# L" F. ^2 B8 q# v& u  |
#指定接口的类型,严格和Server端一致
6 F/ Q  _0 a7 S! Cdev tap
1 r! ^9 F7 f( K" O# X  p;dev tun
, p: l1 P2 P4 [8 w& M- Z0 z3 a2 j
/ r. G9 _7 w  Y/ w# Windows needs the TAP-Win32 adapter name
" }6 r9 G1 V7 J" K- N# from the Network Connections panel
  ~/ e7 |6 A5 ]7 l2 _- b: H# if you have more than one. On XP SP2,; S  ]* g" j/ M* _% l1 [
# you may need to disable the firewall& n: W- m2 {  a
# for the TAP adapter." ?/ ^- M1 U0 E5 B  F8 d1 E
;dev-node MyTap
! i& m( ~2 A8 U6 R0 ~$ T  d0 Y
, e8 ^8 q/ g# c: R! _1 n# 使用的协议,与Server严格一致% v6 Q' U8 s/ O1 ]& ?9 F
;proto tcp
# D, N$ {& H7 N) j; ?proto udp
5 [- h! u1 Z, f! R5 |, x7 h+ L4 `8 O6 P1 T) V2 s  d
#设置Server的IP地址和端口,如果有多台机器做负载均衡,可以多次出现remote关键字
- i4 M# s. w1 A
/ g8 L% |4 z3 \- v! P$ Aremote 61.1.1.2 1194" o3 I! {2 C3 U+ s# a" ~
;remote my-server-2 1194
  E1 ~$ {8 E$ J7 A5 R8 M
* |( H) g7 Y* @& A! U# 随机选择一个Server连接,否则按照顺序从上到下依次连接
( W. Y% Q! q+ P;remote-random4 G2 {1 s2 H7 d3 s- [7 Q

7 p8 p/ J0 c9 r! S4 @- x& y# 始终重新解析Server的IP地址(如果remote后面跟的是域名),
$ q# H/ p% `+ d+ z. n5 R# 保证Server IP地址是动态的使用DDNS动态更新DNS后,Client在自动重新连接时重新解析Server的IP地址7 y" `! z7 }% |
# 这样无需人为重新启动,即可重新接入VPN8 @0 x! P7 \8 i+ c* G
resolv-retry infinite
2 C) w# f' E5 j; O' W
) B, H. B) o3 V* M( D# 在本机不邦定任何端口监听incoming数据,Client无需此操作,除非一对一的VPN有必要2 o2 I( Z0 A7 d+ x- Y# g
nobind6 S1 S) a6 H0 Q
5 B0 G! b6 j- K
# 运行openvpn用户的身份,旧版本在win下需要把这两行注释掉,新版本无需此操作
. E( F3 L3 \7 O2 V2 f  U) D3 puser nobody
9 |/ ]: ^' s8 x& N6 G$ }group nobody) L# A6 e4 `, a. J& ~* v
6 T' I' S6 K$ L; U1 O1 _0 F9 j
#在Client端增加路由,使得所有访问内网的流量都经过VPN出去
' N' C7 l2 W. L+ T  }. A#当然也可以在Server的配置文件里头设置,Server配置里头使用的命令是5 q1 K  R4 d" n, X& s) b
# push “route 192.168.0.0 255.255.255.0″5 L/ _/ y& o4 J% U, B
route 192.168.0.0 255.255.0.0
/ {# t! q4 W$ C5 x
2 ^4 ^, c) c* E$ D8 I) c# 和Server配置上的功能一样如果使用了chroot或者su功能,最好打开下面2个选项,防止重新启动后找不到keys文件,或者nobody用户没有权限启动tun设备" ?' z0 }) j) k4 w7 B. A
persist-key
1 o9 `3 S7 z/ o/ f; }persist-tun
5 ?5 z0 s* Z* j: \0 [/ |5 j
8 l7 H+ W) o/ \) J" ?. D, N# c& \# 如果你使用HTTP代理连接VPN Server,把Proxy的IP地址和端口写到下面' K! G$ _* N  N" r* f: L* ~* o
# 如果代理需要验证,使用http-proxy server port [authfile] [auth-method]% F3 S8 m) ]. j$ u! y/ M
# 其中authfile是一个2行的文本文件,用户名和密码各占一行,auth-method可以省略,详细信息查看Manual8 W2 V0 X$ u- D$ U5 i: l: |
;http-proxy-retry # retry on connection failures
+ }% W* h: F6 |;http-proxy [proxy server] [proxy port #]0 f) G% d* I6 Q% y, d+ o  Z" e
' }8 D9 n! T9 ]6 z$ ^
# 对于无线设备使用VPN的配置,看看就明白了7 c3 v7 E5 k6 ?* \# a1 S
# Wireless networks often produce a lot) N0 Y- X" m' `% E% i
# of duplicate packets. Set this flag
- ~( a$ k5 I6 l0 R% c; ?! Q* v# to silence duplicate packet warnings.. K4 J, G! u8 p# |  e  F6 i. j- f: \
;mute-replay-warnings& S  D" o" a. {$ }0 [! m

1 U, c% }- v9 j# Root CA 文件的文件名,用于验证Server CA证书合法性,通过easy-rsa/build-ca生成的ca.crt,和Server配置里的ca.crt是同一个文件, \5 b/ U& A8 t% N! [, E2 B- z
ca ca.crt
% e$ T3 W/ t- _# easy-rsa/build-key生成的key pair文件,上面生成key部分中有提到,不同客户使用不同的keys修改以下两行配置并使用他们的keys即可。, h8 E5 D) o% ^/ d) p) r
cert elm.crt2 N1 H" a8 i, Y6 K
key elm.key
; {# `" W0 C) s, q& L; r% W5 e1 z. ]! w+ {! L) [8 ^9 U
# Server使用build-key-server脚本什成的,在x509 v3扩展中加入了ns-cert-type选项
6 B- A! F2 @' l9 ]9 P6 }. d  m# 防止VPN client使用他们的keys + DNS hack欺骗vpn client连接他们假冒的VPN Server& u. I) W% u2 p6 y  {- W' w5 j' g
# 因为他们的CA里没有这个扩展
' n3 [. r& X) Kns-cert-type server) |& t  G) i. n

" p5 x: P+ S/ F; c1 |# 和Server配置里一致,ta.key也一致,注意最后参数使用的是1% N1 J5 O, S1 d$ H
tls-auth ta.key 1
& b9 n; Y. U1 Q
0 c3 H. R7 x- L9 b" F! B# 压缩选项,和Server严格一致
1 g" B& i, p; b* E. Q7 x' D+ Bcomp-lzo; L1 g4 a) h7 o$ ?5 f
& D9 K9 p  ^5 t6 l
# Set log file verbosity.
; f/ J1 t0 l: O4 `, z& jverb 4 3 b4 o. r( r, z8 v% x1 P
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-8-22 02:51 , Processed in 0.084848 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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