|
|
楼主 |
发表于 2019-9-5 17:00:02
|
显示全部楼层
1.2 准备 OpenVPN 安装目录
" R" f5 r5 y/ ^% ~( Q u( ^
; m9 i0 F0 D: n$ J" O- I1 h6 s, Y# q 因为此文件是使用源码安装,所以选择的程序安装目录为: /usr/local/openvpn 目录, 配置文件目录为/etc/openvpn 目录. p4 g" D1 N$ `/ N, U
4 I8 ^, Q+ H7 u3 w 程序目录: /usr/local/openvpn/ }( N0 m- n; `2 U" h; {0 b
# I- v6 E" H7 z2 ?% y! B
配置目录: /etc/openvpn" z2 Q6 g8 j' w3 ~0 J
1 o) z2 ?; ]' L5 T0 P2. 开始安装 OpenVPN( J# |' U, C+ S& m+ P2 D {
( h" P i/ F4 @+ f1 x 2.1 编译 OpenVPN" o' U" P3 p, F( ^
5 g' K1 |" L4 D. B
[root@client ~]#cd /home/src/openvpn; u5 e( ?0 O# C1 {0 A7 E! B/ B
$ T9 x1 f9 d0 z% [( J0 K [root@client openvpn]#tar zxvf lzo-2.03.tar.gz
' n! K! r$ F5 k1 G6 e9 b! N7 ~& N6 y+ L
[root@client openvpn]#cd lzo-2.038 i+ s& V1 r1 _" ?+ T
" u) n! `- {% c6 N
[root@client lzo-2.03]#./configure && make && make install/ C' o8 h4 _+ m& r
W( u. `7 U( y! t/ W! Z6 ^ 编辑/etc/ld.so.conf
0 q' e1 B8 q; j: s- A- s5 |5 O0 o }5 @/ E1 R
[root@client lzo-2.03]#cat >> /etc/ld.so.conf << EOF
" @! G2 _% ^3 E0 s! o( v$ `+ r4 Z
/lib; j2 I! S$ `# t. o; D
$ [$ p- b* x. c Q4 U- ^
/lib64
5 W5 |9 s% T A! @* ~3 A/ w9 \1 ?) B& ^5 k3 u
/usr/lib2 b8 w# E, G0 n+ R# j5 m
9 B+ X' |9 Y0 k
/usr/lib64
: @* R+ q2 L9 F3 r, z f5 q! ]& P* Q# }5 ?- }
/usr/local/lib
3 ~7 L/ S3 ^8 t6 @' T( g/ Q0 @
! U" D6 U3 {1 P /usr/local/lib64 G- ?0 i) L6 u5 r% B) J' G8 ~# h
- s: b8 U$ Q: R EOF
# Q5 x9 n* k1 A4 R, _0 K4 ~% \* ~: Q ?0 [# c
编辑完后运行
( {& I& T7 O7 K% v$ ?7 X: w0 T
9 u6 n' ]/ h4 G0 f. S [root@client lzo-2.03]#ldconfig
$ I7 d( P+ y7 }- j$ B. b( ^) L3 m5 F& {$ O- b9 P; ]
使动态连接库文件生效,接下来编译 openvpn4 @. N5 p1 k: p8 `! i% X
& B A4 r, K+ o; W [root@client openvpn]# tar zxvf openvpn-2.0.9.tar.gz
8 z$ o! z9 m: D# y
H* y$ b1 J+ T4 w( A9 M* j: F& C& e [root@client openvpn]# cd openvpn-2.0.9
8 ~) F! i% U8 q% T8 L" W4 Y4 V8 C) M% t; K7 E7 o, A0 n: p5 V+ \- B) P) D
[root@client openvpn-2.0.9]# ./configure –prefix=/usr/local/openvpn && make && make install( D& O c& _3 b- Z, R* [7 F/ D, Y' i
R% T: _$ O: m, C2 b3 W
[root@client openvpn-2.0.9]#tree /usr/local/openvpn
5 T r. U" p5 w2 T9 Q% m y! N6 x
3 `& I# h8 l6 ^6 v) L* q' u/ U 应该有以下输出
! r7 w; d: H8 `
* F! B1 j+ K6 ?8 B, T [root@client ~]# tree /usr/local/openvpn/2 f5 n/ k( [* j" ^# E4 q5 J
( ^' K: L' x3 E( t/ t1 e- [7 q. n, F8 e& F /usr/local/openvpn/
& x& F( i7 C/ v2 i. F
/ `5 J7 n0 k: a* _1 ^ |-- man
/ M% M4 d+ X& L9 ^
5 t" c8 g$ @2 r2 a% M8 B( [ P0 E | `-- man8
0 F3 c2 i0 F* S! u+ H! P" x' A4 k) Q. O- p# [7 h% g- d
| `-- openvpn.8
2 o& ^5 l4 U. |. W
6 M3 V/ U. q# b3 D `-- sbin
Y4 Y/ r! i7 E6 Y* `! b1 J( H6 ], K6 x. |
|-- key- h2 N* Y& f# x
1 M" O$ k& B4 X* m% n0 C% W
`-- openvpn/ H% {! O( ]' Y: F& D* l d
, ?2 S# U0 t9 s. m! j+ f 3 directories, 3 files" y* v- u2 C: N+ U7 |! c" L
$ O( l% M) \" I" R* r) y2 w% M3. 配置的 OpenVPN Server% I& [. B$ ~. w3 ?; u9 }4 S
7 v& W& J" e \5 u- i' O6 ]
3.1 建立配置环境
' e4 {0 a8 G1 J+ g/ Y3 R
' V8 |/ e+ L7 H [root@client ~]# mkdir -p /etc/openvpn
5 o" u1 V1 x& m# }/ v2 A8 t& v
: ^3 \1 X% e/ T2 z; f: ]) F [root@client ~]# cp -R /home/src/openvpn/openvpn-2.0.9/easy-rsa /etc/openvpn
0 H, q4 F% S. j% k0 _6 E! k l& Y n' b! J
[root@client ~]# cd /etc/openvpn/easy-rsa/2.0/! M0 f \+ D9 N: W$ K
/ T0 V9 E# S0 g3 Z5 G) r
此目录下以许多程序及脚本, 以下为使用到的程序及脚本说明
/ m) |& N9 |) `$ n2 z) U8 h
$ y3 |, }# \" N3 z& a vars 脚本, 是用来创建环境变量,设置所需要要的变量的脚本
- p. O1 g2 E% H9 u, S) [9 c
- g8 p8 l; ^3 ?+ e0 U- T2 b" e clean-all 脚本,是创建生成 ca 证书及密钥文件所需要的文件及目录- R" m2 J: d6 A! p# C+ ] Y
/ c/ R4 a8 R. \* [ build-ca 脚本, 生成 ca 证书(交互)
& O7 I5 ~4 ]: v% J! o( J2 I+ t& c! |, p+ R. U2 {& s
build-dh 脚本, 生成 Diffie-Hellman 文件(交互)
; b& b2 V8 r8 k' g0 j1 p
* x& K. R4 g3 c2 n build-key-server 脚本, 生成服务器端密钥(交互)5 |2 E9 E0 T5 P" w
: k q# b+ H6 `9 l build-key 脚本, 生成客户端密钥(交互)' F9 W% K% |8 @
. ?! K- z# n5 b# w0 N' R2 Q$ O pkitool 脚本, 直接使用 vars 的环境变量设置, 直接生成证书(非交互)
/ [7 n. f5 k) a; N
$ Y, P# q- _ z* L: b3.2 生成 CA 证书及密钥[注意字符输入不要出错]. d2 W* Q6 y, f1 P9 w
8 i* b3 F4 ?% R* z [root@client 2.0]# . ../vars, m; O1 \) C8 n" _) `$ n
9 B2 N5 ]# a. g3 C. p8 m
[root@client 2.0]# chmod +rwx *
- E- N$ r% j* N' F* H1 N$ s9 y' q
9 `) {/ U3 x6 I8 Y 初始化 keys 目录,创建生成 ca 证书及密钥文件所需要的文件和目录" c0 B1 n% F% T
! {) U+ n" v9 O! C1 ?; L; q# \
[root@client 2.0]# ./clean-all6 L+ J- Z/ `! g" m% {
X( }: _. H; Q( l [) c3 g 编辑 vars 文件,生成环境变量, vars 里的参数根据自己需要改变.
6 a4 m! O& I$ M8 [& @- g. U: t3 B& ^( C8 W- u
export KEY_SIZE=1024 #生成密钥的位数
2 E k% C- t* I9 J7 K/ Z4 Y- F2 p4 a! O' `
export KEY_COUNTRY=CN #定义所在的国家编码, 2 个字符( {' W- L3 v3 K- v9 y' s1 _3 X9 Q
8 R. {9 E6 h) f# D
export KEY_PROVINCE=BeiJing #定义所在的省份
" e* x( E3 o- A! g- r
& X' c* t( O1 B0 V$ m export KEY_CITY=BeiJing #定义所在的城市2 {: L3 k! x0 k$ w
& Y2 s j% ?( }0 i1 y% q export KEY_ORG=”VPN Test org” #定义所在的组织8 W7 [! G- o1 u4 K+ L
" ?4 h' N" r) |0 T7 U5 e
export KEY_OU=”VPN COM” #定义所在的单位
! w6 H7 f! T: \1 j- b; [1 ]
4 n- J4 Z1 L) P export KEY_EMAIL=”china.client@gmail.com” #定义你的邮件地址
3 ^, @" M k( r" v" b8 c5 b* ^/ \1 G, h: B5 H4 h/ g) |
修改好 vars 文件后就可以开始生成 ca 证书及密钥文件了!
6 r) ^2 N: V) ^! h+ {7 ?' J Z
* t5 R' {! ]% } [root@client 2.0]# source ./vars% U/ n6 _. X' I; f Q
1 T) ~" }7 U" N) @0 a- Y/ ?. N
生成 Root Ca 证书, 用于签发 Server 和 Client 证书
z, O5 H$ Z9 \1 }' z5 S8 w8 E% V% w- U/ N) }- W7 d
[root@client 2.0]#./build-ca$ D# x7 T3 I9 Z& H
5 f9 O0 b6 I) o$ z [root@client 2.0]# ls keys
, \ L* \8 p9 M/ N g- p2 k" \
6 Z+ L9 W5 I% g) W1 x" H2 p& g7 B 可以看到已经生成了 ca.crt ca.key 文件- Q& s, q. F6 V" d7 I k
2 e. d% W* G9 Z+ A/ w/ t9 [ 生成 Diffie-Hellman 文件
1 H( X9 y1 \# B7 @
* A& l* ?1 { r& e# g) U3 B [root@client 2.0]#./build_dh
- Z* d; a9 i Q+ Y& g4 r2 U
0 s2 m+ ^, H" |% R: c [root@client 2.0]#ls -l keys/dh2048.pem" w- P2 `9 J1 D+ i5 L) ^6 w
9 k( f8 t @5 y
可以看到生成了 2048 位的 Diffie-Hellman 文件 s" R h" w; U9 S1 e# V: [
5 U Q7 R+ y% f$ [
生成服务器使用的 VPN server Ca 证书/ y% Z3 |; T+ X4 c/ a6 i
& y; V; s7 M( ?6 G
[root@client 2.0]#./build-key-server server0 u' g9 N) N9 `
6 b7 a& v/ M0 d) `" t
server 是你为 CA 证书起的一个名字, 以 server 名字为例,生成的服务器使用的 CA 证书文件为: server.crt server.key4 N, D) g8 ]* \% I
9 z4 Y9 y ]3 m 将生成的 CA 证书及密钥拷贝到/etc/openvpn 下" \9 }5 P; \) e! b
' F7 h# ^$ |% y' u! a. l3 J
[root@client 2.0]#cp keys/{ca.crt,ca.key,server.crt, server.key, dh2048.pem} /etc/openvpn/) R3 [2 c. a* ~8 {9 b
; U2 n5 o/ t* K2 M& p2 O
3.3 生成客户端 CA 证书及密钥
3 Q% _/ r+ p# A, `9 Q& @+ X
$ X' X9 ~4 p/ s8 I& { 生成客户端 CA 证书及密钥使用:build-key 程序即可5 o; N7 c' y+ `. [9 M
?* q( d' M- }- f. @0 T. O, [ [root@client 2.0]#./build-key client" S8 W6 V) ]9 X: Y# r
4 A* [5 l$ x6 k# R$ e9 I8 t& V+ F 将在 keys 目录下生成 client.crt client.csr client.key 三个客户端证书" [) H1 z" ~7 Z; X3 r
$ l* B) s2 \3 @' U: G, _ Y
将 ca.crt ca.key client.crt client.csr client.key 五个文件打包,以备客户端 vpn 使用# `1 I. R a9 ] J( q
: r' Q! ~& n+ S [root@client2.0]#tar zcvf client.vpn.key.tar.gz keys/{ca.crt,ca.key,client.crt,client.csr,client.key}: o" ~$ h+ R( M& X: H5 Q% g
2 O' U- W8 r2 }3 f- `: S
3.4 生成 openvpn 配置文件
* _ S7 s% f* g2 Y, ^) n0 p( ]: s) H& f6 F0 V3 P
创建 openvpn 配置文件最好的方法是先看 openvpn 的样例文件,在源码目录下的 sample-config-files 下,本例为
3 @/ P0 k. W4 W% U4 E8 d; f1 N4 Z# V) S" x1 m
/home/src/openvpn/openvpn-2.0.9/sample-config-files/ K+ e9 R9 Z, d- E9 `, v; H
& u6 Y8 O) K. X, d U5 x5 ?
服务器端配置文件名: server.conf1 }1 O* d+ ]. l; A% F% C3 g3 q
! ?7 z# B* n. N7 B# ] 客户端配置文件名为: client.conf8 H1 w4 k4 @0 h% A3 C
* J+ E/ o" T$ c: W1 D6 i
可以根据需要修改.
" I; Q/ r$ H, R
7 `$ ?( i& c2 f3 f- x5 _- I 本例的配置文件 为:/etc/openvpn/openvpn.conf
, i; }* U9 s& b. m' r& m! ]# X+ i# P" p! V* G0 T
#########################################################################' ~3 K/ G( t& ^; T
( M \: J0 s* M5 x8 M
port 1723 #openvpn 默认端口为 1194
* H# P9 G P! N9 p2 ?, b1 p/ l- ]& n* z% i1 D
proto tcp( L9 y+ r4 N5 j( [' `1 u. b! p7 o
# t/ p+ ]: O9 E7 G dev tun
t* z3 q/ I# e) c6 Y4 u- H4 G) Y4 q6 {6 U% H1 U: j' P( i. Q
#########################################################################
7 k) s7 O; k" G9 A5 q5 a9 }+ m& @ X% c
# ca 证书及服务器证书以所在的文件目录为准,本例是放在了/etc/openvpn 目录下,与配置文件相同目录; V8 X4 _* j6 w3 G' A
! Q% U* q9 K2 e* N
#########################################################################
' O; V- W7 I2 e9 F- B
$ F' [( r. [8 G ca ca.crt
; E, C6 @5 i: C5 d& ?% ?7 n$ ?
6 V) C4 W4 ?0 G! [$ M u cert server.crt
5 N) [" U" K3 S) R( [8 ]0 E/ N6 p: \; J! ~
key server.key! a. [9 K' D: u. e1 y" c
; w7 }% O7 Y, Q5 F* d, L
dh dh2048.pem) P/ ]( }9 l2 t/ d" d; M
) d b( \1 i+ R8 Y7 o* V& f server 172.16.0.0 255.255.0.0
( a) ~0 k4 m! m$ z! B$ [8 I# Q4 L4 p; E8 r2 ?- U
push "dhcp-option DNS 202.106.0.20"
+ K4 h" z3 n& U* j, v9 X- C
: M5 o1 S' L9 m" k5 h6 }: W% g push "dhcp-option DNS 168.210.2.2"
: i1 T) \. }. ^' a2 x: H' B$ z( g
) q* Y1 n2 F" o7 _( J( X' @. |7 L push "route 172.16.0.0 255.255.0.0") f$ @7 k5 c3 U( H- S5 G
' P3 d, u; |( J5 S- s3 ]( T
ifconfig-pool-persist ipp.txt
7 d6 ^7 _; O( T2 ?4 V& F
& f) u' \1 I$ F( t" u, {7 C keepalive 10 120
/ J! p, h9 N( Z4 k
2 a2 @& \0 p6 k comp-lzo
9 f) n# q% ^5 p6 Z1 ]# G8 A$ ]! m3 Z& w, E4 _" d# N
user nobody
4 u( v# ~4 p7 K9 l6 {/ @% Y4 n1 t; v8 {/ r9 T# v4 ~1 {- P
group nobody+ R" q3 ^1 T$ ~0 W' S' G+ N
/ R, _. ^6 l) p2 M8 n# k persist-key3 |# h, P: I% c0 L9 c0 |% ~; r" b
1 \2 q# _. X5 J2 ^: N+ }1 a' m) K5 q persist-tun8 x; g% J4 C# E5 V( s! Y( j
9 i* a) E1 p. u, I! P6 @4 ?- H status /var/log/openvpn-status.log% X( {( `0 D7 W, L# u
, c# X4 `7 A, t$ c: i
verb 33 v9 N5 Z: x* a" O
( w& L( \. n% s2 r* y& J: ?- ?% e
#Client 之间可以相互访问+ @& |" _; i+ |. p
. j2 O2 m$ s: K; S client-to-client
: p) p6 n2 ~2 c' r) w7 c" v, K: y0 o
#允许一个用户多次访问
% J9 \. B' B- }. s# o* R0 t$ R8 J( Z. C% @5 l
duplicate-cn+ P, H. z# f: Z/ L
$ \: W* t( Z i6 g# b+ ~* O8 H
log /var/log/openvpn.log
* \; i; i% i* p9 }% u$ n4 j: [- ?5 p% T0 z, `
log-append /var/log/openvpn.log P9 e; a6 b6 {+ S
7 c. }# D5 s4 d6 l #########################################################################- q0 p0 P) J. C% g1 t+ m
5 ^9 _/ t. ?' l. l/ _ 3.5 创建 openvpn 的启动脚本0 I6 T; j ?+ T7 S1 a
+ N7 w. Y7 r. m8 O: D openvpn 的启动脚本在源码目录: sample-scripts 目录下
9 ?1 g$ w2 X3 V, H9 z% K3 f8 X2 t
文件名为: openvpn.init
4 `# z* C$ b* F, | Z9 v( A$ B$ h6 v6 h+ t. z* i; K; B0 p, d
将 openvpn.ini 拷贝到/etc/init.d 下,并重新命名为 openvpn) E- E& ^9 t, N5 @: x; \- e; x
/ i6 Y* K8 t+ n, L. o
[root@client ~]#cp -f /home/src/openvpn/openvpn-2.0.9/sample-scripts/openvpn.init /etc/init.d/openvpn! Z) l6 y6 y4 r9 O/ Y
3 c! f: b9 ~) q! c H; y
因为是用源码编译安装并指定了目录,所以需要修改/etc/init.d/openvpn 的 69 行
! ]2 L; i: K' \. {
' e, |0 J0 j- R, [ openvpn_locations="/usr/sbin/openvpn /usr/local/sbin/openvpn"
W6 k3 T9 j9 A
1 g8 }3 y8 {7 _: r 修改为:, r$ K) l, ]2 s3 A6 c1 G
0 u" a/ w0 L5 X6 {
openvpn_locations="/usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn /usr/local/sbin/openvpn"
+ q+ E5 b0 y9 J7 ~
9 t' A# [4 h3 N9 i. [' z7 T# ? T 3.6 将 openvpn 添加到系统自启动
4 u/ t- I( N, K/ h* i5 r
2 f& e/ C; a2 }. c ^) G [root@client ~]# chkconfig –add openvpn( P6 w* a+ @ Q1 L$ z
0 C$ g8 F1 I& B# c9 [. Y- j: ] 3.7 启动/停止 openvpn 服务
# v0 F/ [0 x) e/ x- W, s$ T3 ?) a9 G; `# m) J( r
启动 openvpn 服务! B* X" |: q0 t. }1 k8 p* P
% A4 l/ g) k8 y: R0 g [root@client ~]#service openvpn start
8 ~* F$ @6 O) ^# @2 B7 {7 g8 R/ b) D$ B; |
停止 openvpn 服务1 k! B5 N' u. t+ K5 m5 N
3 n/ k; L/ k( C1 J( u' ~- a- u2 X
[root@client ~]#service openvpn stop |
|