|
|
楼主 |
发表于 2019-9-5 17:00:02
|
显示全部楼层
1.2 准备 OpenVPN 安装目录
# i- x% J: D) i+ q4 S# q- H/ B+ Y$ ~, {. k
因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn 目录, 配置文件目录为/etc/openvpn 目录
% N0 \4 F. D8 p0 k& s8 w; R2 k+ \+ W8 g( b, Y0 p& H- g
程序目录: /usr/local/openvpn+ [" ~5 {7 L6 g$ m
4 L9 x) R$ u* E0 x$ z2 X; i
配置目录: /etc/openvpn- G# w. A* s0 ]+ ?) v/ `1 i+ C0 {5 k+ U
) a( h% o* {3 g: p8 g2. 开始安装 OpenVPN
! D) t) D" Y! I- ~" J
) m% [. ]( h, d+ K0 | 2.1 编译 OpenVPN% b6 i5 ]* v/ S. Q( F: r9 h
+ W' ?# Z0 E3 B* i% ]1 E
[root@client ~]#cd /home/src/openvpn; I* ^1 Q* y! ]6 |! A
8 k4 }! `( M2 K- f7 X5 F [root@client openvpn]#tar zxvf lzo-2.03.tar.gz
2 c1 E0 D1 ]6 m) k
* ^( W( }1 b4 O4 Z& W6 s [root@client openvpn]#cd lzo-2.031 w0 o* i b9 w5 H& M
: ~& B& h$ h" s" g5 V0 \ [root@client lzo-2.03]#./configure && make && make install
- t; [ {( C, [) ]% g$ ?: @1 K! ^ C9 |+ k# u
编辑/etc/ld.so.conf
9 D: v% T' K9 m3 ?3 l# z$ l! M+ y2 |( u2 m
[root@client lzo-2.03]#cat >> /etc/ld.so.conf << EOF
. u5 |- Q/ @- q9 J, f
# n" |' p5 Z# M) w P /lib7 q* L; y; H( ?" e) C6 U/ E6 w
" T2 l U" i9 a$ T4 o/ H /lib64
4 i& a. E7 [- E5 |4 F" [+ v: G. Y: Y( [" I
/usr/lib
' H! M1 m$ N! A, p1 L d4 w/ o, }" C2 L5 k% z4 Y6 c
/usr/lib64
3 i8 ~6 s0 f9 L# }* s! O/ t7 o0 U# O$ b; R
/usr/local/lib
X4 E9 M1 Y" _3 } t9 I1 h$ O: O
/usr/local/lib641 P C, T; S1 K
O# p, ~2 z% D. _. x! d
EOF
7 _7 l% u- D; O! w0 y
, b9 U9 t/ [) k1 c6 D 编辑完后运行# T7 c6 E. }# g
+ l! U7 @: ~) v3 d. s* O4 P3 U# ^
[root@client lzo-2.03]#ldconfig" K6 n+ s( N! J1 [2 \6 s. X/ r
- ? Z9 l1 r+ L$ u
使动态连接库文件生效,接下来编译 openvpn3 g4 A- G" H& L
4 e: X1 Q w" N; I+ J9 ]
[root@client openvpn]# tar zxvf openvpn-2.0.9.tar.gz: B8 S, T( ~+ a1 l- y2 I, @
: o0 V! z7 ]+ r4 P9 W5 }) H
[root@client openvpn]# cd openvpn-2.0.9/ J' b* I! Y/ }0 I
" h" C! c* I5 G0 I, P- [3 b6 }0 b
[root@client openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install
, n5 o6 `2 ]' `; G5 W9 h/ H) }& L- k+ O5 V* w% a
[root@client openvpn-2.0.9]#tree /usr/local/openvpn1 {* P2 N9 i5 v$ ^+ \
4 w* w$ p- R5 L* K) o
应该有以下输出# j' F3 I4 w3 l4 W
1 h7 X ]( h4 p8 L6 j$ v4 n1 x
[root@client ~]# tree /usr/local/openvpn/
% F0 f3 |$ b5 b& @5 a0 q
) S0 S( d3 W+ R. e, A7 U3 l /usr/local/openvpn/% J" s. M3 W! [2 w$ O0 e# [ P
* Z- S! I" j" n) J( [; d4 y! f+ J
|-- man% g, V' m3 s M
" g- s$ r% j1 X2 P$ H2 G6 J3 _
| `-- man8' J7 c3 z( m/ R' f. B. H6 _
& G/ I6 n8 c8 K1 t0 k; M( Z5 F | `-- openvpn.81 ~% y, m# K$ d# h9 |' U. T
- U- w6 f5 R$ I& o% O
`-- sbin
0 L+ W1 {$ r! C0 p$ E& m6 G+ r: A% [9 P G8 c$ z
|-- key+ L. {& H8 Y8 H$ a$ \4 z
: O) }- [6 D, l* R! R& ~5 m; Y' V `-- openvpn7 }; r4 g' W; M* x. N! l3 a7 v* r
) g: _* I) i- h2 K; P( k
3 directories, 3 files
* s; O) M1 y4 `3 _
$ q* g# V3 }- J6 T3. 配置的 OpenVPN Server3 e( q9 p4 c9 p' F( Z2 ?; X, g
" j- L5 K- A- `, z* S7 S 3.1 建立配置环境
% w! z% M$ S$ M" ^- s) f' `' f C6 c3 L7 F
[root@client ~]# mkdir -p /etc/openvpn
5 {) a) o' ^& G5 e0 C. o
" P! k+ S' G" r k t- i [root@client ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn5 q7 j& @- N7 o# M" L9 I% \
% R8 v5 B( t" {6 v( R
[root@client ~]# cd /etc/openvpn/easy-rsa/2.0/7 ^: o' r, A! `# ?1 t' `* j
4 {0 d ?+ ` n
此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明
/ K' e/ H/ u/ X( b1 \- j, V- A B' H! Y" W+ p( O; w# H
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本7 L" X+ ]: i3 f% C
1 V7 P7 V& g$ h4 D" E. A clean-all 脚本,是创建生成 ca 证书及密钥文件所需要的文件及目录% Y: u& x! P7 z, X
7 \& c5 E' E: K9 Q* ^7 |
build-ca 脚本, 生成 ca 证书(交互)
1 Z( c4 C" Y& n" h5 a& v
% k1 a$ Q" x0 d build-dh 脚本, 生成 Diffie-Hellman 文件(交互)8 U4 J- l& O5 n. W" l, ^; Q( p
1 }! d" _/ O6 X0 ?" u
build-key-server 脚本, 生成服务器端密钥(交互)/ \0 ]* i- t* K' X) ?$ C2 ]2 o
: {* _0 @6 a& O! O; p+ x build-key 脚本, 生成客户端密钥(交互)
7 a- h1 j+ Z m5 k. L, I
1 ?6 ~" L; F8 g5 h pkitool 脚本, 直接使用 vars 的环境变量设置, 直接生成证书(非交互)' F2 y3 a3 @3 \! o+ y5 B
; y3 I! x6 m. K7 D
3.2 生成 CA 证书及密钥[注意字符输入不要出错]
/ ]$ i8 J. I+ V5 E
7 R: [% [. Q$ g$ B# U3 T q [root@client 2.0]# . ../vars
& {! i) _' ~- o
5 j4 g" U* p# x* H; X; N# S: U/ Y [root@client 2.0]# chmod +rwx ** W" X- Q' m7 B+ t$ w( M7 e
6 z! X$ ^) @" g' m1 j# |0 ]' q 初始化 keys 目录,创建生成 ca 证书及密钥文件所需要的文件和目录7 N% E$ e( z: Z ?, z, O
. ?; [5 H h( W# K" {3 d4 l% i [root@client 2.0]# ./clean-all
+ A0 Q/ A0 P+ E, d( n" X y: H6 ]% |" ?; Z: b9 k1 A; @) F
编辑 vars 文件,生成环境变量, vars 里的参数根据自己需要改变.
* V& l1 b2 s7 {3 N) h7 {( q, `6 C( i; L: r2 a
export KEY_SIZE=1024 #生成密钥的位数
: R+ h5 n6 `' R9 _2 \# }& Q T9 {+ L' K
export KEY_COUNTRY=CN #定义所在的国家编码, 2 个字符
7 h- P+ {9 d1 r: d! Z' ]+ P- S6 A3 z F; i
export KEY_PROVINCE=BeiJing #定义所在的省份
1 J+ w; E& c4 q! Q& T/ }! o5 V! D6 c c& H: R3 g
export KEY_CITY=BeiJing #定义所在的城市' e7 V9 A/ }% X9 N! |9 j u9 Z* j$ L
# i O6 Q, J& G+ ^+ ? export KEY_ORG=”VPN Test org” #定义所在的组织
* e0 ^7 Y6 A3 U- N+ E- z2 [0 P& n l! d, G8 n* F' }
export KEY_OU=”VPN COM” #定义所在的单位' S2 }( A3 g* C& A+ Z" v4 I G- e
2 t+ U( D4 s$ C9 i' L' G export KEY_EMAIL=”china.client@gmail.com” #定义你的邮件地址# a6 C! b1 m' I1 }) }4 Z1 P* c7 B
0 l& y7 n( `% L* W0 j 修改好 vars 文件后就可以开始生成 ca 证书及密钥文件了!
" ]. y9 U# O- {; r/ A5 y. o, x6 T
?3 j9 h( b& _4 M1 R1 a1 _ [root@client 2.0]# source ./vars
! f& o% l3 |6 \" v8 C/ s
) a+ x8 r! P- G9 z 生成 Root Ca 证书, 用于签发 Server 和 Client 证书
$ r( O& c3 V) @! O+ V! w% i) R8 O7 [! d: \* K# s# }3 \5 Z
[root@client 2.0]#./build-ca
* i4 @! t" k# y& N1 }. {2 D# b, v, f7 E- z" \1 g
[root@client 2.0]# ls keys
- e& j1 q! [9 E% T% w) H7 H3 t8 a# b$ T. y; g4 d
可以看到已经生成了 ca.crt ca.key 文件
& w% B: b- p5 d$ J$ M1 r; D c' I1 b, a; U6 a
生成 Diffie-Hellman 文件) J5 x1 e( I8 e
4 s7 i1 B- D) K7 s0 h [root@client 2.0]#./build_dh
' _) Z. }- M( t# m" F* o
% n$ O V' P. N) F" N [root@client 2.0]#ls -l keys/dh2048.pem
! u& C) E: n. |6 ^5 y5 a2 T; L0 D
4 G' T+ J/ L, H f+ A: a6 `2 Z 可以看到生成了 2048 位的 Diffie-Hellman 文件
# j% |9 v3 ?( K& j( {
" x0 G& M/ C1 ~( f; F% R 生成服务器使用的 VPN server Ca 证书" I9 ]* r: ~' F* t( T! F
% k, }# I: ~( D. W, j; d7 u
[root@client 2.0]#./build-key-server server
0 t; S7 J- R. c
. H# P6 x4 @, q& \2 O$ ? server 是你为 CA 证书起的一个名字, 以 server 名字为例,生成的服务器使用的 CA 证书文件为: server.crt server.key
, ]/ H/ h: I% ^* f5 t" T) @
* x3 ]+ w% j6 P& j6 B1 z0 ` 将生成的 CA 证书及密钥拷贝到/etc/openvpn 下! N0 m5 L b7 V+ ?' t" @; N
9 e! ~% l% J6 {$ W0 ?# S* @ [root@client 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/
, S. n. z- J. @0 F3 R( p3 |# k- b5 O3 [( |
3.3 生成客户端 CA 证书及密钥6 B, ?* S6 Q% i2 n
/ Q( n3 L1 [! L; Z$ b, Q ] 生成客户端 CA 证书及密钥使用:build-key 程序即可1 X! O% ]9 h: g
$ C+ R5 t; ]" Y [root@client 2.0]#./build-key client
; ]. V }( a- E0 k! J* }" {
' ^* V3 F6 x: @ 将在 keys 目录下生成 client.crt client.csr client.key 三个客户端证书0 A, g$ I: o, z V, K6 C/ U
' }- s' g: U* s% }1 {7 n
将 ca.crt ca.key client.crt client.csr client.key 五个文件打包,以备客户端 vpn 使用) `4 `: I7 S) |+ O, C+ U+ N$ N V8 ?
0 T+ W, x/ Q; E0 q7 A' H/ M# U [root@client2.0]#tar zcvf client.vpn.key.tar.gz keys/{ca.crt,ca.key,client.crt,client.csr,client.key}" k- p3 O" j) A) R c, [8 Q
; G: p. y( [6 d+ X% v8 j. i5 U3.4 生成 openvpn 配置文件
+ l `; |6 Z/ \! M' h
K6 Z ]0 c/ z) N6 f 创建 openvpn 配置文件最好的方法是先看 openvpn 的样例文件,在源码目录下的 sample-config-files 下,本例为" [& H( f1 J# J1 U
+ p) p! a- v9 N( J( a. q0 t
/home/src/openvpn/openvpn-2.0.9/sample-config-files
1 r& K* H3 C# m% ]- `, y% A( q
: a/ T7 ]4 F5 |3 ~* g& ] 服务器端配置文件名: server.conf* H$ J2 T( ]! O! \- v/ F
* i+ ]/ M" N& h/ t1 r- R' y; C
客户端配置文件名为: client.conf; |# g4 k; ?5 k! r6 |
; E5 f) n7 [, T! t0 u
可以根据需要修改.
1 Y! @) w$ M) ?+ O
+ @3 t, I7 `- w7 @5 _. d7 X, C 本例的配置文件 为:/etc/openvpn/openvpn.conf
. {8 i! T1 D* N) a) k: @
2 G% c( U' E7 u; J1 z! C #########################################################################
+ {" D) [; t r0 M) Q+ E7 [! E, H" f9 l2 M5 _ Q
port 1723 #openvpn 默认端口为 1194
1 Z% o% X% M, {1 s1 T% \) d f( W; D% M! T* k/ t
proto tcp
1 g9 S; E x; V# m* j& ^( M- }; l2 @: W' u2 N* l. f' G
dev tun) h" b, r7 J. o2 t
+ g5 \+ u m) d9 K& e1 T3 s/ D #########################################################################
/ r( A" c, |( n$ A( }" d+ f& A4 j q1 x B' T* \% m$ C
# ca 证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn 目录下,与配置文件相同目录) O }+ s1 ?3 q* @) y* E3 o2 n. _9 [+ |
4 b; O- B+ ~: \" ]9 c* M, P #########################################################################
! y+ p0 i! h# v/ E. U. d5 V: J5 p7 V+ G" V- s
ca ca.crt+ M& J( R. C7 d7 U* e
7 u* I% b$ x* ?
cert server.crt
* w8 n1 `5 X* }$ E& w
- K& ~! y9 P$ a$ w key server.key
* `0 O# n7 F' O" D
$ S/ s R" i* l, v+ R- b7 G, r dh dh2048.pem
( k1 c+ b2 d7 {0 X$ j
) d$ u. A: _! M7 u) V server 172.16.0.0 255.255.0.0
3 O$ R$ r2 \0 W0 ? H/ s6 Z
, O; j* L: E7 f3 u push "dhcp-option DNS 202.106.0.20"1 y: ~' a8 h0 p- s7 m+ I. M
7 U. P. _& a* m( _* \ push "dhcp-option DNS 168.210.2.2"* ^" b% i. O$ T2 d8 [2 b2 M: j x6 C, m1 }
# R# K/ R5 w+ A) H( U* x1 Y, ^7 @4 N
push "route 172.16.0.0 255.255.0.0"9 U8 }- I+ Z! |7 _' C4 e- H8 l7 W$ O
# B. q2 p! \5 w, z {. u. C) w# M ifconfig-pool-persist ipp.txt% ^8 L. x4 r$ L$ t& `& I. X
9 W2 R: y0 M5 |, n& I! U4 j
keepalive 10 120/ n8 }- L) S+ ~6 Y z4 K: M
: s$ i: _( S2 M; M6 s. U. v& @ comp-lzo7 I$ U- K, d9 j, z
4 l1 f9 f: ^+ P" Q$ l% r8 v
user nobody% W2 c' t& | C6 y: V% ^
0 Z* h& `, {, b& S group nobody
4 r S. U; o: G+ Y7 R0 `, K( E* v; m( J
persist-key+ D- u3 ^6 u- E$ i; A5 V1 O0 E
^: `, r6 s2 N8 J/ Z! y: h persist-tun
% r, F3 B9 G7 w- [9 u# h1 {3 E$ z! z/ W0 x# K3 }
status /var/log/openvpn-status.log
, r/ U0 d4 o- y7 G$ a7 i1 k$ g& W% Y% V& r
verb 3/ [; g7 r* i: t0 O8 r3 c9 Y0 {
4 ^: v4 V7 A" a C& @
#Client 之间可以相互访问
+ S3 h4 O5 G" k } |5 `
- g, J8 f, R' @/ {5 ^( s! H; D client-to-client
" s4 M" k% Y$ C4 F5 W0 Y
1 \, } F! F4 Q #允许一个用户多次访问0 N; x+ H% {& v( d
2 g$ x7 V X) q. i3 D: D: T, {
duplicate-cn) ]4 _8 Q. ^( A N6 N& B
& a6 }: x4 j$ s) e2 x6 M! V1 B
log /var/log/openvpn.log
$ R5 l- ?0 w, `8 C0 z
( e; R+ L/ ^; Z6 ^& ? v( O2 ?$ H; Y log-append /var/log/openvpn.log
0 W* s) x+ ~+ M+ A3 j, ?$ t5 q% O( ~" ?9 Z8 t, T( t
#########################################################################
/ Y! \% }3 j* J5 ~ p8 t( g# ]9 o3 w# ?' O( ^; S
3.5 创建 openvpn 的启动脚本# Z! l6 \( a& z( W( O. g' o
) I6 V' f) t3 X3 R
openvpn 的启动脚本在源码目录: sample-scripts 目录下* q8 u6 Z+ }; q: Z
4 b8 I$ H+ R% p& u0 Z
文件名为: openvpn.init. f. x8 [8 f/ m
8 q7 d& K4 ~. \2 I 将 openvpn.ini 拷贝到/etc/init.d 下,并重新命名为 openvpn4 B" A8 u0 j& H$ c
: c6 | `/ }( p4 j [root@client ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn! i1 i; D% Q' ~% r! z+ D8 ?& @" A
1 ^5 J. P" |) S/ t- i, C: s& o: a
因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn 的 69 行
9 Z; o% R- Z- m( P6 j, y2 ]& X: [( {& ~# q r. S; ~- V6 a/ D
openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
- U8 c; x: x8 u+ f b! w6 q* a6 v
修改为: v j! m4 t! E5 k* h
" \' P y4 @8 w# c+ a1 Y8 N- g! Y5 R
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn", b4 }4 B! O1 F3 K$ r
6 g4 y0 [( B& z5 j! R
3.6 将 openvpn 添加到系统自启动6 }: A- D0 q$ v$ _, l" @! K3 q; p
8 J: z0 v' p, n [root@client ~]# chkconfig –add openvpn
1 b- p% Q/ \# [. i2 z* ~ @ v% T4 u) z3 ~, J/ b
3.7 启动/停止 openvpn 服务/ R7 y/ k% A! t) b
: b, \( s5 ?+ n& H5 n5 Z7 G 启动 openvpn 服务' k1 I! k2 g5 u D6 A+ o, p
! f; e: q' P3 G# t [root@client ~]#service openvpn start/ H4 p$ f9 J- c3 S
- I' `! k+ D& U. z: u0 Q0 L 停止 openvpn 服务
: ]! `# P2 L/ e6 ~: v# V) |$ \5 }2 s, @( j
[root@client ~]#service openvpn stop |
|