|
|
楼主 |
发表于 2019-9-5 17:00:02
|
显示全部楼层
1.2 准备 OpenVPN 安装目录6 H( J4 e0 @5 n, h/ f& C b% }
( G& L/ e o( g V* }3 I2 k9 c 因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn 目录, 配置文件目录为/etc/openvpn 目录0 X I8 p( k; [
* T Y" Q/ v9 ?2 u0 u, D4 v
程序目录: /usr/local/openvpn
+ A( V |7 t7 w* c6 o0 Q6 P; N {
5 I& r; [' s2 A* C; S: r- a+ l 配置目录: /etc/openvpn
! Z; L1 ?2 N: d5 K- H% O5 b g' R+ y' m# s4 P7 F# a1 q
2. 开始安装 OpenVPN9 Z$ u6 N( d* l
Q6 E1 O! I! I( O* M- U% B2 O 2.1 编译 OpenVPN
8 d! B5 ^3 B) S' o; ?' W( Z# z) |' y) u7 m3 d7 J m
[root@client ~]#cd /home/src/openvpn
9 c; N, _ U7 e6 g
$ G' f% u' l: V/ @! l [root@client openvpn]#tar zxvf lzo-2.03.tar.gz4 K' Z9 F" B! P
9 ~0 P1 j# t( U# d: C5 `' S6 T
[root@client openvpn]#cd lzo-2.03
: D; b2 g1 R& Y4 E
! }) J, L8 T$ a3 d. l1 R [root@client lzo-2.03]#./configure && make && make install# y5 O/ q% q/ |% O) \6 P8 z
4 n, z' L" L( A' L 编辑/etc/ld.so.conf1 M* N. a" o/ P1 v) E: n
9 \' Q4 S7 I$ j v+ [: i
[root@client lzo-2.03]#cat >> /etc/ld.so.conf << EOF- _8 ^: U7 {0 @8 B; P2 X, Q
* f6 f- |. b9 N5 }. x' l( J /lib2 X: o, E, c2 d$ j- U- f9 t" j' H
# J l' P3 I2 P' A" \! j
/lib64- F+ p0 _( U" d$ w% d$ i5 K( p
/ ^ x/ n6 L5 g& F, L& O7 K /usr/lib
8 z! o" n3 H: r- N$ [* Y2 g1 ?# Z3 F& Y) z1 E$ R8 x
/usr/lib64- `- {6 a" _( W* D0 u( q, C
' T$ Q; x! n' `" S7 P /usr/local/lib
5 `, H5 Q1 S; w3 ], Q% Z/ L9 m! _) D! ^4 o
/usr/local/lib64% \4 m( ]. n6 O% ^+ k& ~1 S! B- U
$ [8 f; o$ y6 [# K EOF
( _) u: X6 k3 E* L
: v1 ~, e0 l* y5 }7 Z; Z 编辑完后运行
/ ` s' j3 S+ p; }' S* [' J; X$ \" {7 y% a& ^/ y# W
[root@client lzo-2.03]#ldconfig1 e5 Y- I" t" a) k
; s/ B& m: c" c; r 使动态连接库文件生效,接下来编译 openvpn
( A% {' R. h2 e5 y e+ d# b) V
4 U: Y. E+ I5 m: e3 M2 R" W [root@client openvpn]# tar zxvf openvpn-2.0.9.tar.gz3 ~$ q; r) `* j
9 j' R1 Y2 b; E L$ Q
[root@client openvpn]# cd openvpn-2.0.9
/ i6 R3 E" Q! z, ^6 g* R- S8 n+ r+ Z$ _ d5 x: B6 J
[root@client openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install
5 \( n$ _ Q9 B+ a* m
* a; V& v8 ?" q7 C [root@client openvpn-2.0.9]#tree /usr/local/openvpn
/ V; x8 r6 Y8 n; @
1 P8 T$ e0 c2 A, g& s: J. O0 L- ` 应该有以下输出6 s; u2 u( \0 x# d/ ^
* R3 I" [3 c3 `! A: G' L0 p5 ` [root@client ~]# tree /usr/local/openvpn/
& `: i% u8 y# s* ]1 F: B3 x: m$ P w
/usr/local/openvpn/8 m4 G2 n# C, ?
) [$ ]6 T* _4 n$ _7 S" O8 V, L |-- man
- O1 c5 q. A) v" j4 b
! A5 x8 a. K3 S% F2 A% F; T | `-- man8
2 G0 w' m; {. h4 y V# W( D+ j% \& j5 C1 R2 E% |- ~9 m, W
| `-- openvpn.8/ [6 j, R$ V4 M
# L6 B# e- E( E# X9 c `-- sbin- q- y, B; |8 q; j3 O/ A% b' }
/ M3 Z+ R' E% U$ r5 z6 P
|-- key
' y, B; G d- G6 {/ {* ^
- M9 O& |) c) k4 N t1 u `-- openvpn* J' W: h- Q# `$ H
# |- o6 v/ F* _+ q
3 directories, 3 files
+ C3 R3 Q' i( I5 ]6 Q3 j8 O- }0 b. c1 F
! \0 S/ o+ x( D0 h3 B0 J3. 配置的 OpenVPN Server4 m- M B1 I. P
- D, ?/ \( e* x% y' j0 C0 T3 [, e 3.1 建立配置环境
9 i3 u0 [3 f; U$ }4 J
- X1 T& K4 d& x% t; | [root@client ~]# mkdir -p /etc/openvpn8 M9 @) T/ L% }1 g( |+ w- Y! Z
; ^$ ?$ ^4 A) e" k0 R
[root@client ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn9 |6 U/ w6 h' E8 Q. g7 r8 { @) }" [
' `5 \5 c4 |! ~0 ^% @) ?5 W/ W [root@client ~]# cd /etc/openvpn/easy-rsa/2.0/
# }! `" ^0 I$ Y+ |
) q p9 h: k. {. f2 X 此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明) K9 C6 J6 i# D8 T9 Z
$ w. i: K7 o! u- x0 |
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
: P* u" U) r: A) W% z7 r
H4 r, F1 [7 f clean-all 脚本,是创建生成 ca 证书及密钥文件所需要的文件及目录4 ^ w2 n" T+ V4 X3 l c, h
& f8 C) y# `7 y7 _ build-ca 脚本, 生成 ca 证书(交互) G& x/ c! h1 [ y& L
) c1 P9 s/ a! ]1 T+ z0 n
build-dh 脚本, 生成 Diffie-Hellman 文件(交互): y1 K! |3 ]; |$ t/ C( o4 o
! A5 L, n* ~, X7 P1 Y! Y build-key-server 脚本, 生成服务器端密钥(交互)
1 Z4 J& P, }, n
5 h& x8 Y1 l! g9 u% q& [ build-key 脚本, 生成客户端密钥(交互)6 U" {& X: Y& Y( {4 ` Q! V+ t6 i0 y
% x5 ^/ N5 N' a2 i! M pkitool 脚本, 直接使用 vars 的环境变量设置, 直接生成证书(非交互)7 z$ a1 R7 }. J4 j3 y/ z) @* d
# e5 @" T0 d+ F/ v( @7 O3.2 生成 CA 证书及密钥[注意字符输入不要出错]
4 J; V' I# x9 T0 |: J5 }' _
6 i: R1 {! v# d4 ]! j [root@client 2.0]# . ../vars
8 y H$ T: N5 x' M& w& K# |8 A) B8 [" B3 g7 O
[root@client 2.0]# chmod +rwx *
; w/ a" v: m. f4 U7 Q$ Z0 _: B/ W5 M( S1 }
初始化 keys 目录,创建生成 ca 证书及密钥文件所需要的文件和目录
4 S: F7 d; o( [
N6 C; ?$ `& V0 c& r [root@client 2.0]# ./clean-all$ B- t( ~9 E3 L# h! V9 A
! K$ J# t; k) S, x% H) o! }+ m 编辑 vars 文件,生成环境变量, vars 里的参数根据自己需要改变.$ @, Z6 l3 m7 V) V% G
$ d: p- s d9 T export KEY_SIZE=1024 #生成密钥的位数
3 H) R7 V8 y& U1 C4 f+ {6 f& K+ e$ L0 O* c) O
export KEY_COUNTRY=CN #定义所在的国家编码, 2 个字符! h# N8 h8 Y! z0 Z1 w0 q( ^
; R! ^# m+ M/ q export KEY_PROVINCE=BeiJing #定义所在的省份
i4 q9 R4 Y+ T; I3 O, a) K k$ l$ F; B3 {# R+ W) ~ U7 D
export KEY_CITY=BeiJing #定义所在的城市" X6 K/ X* I0 Z1 n6 g2 j$ }
+ a1 K0 H$ m+ P( Q5 b, I2 w$ q
export KEY_ORG=”VPN Test org” #定义所在的组织% t. U2 D- G5 L* } O9 q5 [. R3 r
, s' ?, z$ w- [2 s8 C3 g
export KEY_OU=”VPN COM” #定义所在的单位
0 [8 }% L0 u/ R9 y8 L6 K8 H3 C& F8 f7 Y! h* V1 \7 `2 @# J
export KEY_EMAIL=”china.client@gmail.com” #定义你的邮件地址8 ]( w e Y, U. d5 P
& v/ F9 o3 k$ R& `2 u/ j- } 修改好 vars 文件后就可以开始生成 ca 证书及密钥文件了!& a# y0 K1 k. G3 H! l
1 ?2 T9 G3 Y5 C
[root@client 2.0]# source ./vars
+ G+ v9 k1 b$ f' \9 [
7 S O. _3 E u9 }" \& u2 e' u; y 生成 Root Ca 证书, 用于签发 Server 和 Client 证书$ d8 j) p! R" h4 o8 U, u6 h3 t/ Z
9 B5 e& M. K7 |+ [ }- v1 u [root@client 2.0]#./build-ca( o$ }& h- o4 ?5 o3 } ]
# [; A6 L# r2 r# H& W
[root@client 2.0]# ls keys
; N' \. q6 U; G+ w n
7 Q5 x# I2 h' g% X; ?% m$ x 可以看到已经生成了 ca.crt ca.key 文件; G8 {5 K+ x' x6 }+ ^$ [ ~ V
' |& k# p2 a5 B# }1 B0 m+ j" t 生成 Diffie-Hellman 文件. \. H" [2 n2 n0 Q D
- m$ {3 T) r& @+ ?
[root@client 2.0]#./build_dh
: U4 j7 n, j# P( x6 g
/ J" s+ E5 @5 Z6 W8 @7 M8 d7 b/ A/ s [root@client 2.0]#ls -l keys/dh2048.pem. \9 Q" ?4 M' r
; e" f0 r0 j& |7 k+ V
可以看到生成了 2048 位的 Diffie-Hellman 文件5 O" L' a9 E* i* H, p: M; ]5 z
5 u- _/ L& b1 u, W* P1 ]* N- h( B 生成服务器使用的 VPN server Ca 证书
8 J/ W' e5 `6 x: e) Q4 }* T, z1 C) A5 L
5 R4 r. k9 b& b/ m4 R. i [root@client 2.0]#./build-key-server server
$ x' L1 @, g' s- Y
; X5 e" l$ m: L# [3 A server 是你为 CA 证书起的一个名字, 以 server 名字为例,生成的服务器使用的 CA 证书文件为: server.crt server.key+ Q$ y4 J. [: ^6 ]6 g2 B$ v3 n
0 H& ^4 R9 [% E1 K, ` x2 K 将生成的 CA 证书及密钥拷贝到/etc/openvpn 下
4 \! E5 l$ \* ?9 o( p/ o
0 t, o5 S5 ]9 z3 |* p [root@client 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/( h( x9 ?! d, F
. z* T! | ~ _
3.3 生成客户端 CA 证书及密钥* s: o8 n! d( ^- \$ R% k; g1 M, l
- x C9 `# }8 @5 x4 M. V v6 U
生成客户端 CA 证书及密钥使用:build-key 程序即可0 o7 C% V& A* A
8 P6 H, P5 ?; ~4 f$ t5 }& c
[root@client 2.0]#./build-key client
: s B7 U# d9 h: L# i/ Z% q! R# L1 b5 D; X9 f
将在 keys 目录下生成 client.crt client.csr client.key 三个客户端证书" ]# W* y! X1 N( ^
" x; h9 n1 E6 X6 O! T 将 ca.crt ca.key client.crt client.csr client.key 五个文件打包,以备客户端 vpn 使用
! W A m) O% X% W' t
/ [4 z B( d1 W7 l# Y [root@client2.0]#tar zcvf client.vpn.key.tar.gz keys/{ca.crt,ca.key,client.crt,client.csr,client.key}& R h5 \# Z/ e4 L6 m( M0 ], Y+ u7 K
( l, }4 ]- A* W5 G/ r( _4 g
3.4 生成 openvpn 配置文件
! G2 r4 Q# J3 ~3 l( P" ^* ^$ z" Y, ~8 C, S2 j
创建 openvpn 配置文件最好的方法是先看 openvpn 的样例文件,在源码目录下的 sample-config-files 下,本例为! }2 v2 |+ m H$ ~% U/ l
/ ?6 B) m5 t- `& Y8 g+ @9 U( @ /home/src/openvpn/openvpn-2.0.9/sample-config-files5 e+ K0 i0 x( u9 n) ?! x" D0 ~
; j' t# y5 _/ x
服务器端配置文件名: server.conf
( e1 n" N& z1 v* Q: Z! p% j1 Y3 z3 f
客户端配置文件名为: client.conf3 j& i* f5 j! C& J0 _! V3 B4 b# I
* U/ E0 O3 M; S @ 可以根据需要修改.
) v5 L; H3 T" @# n1 S% P9 f" p. i! D5 l% d9 y" Y
本例的配置文件 为:/etc/openvpn/openvpn.conf
5 `. J+ E+ X4 D4 g; n! E) N
) K% q* F6 i5 y4 e2 o #########################################################################5 q) s: C2 W, ?
u/ R" r* U$ g: c& S! Z port 1723 #openvpn 默认端口为 1194
3 b) Y; A/ h7 Q2 O {
" V1 ]- u+ K# O proto tcp
5 [4 K' z$ y* {# Q2 P3 s1 z! x2 M
dev tun
: b A9 E9 q. o9 L3 ^, L2 [: c; j# F$ D, m* O# ^ P
#########################################################################
% ^; u/ {$ P! Z2 ^$ Z# Z& e
, c( p# E, R. M2 N! L # ca 证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn 目录下,与配置文件相同目录( t* t* d4 {8 d
) o9 a( R9 N) W( n
#########################################################################
. O4 S% ^) F, k c
Y: q/ S6 ^8 S ca ca.crt0 O y- I/ h1 o. G
. R6 s! h+ S6 }. H/ w* X! b) ? cert server.crt
9 |% V: t) u. b3 D! O: r8 `/ w; N( Z* F8 f
key server.key
: c- S: l- i S% m3 |& ? `+ v2 Z& G$ `
, X$ c2 C" K# K$ ]$ T, {+ W dh dh2048.pem- l( ?! G; K( b" v0 U. y7 K5 X
4 i4 g' H% W- X$ [* h
server 172.16.0.0 255.255.0.0* a% K k; b4 |0 e% s" I: e
; v# F. X7 j5 |2 n push "dhcp-option DNS 202.106.0.20"; `3 F0 N! z/ i/ l' o8 H
: x( k+ R1 Y: y/ m l0 {! x2 t! F" L
push "dhcp-option DNS 168.210.2.2"
, Q) A# u- e# [) ~3 Q7 r: W" e, B. Y ~& t6 C! c0 |# E8 m
push "route 172.16.0.0 255.255.0.0"0 v7 z" b. |* f+ e( ?, J8 m
; }% W2 W4 p1 T [4 k- A, A( o: U
ifconfig-pool-persist ipp.txt9 t6 Z/ e5 p( H0 B
2 O- e% x. F3 p2 l2 D5 J! f3 z keepalive 10 120
/ u& F) h2 V. k; d& I/ e, k: s/ B
comp-lzo
' z/ A/ I- y5 D. {5 p$ I. G; M# d$ w& e3 _6 W
user nobody
4 A5 p6 _9 e) x9 o( r* ~) d5 v8 T$ z( ~2 n, r; v1 S
group nobody# ~- B: w* }$ O
+ A2 h! a2 i* G8 F+ |4 _
persist-key( w# S$ R6 t# j. P( E
+ ^, d4 C+ n. M* W+ \ persist-tun& c9 c; {2 K. z4 ?
) t7 {# G* A! E, D _# C( r. J0 P
status /var/log/openvpn-status.log3 e2 K) t" m1 J! T- y# t! R
% q. A5 a; ~! o1 l/ S1 S
verb 3
% n. x: T( I' b O
9 M6 y) {" G& `# N+ E/ X #Client 之间可以相互访问% u- N2 @* f$ o, X+ w
3 `# @$ M; s1 B4 F4 ]$ Z client-to-client' L: G/ j) B' y3 E
5 O2 H! L7 @) A2 n/ n. s
#允许一个用户多次访问* ~$ }* e5 C% A o) W/ o
9 l/ f3 F2 | U Y. Z
duplicate-cn* M! b6 | @1 Q5 O* [! _6 M2 U8 u
& t' I! o l7 V5 u/ f+ j
log /var/log/openvpn.log! E1 M( ~+ D2 T; M: o0 R
/ B, z7 ?$ h. I. x1 f, X) |8 @5 p
log-append /var/log/openvpn.log$ O; D, K, D! b; k
& L4 v U" I6 j5 B S7 Z. u, r3 h# x #########################################################################
/ f* g8 K; a& D, K) X7 Y0 M: T/ c: Y& c+ ?( {7 n
3.5 创建 openvpn 的启动脚本
. }0 s1 ~3 o7 k
4 Q4 Q R+ I, }7 ?! x openvpn 的启动脚本在源码目录: sample-scripts 目录下4 @& [3 Y6 a% M9 X
1 Z. r. V5 l3 V8 e6 }$ N9 L' E 文件名为: openvpn.init5 j) P ^! F+ M6 A
: {9 Q) n) O/ Y- V$ K$ _
将 openvpn.ini 拷贝到/etc/init.d 下,并重新命名为 openvpn
' f5 i3 u% u( O
1 O a/ T+ _% y [root@client ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn
. X" Z6 |4 y7 T! L" M- @
4 C- T4 `2 Z- `: S# Z, t6 g5 D* } 因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn 的 69 行* q5 L: U, p6 Q2 h3 E3 q
0 I# g8 W- H2 O openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
0 x% g& l1 P. ?. k% h6 ]; s5 T/ T* h+ C% t& N6 H/ Q
修改为:9 Z7 _( p+ _1 l. [ N) X) m* J3 Y
T/ r# A9 x+ j U/ X+ V' W# K
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn"
2 L# p& ~1 }3 N( b- s
' D( y( b: E3 t) e! J: N1 } 3.6 将 openvpn 添加到系统自启动1 {1 M: x: K/ | a s
& n6 d1 _8 p1 @! [
[root@client ~]# chkconfig –add openvpn# c+ _* J- s6 {% F1 R
5 R. x, f# v8 { 3.7 启动/停止 openvpn 服务
8 z; r& r7 [$ x0 v5 ^
4 |: }3 d, H2 m) A' _1 V/ t1 O& f 启动 openvpn 服务1 A2 D: J- n, g* v- p. F
6 E" R7 C' g, ~
[root@client ~]#service openvpn start
4 K( w: T0 Q5 I# b) d
& B, F1 ~; ~! J) R4 D. c 停止 openvpn 服务
5 B9 M ]! Q/ W6 ^% i! b
! F2 j) s! ^5 @$ l [root@client ~]#service openvpn stop |
|