|
|
楼主 |
发表于 2019-9-5 17:00:02
|
显示全部楼层
1.2 准备 OpenVPN 安装目录 G1 h- P4 x& o4 W9 u9 u& ^/ z
+ p4 A0 v& u# {5 G9 v
因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn 目录, 配置文件目录为/etc/openvpn 目录
& z5 {1 D; o/ ~4 t
9 O6 `& w- H6 o% u 程序目录: /usr/local/openvpn
; S, h3 V0 q) g% m( ]) t) e. ^' l
3 u" M i2 T% [# X& H) c 配置目录: /etc/openvpn
- X2 W3 D- f+ N9 K4 X1 x2 e. w- C
, e s% N% u- a/ V. G2. 开始安装 OpenVPN
( D. }' q; N1 K
g; X# p. r4 ]3 f 2.1 编译 OpenVPN! k R% ^% G, F0 V$ U4 y+ P( S
" j' Z+ N9 ?% s, s. Y& Y [root@client ~]#cd /home/src/openvpn
! m- S% @2 V/ d- Z
. K5 a/ `+ m1 n1 ~ [root@client openvpn]#tar zxvf lzo-2.03.tar.gz
4 J8 k& v, j. o5 [5 C
2 D4 S- _- M6 h# C( j [root@client openvpn]#cd lzo-2.03
3 q: B# b6 O; Y2 h1 ~8 C
) C+ {6 ~+ R* W8 P& L% u [root@client lzo-2.03]#./configure && make && make install% B- Z& X9 e+ ~% m& ]9 O T _
' {. x, h+ r& N3 f, J5 h9 c" H 编辑/etc/ld.so.conf* P4 U/ ~" A. G' K) M
; @1 R/ J/ V$ h! G' g: ~: I, O
[root@client lzo-2.03]#cat >> /etc/ld.so.conf << EOF7 x5 q9 @; r* ?- d, W
( T9 k0 q: t; _/ G! ], x4 c /lib) C& a% v7 u a! c. E. V
$ B0 q9 d6 P$ ?- `7 Q& T; C$ b
/lib64: U) ?) k0 ~/ ^2 F- f; z" i
5 x! a- x: J$ m /usr/lib4 O, E k7 \; @; u$ g
; b+ ^8 k& b8 X" O' q& z
/usr/lib64- W% g' d$ o+ \: f' s+ G6 p. U* B
! c4 q. ^. z; c g6 ?; P9 t v
/usr/local/lib
8 [. q! C' R6 G. z1 n; F
+ u$ V! T" t' L J( Z% }+ {/ m /usr/local/lib64
6 J" n/ S0 [% n, V
' g5 `" e: S o% Z* a6 f- X/ ~ EOF: L# t3 ~; [2 `
5 |/ a0 \9 d3 b9 Q4 d( y' g 编辑完后运行
3 D2 P+ A4 G2 Y2 g# e3 E
/ d0 u$ b3 ^+ W2 O; H4 Z! q [root@client lzo-2.03]#ldconfig) T* p2 x D" Q ]# j$ {
+ Y I- A3 Y9 I7 ?4 J
使动态连接库文件生效,接下来编译 openvpn8 g" B! G- Y/ K& L( q6 t* h
* O- j& _, F8 M# r) D; B8 }' X [root@client openvpn]# tar zxvf openvpn-2.0.9.tar.gz
( M+ B! W k, ~ b3 e; ?1 n* @) c0 g( e1 }
[root@client openvpn]# cd openvpn-2.0.9& ?( V& u1 {& g! ?
. d" H( @5 K( K
[root@client openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install0 z% U& n1 \: a( L" m& C# j1 m+ z
! y* n2 M6 Y; T8 x1 ]' F$ N' o) ~
[root@client openvpn-2.0.9]#tree /usr/local/openvpn
* V! n* {1 k' K4 y) N2 h$ X6 O0 ?
应该有以下输出
6 k6 k" @! U- O6 e2 E. h9 Q, U2 B" D, B8 s9 N
[root@client ~]# tree /usr/local/openvpn/3 A+ i3 h0 {+ Y/ X
4 M9 `: X1 b) |
/usr/local/openvpn/
+ }' }8 l' t7 l a& c) U# [. _* Z
) j2 `& X" m: Z/ w |-- man
1 L: h1 Z4 J3 s# B/ a8 F
) \' W0 r, e8 @4 d9 { | `-- man8
+ o: [. s* x* x( r) H2 S% M$ ?! o! z1 E0 l( P( D) C
| `-- openvpn.86 h: Y+ t: j' N& S
4 n4 Y& G9 e# j, X* }
`-- sbin
- ]* K1 j- ~2 ^) N2 r
6 @+ i; b: ~6 U% w& U% k |-- key) X. [% h0 b) m1 I) \6 l
7 P& f6 X8 s& O# N6 j
`-- openvpn
; C) M* Y( h" R; P q/ H) L
- T! b& N w+ K5 G+ [7 S+ z1 y 3 directories, 3 files8 S/ B7 x; s8 }
: E0 n F) Q& \6 g4 e) U
3. 配置的 OpenVPN Server
! D8 z* E: |' W' H) p2 i3 {! a1 j* s- J F. W4 ]; Y4 q
3.1 建立配置环境
) G/ {& Q8 f4 \( y- } ]" M. v( V
[root@client ~]# mkdir -p /etc/openvpn
. |+ d, W" U; A' m, N
9 y" H5 x0 \1 k( w7 h5 O [root@client ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn& ?4 R2 N! w. k' _5 r
$ c( [5 U5 e" x+ J( @8 X- Q' O
[root@client ~]# cd /etc/openvpn/easy-rsa/2.0/
z B% L! m x Z z7 j7 @, T U7 ?0 C- i$ k& ~& {1 h0 X
此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明 h, n, o$ x$ l2 `
! z- Z/ @% Q' i4 T
vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
! q( }; _9 h3 A$ a& F$ H4 h0 {7 x8 q! A7 ?
clean-all 脚本,是创建生成 ca 证书及密钥文件所需要的文件及目录
& G e; h: S; D; i! Y9 A1 [" S5 s! K6 G8 i% h
build-ca 脚本, 生成 ca 证书(交互): E" J: R, N3 e2 M
: a q9 D$ D0 p# \
build-dh 脚本, 生成 Diffie-Hellman 文件(交互)
9 ]& f- \- _, l3 a) n u4 T' [ N: T1 b, G/ S( ? _" r6 ^
build-key-server 脚本, 生成服务器端密钥(交互). e1 b+ Q @8 a. {# @! M: Y9 a' N
% E! O; M* l* Z7 t$ b. c build-key 脚本, 生成客户端密钥(交互)
8 t) ]" r- G& Y+ n+ @
9 g7 @* K# g% P$ Q pkitool 脚本, 直接使用 vars 的环境变量设置, 直接生成证书(非交互)# N# u: R. R0 K. D$ s3 H1 e% x
/ o! f# G+ q, m, K F3.2 生成 CA 证书及密钥[注意字符输入不要出错]
2 v l! d1 ? M2 h% o( X
Q( M! E6 d: ^# D/ a [root@client 2.0]# . ../vars
$ E9 v' Y- q( }$ I. D/ }: [% X5 f9 d4 a4 z
[root@client 2.0]# chmod +rwx *
- b5 B* R7 j U _: l8 F8 ^1 y. A$ X* k5 Q" `
初始化 keys 目录,创建生成 ca 证书及密钥文件所需要的文件和目录
1 c& q$ `1 A' R& I5 o8 v; l9 X( c
" @2 e1 D6 H& l, M0 U( H/ o [root@client 2.0]# ./clean-all
$ \9 Q: @' k! S* _0 c7 {- `2 B9 A, C# ]' y4 _
编辑 vars 文件,生成环境变量, vars 里的参数根据自己需要改变./ u$ _4 i; x8 P6 V' q. }9 B& a- d
{) d0 q( c8 A& U export KEY_SIZE=1024 #生成密钥的位数4 W2 e* m) p8 i; y# Y% l
2 K I, o3 K" W, n export KEY_COUNTRY=CN #定义所在的国家编码, 2 个字符" }& f! d' x0 a0 I- G' C% A6 ^
( z! e0 j u& F4 U5 @/ v3 ~
export KEY_PROVINCE=BeiJing #定义所在的省份2 J- G2 a! P! {9 o& Q# A* j! @
$ `& h% o+ p1 n; e
export KEY_CITY=BeiJing #定义所在的城市0 t7 r$ S0 s2 U+ m
, p& ~( |5 j# J, q$ V export KEY_ORG=”VPN Test org” #定义所在的组织- a4 b. f5 z! M( c: u
; K- ^" O# H$ v; L4 Z; L% S export KEY_OU=”VPN COM” #定义所在的单位5 | z! u& Y6 Y1 n7 ^; V
5 k; m( \' u1 y, F' k& H! \$ v
export KEY_EMAIL=”china.client@gmail.com” #定义你的邮件地址
# W( A/ l$ Z& O$ Q- W4 b1 a8 a3 S! ~( m5 L8 z( q( K
修改好 vars 文件后就可以开始生成 ca 证书及密钥文件了!7 S# B* x- {' H3 V% n
7 S; B4 ]; |0 r" P# ~8 ^5 Y
[root@client 2.0]# source ./vars
1 }5 p/ y+ P8 k5 ]& k; {
: M8 j- B# {7 C" x2 ~ 生成 Root Ca 证书, 用于签发 Server 和 Client 证书
: z! g( \6 Q) }7 ~1 z: k' p
' }/ b! j [$ s# x4 S0 g- p# Z3 o [root@client 2.0]#./build-ca
# i( t. W5 _) D
4 s8 J7 E0 U* E2 ] [root@client 2.0]# ls keys
- r9 v! [, D4 j! X2 I, |" e1 L! w. L- Z# p/ u1 U1 z- v9 G! u
可以看到已经生成了 ca.crt ca.key 文件
' e" a. p+ ~7 e1 W; @2 X& R u$ Y7 J$ L2 v
生成 Diffie-Hellman 文件& e/ H* Q. O1 D* x
3 X% c5 S: O2 e
[root@client 2.0]#./build_dh
! y U p. \4 `0 a! M6 l
* Y' ?+ |. _9 j+ w$ f [root@client 2.0]#ls -l keys/dh2048.pem- [5 i# e2 `6 E
% a6 s) }+ Y1 N0 B5 o5 n9 v, b
可以看到生成了 2048 位的 Diffie-Hellman 文件
: J! L0 P3 _3 Q& i+ r; k0 m/ k$ E( V/ Z& k( a* a+ |$ b
生成服务器使用的 VPN server Ca 证书5 _# m* w1 W+ { H0 ]4 I0 X
* J: p1 v e: A7 o) ~; B& R [root@client 2.0]#./build-key-server server3 A+ X5 _8 U/ |7 Y9 O% Z
; x) J! E" n' ^
server 是你为 CA 证书起的一个名字, 以 server 名字为例,生成的服务器使用的 CA 证书文件为: server.crt server.key
4 X; D! @: ?, A/ L* C. P: H: C- X2 ? c) ~+ q
将生成的 CA 证书及密钥拷贝到/etc/openvpn 下
' M; z$ {0 ] O) v2 d/ {0 t0 Y( q5 G( K$ i
[root@client 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/) C7 O. L3 R$ \8 A c6 K
t1 ^" j: M+ J! K: c/ e$ M8 K, u
3.3 生成客户端 CA 证书及密钥- a7 q; N5 ?( t0 o! c1 y
) e* I' |' p J9 ]. ` [1 V. ]
生成客户端 CA 证书及密钥使用:build-key 程序即可! i1 Q; Z1 U9 I; W& J! w8 X
. f8 L# Q4 m" u" ^6 }1 d" X
[root@client 2.0]#./build-key client
; V3 p7 d4 c' N: k3 z; y+ R5 k' l' @
将在 keys 目录下生成 client.crt client.csr client.key 三个客户端证书
2 w; B1 b: B4 Y, `+ j) M) z3 i& d6 e2 Q i. z! l
将 ca.crt ca.key client.crt client.csr client.key 五个文件打包,以备客户端 vpn 使用
1 w( E; Q$ ~5 I. }" A! y- `0 z
1 E s7 u3 G4 D& W: w1 ?1 M [root@client2.0]#tar zcvf client.vpn.key.tar.gz keys/{ca.crt,ca.key,client.crt,client.csr,client.key}3 D5 W0 [+ ?" U
2 }, x$ q- t! H9 C! P
3.4 生成 openvpn 配置文件
) v1 J' ?1 t7 [3 e* U0 `9 G: }. o
' J# O' F5 w3 D( N/ o) T: T 创建 openvpn 配置文件最好的方法是先看 openvpn 的样例文件,在源码目录下的 sample-config-files 下,本例为
. g/ V1 h! J' E5 w2 R( X* {& l. e& r2 ?. I
/home/src/openvpn/openvpn-2.0.9/sample-config-files
5 f6 j' x1 p1 x0 D! V% i; ?7 m+ z( X+ m
服务器端配置文件名: server.conf5 V$ H. [) s# k1 _9 ^: ]; z
* x. X3 j7 h3 y! H( e
客户端配置文件名为: client.conf
+ P& k4 J2 S% \2 [( z# i; u! ^5 i R a% |# \( |
可以根据需要修改.
0 `1 ]6 @8 y% ]; Z, ]9 F; ~$ X2 v" i, f2 G" f+ L' V( e
本例的配置文件 为:/etc/openvpn/openvpn.conf
- d$ W/ {8 L3 v, u7 B7 t7 d/ ^. t2 n' K" @) O5 |
#########################################################################- M7 [& J* _& s8 y) O7 G
7 y: _! ~- ~6 b2 O: G5 b. X$ U port 1723 #openvpn 默认端口为 1194
9 [% p1 L' F/ E/ t- C
# a0 G- | Z. x2 g1 Z) x proto tcp
. b+ E* P# M- K8 D' `( T' T0 R2 \0 c! z$ H* ?2 G
dev tun
1 p2 K2 |/ ]# S% U N
4 r3 O4 C- t8 |4 G, ? #########################################################################2 G) t) U' n: L) B0 G
1 D( Y, a- m1 ?, F0 g1 _; K/ g
# ca 证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn 目录下,与配置文件相同目录
0 V7 U( q- A$ w% @1 i6 T# V! R0 @ p4 {" {" [+ v1 N
#########################################################################7 w+ `/ @& Y* F8 L6 b1 Y
9 q/ {+ S% n2 `& m Y ca ca.crt& s2 ?; m$ }' @: B
3 P6 T1 q1 T+ Q, g7 {# _
cert server.crt& n1 e+ J& o* C0 `+ H
& Y4 _& m' ^6 E4 M& C
key server.key' x; l' y7 C( z$ ^6 r0 c8 _
$ F# C4 K! E/ G$ |% P2 r+ R' H) r
dh dh2048.pem0 c4 }3 l; |8 o- Z7 y8 @
/ m9 S5 J0 g( J9 H3 Z0 x
server 172.16.0.0 255.255.0.0
, Q% V. J0 T0 Z9 \2 {! L7 r; C5 o2 ^! Q( Y+ O
push "dhcp-option DNS 202.106.0.20"
$ U5 z+ B/ X' _7 F o
: U6 J' t1 u7 D push "dhcp-option DNS 168.210.2.2"
1 P; K3 Q+ W! C5 i2 e6 A. s. [* ~( Q b6 ^
push "route 172.16.0.0 255.255.0.0"& N9 w/ F! i3 D7 X
# n6 [. z- O/ }/ Q ifconfig-pool-persist ipp.txt7 w' `9 {; @" W( h! ]3 \
' _0 g5 q/ B! M- p0 o keepalive 10 120
7 N2 r% @9 \$ L3 Q; U- D
+ I+ x) P" t. ~- J- } comp-lzo8 S) p* ]; i' N! r% G/ i' K( r. o
' P# w# P. F- O
user nobody, F* P% T. o2 I# J7 s+ h
$ w) T' B" I( T1 R! T
group nobody/ Z+ J8 R5 _( M% c6 w! G
% r; Y% g0 B* S/ f persist-key: W; {, K7 Q" w- ~
# L% ~/ z8 o7 }2 ]( \* T( \ persist-tun
3 Z& t5 I) F5 E0 e
) m7 [4 U! ^( h% ?- e- Z, I/ c6 r0 U status /var/log/openvpn-status.log
, D* J/ I, k4 u6 v% h' j
0 A3 Y8 Q9 ?/ p/ {/ @ verb 3. T0 j* r- ~" S& i4 X
8 ^* U1 X0 A8 o3 _$ w; ?% Z
#Client 之间可以相互访问
- G/ H2 c1 j6 c9 }! O$ L( T, ~6 Q: f9 F; v3 E3 I0 i
client-to-client) i5 ^& r! B* p/ ?
9 r* L3 F( @- d* e
#允许一个用户多次访问
+ E5 B" I* W6 ^/ a; O$ s
! C. m: \3 g3 V5 z5 J duplicate-cn
. g% s* q/ {. |# `- ]* H' ?, z- G! h! c7 t; I. O
log /var/log/openvpn.log6 W+ F0 u; s& |
6 K, e |0 f2 `' }) E6 n+ i: L8 Y log-append /var/log/openvpn.log
- L. T& y" t4 ^5 x6 n/ y* {
7 T" b3 d4 c/ b( g$ ]3 ]1 W #########################################################################
- \" D' G8 V2 G$ F
6 K8 E0 y2 H' ?* \) A( I* D 3.5 创建 openvpn 的启动脚本
* A/ n1 h" ]( o3 S Y6 ?3 m H* G8 q6 B
openvpn 的启动脚本在源码目录: sample-scripts 目录下
: t" E+ F/ r, o: E
7 w6 E a7 U) c9 r5 W 文件名为: openvpn.init
/ U" \- r8 a8 C, L, W8 q$ M9 [9 f
将 openvpn.ini 拷贝到/etc/init.d 下,并重新命名为 openvpn1 c, F8 P* a9 ^. L$ J* T# q& h
& g; j4 ~ ?2 x$ V* o7 u& Z [root@client ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn9 g. k& r& q- B+ K' |* O
+ b. l3 o' s- w! K 因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn 的 69 行0 Z, l" v# R& M$ |
- |5 D* Q( v5 t0 S; g- Y openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"/ a/ ~ e3 J$ \9 j2 t
, H! S- v$ C6 ~/ R1 Z* f 修改为:" [, P) W9 b& O! ]5 U8 g
) [# E, j& k5 W( D4 l5 o
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn"( T" m7 B% S- s
! Q2 o$ @( X9 M/ ]9 {5 b
3.6 将 openvpn 添加到系统自启动
9 n8 d3 L/ \- B4 n7 `5 h( D* f- Z" H
[root@client ~]# chkconfig –add openvpn
, t8 p+ f" I, R# a/ Y" q8 m& C# j9 S9 R) s& }
3.7 启动/停止 openvpn 服务
# }/ h7 X0 e( a7 Y5 I; ^
& N, i- _* ]% ~; h 启动 openvpn 服务
. I$ `, H. o+ b( P4 t3 V6 B. J( a4 M$ D: U7 U9 e7 l2 J( D: m
[root@client ~]#service openvpn start+ r$ ^: U2 `; w/ {
% }. E) V: M$ g0 h
停止 openvpn 服务
B z2 S+ X7 a T( m- S* b5 P, S1 \" f/ B: C# ]7 }
[root@client ~]#service openvpn stop |
|