谷动谷力

 找回密码
 立即注册
查看: 1697|回复: 4
收起左侧

OpenVPN 开源服务搭建VPN整体架构解决方案

[复制链接]
发表于 2021-10-1 15:15:17 | 显示全部楼层 |阅读模式
OpenVPN服务搭建( Q8 {4 L! s  H  B

8 F! y) E3 }' [OpenVPN 为开源产品
; x. n+ \9 ^7 O7 f/ M4 I! [8 b; Z2 p6 C
1、VPN整体架构解决方案
! e: f5 v- p* L* M* C4 o) o( _ ┌───────────────────────────────────────────┐
8 Z6 N2 k' s* N5 |5 U9 k* g │                                                                                      │
! ?& r, m8 R, V- F3 l │                                     IDC 机房                                         │0 l% v2 k( A/ X4 j
│                                                                                      │( H6 u4 V2 a* \+ n
│ ┌──────────┐                                                             │) |. ?7 D  e2 s2 C
│ ││-- keys           │                                     ┌─────────┐  │+ R) B5 w% y% d2 h9 i! ?
│ ││  │-- ca.crt     │                                     │   Lan Server 1   │  │
. G# f. q- k* ?, r │ ││  │-- ca.key     │           ┌─────────┐  ↗│eth0 : 172.16.1.8 │  │  4 U" R/ y2 e' M, A0 v
│ ││  │-- dh1024.pem │  配置文件 │    VPN Server    │↙  └─────────┘  │ % @- h% ]% g$ c* i. s/ D
│ ││  │-- server.crt │ ←────│eth0 : 210.74.1.7 │                            │
" T7 P* S. z9 N │ ││  │-- server.csr │           │eth1 : 172.16.1.7 │↖                          │* x$ g, e1 E( Y
│ ││  │-- server.key │           └─────────┘  ↘┌─────────┐  │! J5 V" z6 o) D9 b
│ ││  │-- ta.key     │             ↗                      │   Lan Server 2   │  │, M' x- F6 J5 {1 \8 ^
│ ││   `-- ca.key     │           ╱                        │eth0 : 172.16.1.9 │  │
* X: |2 _# s! A" } │ │ `-- server.conf    │         ↗                          └─────────┘  │1 S/ f. m0 a% Q2 Y% Z/ j" w- l
│ └──────────┘       ╱                                                    │& H# v8 M! U# j0 e* p
│                              ↗                                                      │
: A' c. W( S% e  u1 E/ q └───────────────────────────────────────────┘1 b( e5 T4 `4 G
                             ↗
% S! H; t. s2 p7 n& Z# C                           ╱   访问目的地址:172.16.1.0/24
! ~6 Y1 Q0 s! n: L   远程拨号目的地址:    ↗     所使用源地址:10.6.27.0/24
6 W2 P( }! R: S# n7 ^   IP :210.74.1.7     ╱               ┌────────────────────┐ * ]( V( F' l6 ~
                ┌──────┐        │ d:\program files\openvpn\config\tear   │
3 }  H# o1 P, `                │ 办公电脑   │软件安装│ ca.crt                                 │
+ H; d% B: t& T9 x& N% C                │Windows 系统│───→│ tear.crt                               │ 8 \+ S& G) I$ [1 g3 }: @
                │            │配置文件│ tear.key                               │ + Z" b% c" @$ r
                └──────┘        │ tear_vpn.ovpn                          │ - E0 k# W* C( p0 Q+ ~3 ]0 h( A2 e
                                        │ 路由 : push "route 172.16.16.1.0 ..."  │ 4 y) B0 Z% D) b1 q& |9 \
                                        └────────────────────┘+ G- k, Y/ M9 @5 }7 x

5 J! d, n" d1 j' L9 y2、企业或 IDC 机房网络互联场景逻辑图/ t5 f/ Y* V7 R/ J: H7 C0 L# ]

$ P& B+ s' [( F& u& \ ┌───────────────────────────────────────────────────────────────────┐5 d3 b% t7 V! M. ?
│                                                                                                                                      │& j2 {% p% o- B2 w' ]
│                                                           IPSec VPN Top                                                              │
. U, r: \: Z7 W/ H# \ │                                                                                                                                      │8 @9 \8 W* R0 L, w2 G0 ]$ G
│                                 北京 IDC 机房生产环境                           深圳 IDC 机房生产环境                                │
4 m2 d' G2 e, D; V- ~& P. x │ ┌─────────┐         ┌─────────┐                          ┌─────────┐         ┌─────────┐ │! [. t; k: H4 G8 ~
│ │  LanA Server 1   │         │ A1 VPN Server    │                          │ B1 VPN Server    │         │  LanB Server 1   │ │
! h3 t+ E% H+ H9 R │ │eth0 : 172.16.1.17│ ←──→│eth0 : 10.0.0.7   │↖                      ↗│eth0 : 10.0.0.8   │←──→ │eth0 :192.168.1.18│ │9 U+ W5 b$ o- x' S- D0 x
│ └─────────┘         │eth1 : 172.16.1.7 │  ╲                  ╱  │eth1 : 192.168.1.8│         └─────────┘ │  ' ?% e) o* Z8 G! j1 L4 W
│                      ↖        └─────────┘    ↘              ↙    └─────────┘        ↗                      │ * M) ^; \& X# {: V) f1 q* h, |' K
│ ┌─────────┐ ╲    ↗         ↑                 ┌─────┐               ↑           ↖    ╱ ┌─────────┐ │2 m0 H( f" j+ n* w9 i, J  P" F
│ │  LanA Server 2   │─ ↘╱ ─────┤                 │ Internet │               ├────── ╲↙ ─│  LanB Server 2   │ │ * U) L- l! ]+ ~" L
│ │eth0 : 172.16.1.18│   ↗╲           ↓                 └─────┘               ↓             ╱↖   │eth0 :192.168.1.19│ │
( R/ y5 k: y2 U8 _% L" Y │ └─────────┘ ╱    ↘┌─────────┐    ↗              ↖    ┌─────────┐↙    ╲ └─────────┘ │' ~# h- Z' o: b
│                      ↙        │ A2 VPN Server    │  ╱                  ╲  │ B2 VPN Server    │        ↘                      │
2 c* R6 M; l! L0 _ │ ┌─────────┐         │eth0 : 10.0.0.3   │↙                      ↘│eth0 : 10.0.0.2   │         ┌─────────┐ │6 Q+ E5 H* m" ^7 N8 F
│ │  LanA Server N   │ ←──→│eth1 : 172.16.1.3 │                          │eth1 : 192.168.1.2│←──→ │  LanB Server N   │ │/ x0 C1 }0 E! e# W9 d0 k& a0 s
│ │eth0 : 172.16.1.19│         └─────────┘                          └─────────┘         │eth0 :192.168.1.17│ │           - r: M! ]2 c+ H: u
│ └─────────┘                                                                                        └─────────┘ │- p8 x% m1 ?0 Q5 p, x+ F' P( k8 Z) p
│  说明:LANA Server 网关统一为 eth1:172.16.1.7                                         说明:LANB Server 网关统一为 eth1:192.168.1.8  │
( j' p% d7 M! c$ d6 h │                                                                                                                                      │
/ X) B! ~2 Q9 @: D  |6 g/ w& c& a/ B └───────────────────────────────────────────────────────────────────┘- _: I9 @8 d4 n/ b% ^) g
                            . X: _9 L* W% G1 ~
以上是两个 IDC 机房的 IPSec VPN 的互联场景逻辑图,在实际生产环境中,可以有三个五个,甚至更多,也是没有问题的。
& H2 j% ]. l) w$ Z) K( N' L但是尽量不要形成环状的互联,要形成星型的互联。
. Q) ~5 U9 E% u7 C以上每全 IDC 机房都有两台 VPN Server ,可以做高可用,也可以做负载均衡,这就是开源产品的好处,可以做扩展。、) x9 E1 M% a7 ~+ a3 Y' T! ~8 n
当然部署三五个都没有问题。! Y- z9 M  Z$ n( N9 _, I3 w. ]
而对于 OpenVPN 来说,不可能两端都是 Server 端,而是一个是 Client ,一个是 Server ,只不过 Client 端用的是 linux 版本的软件。
: R: R; r  }  ~/ o" _  q( h$ m* q通过 Client 拨号访问 Server 服务器,因为 LanA Server 的网关都是 A1 VPN Server ,所以都可以访问到 Server 服务器后端的 LanB Server 。
. {1 [8 }, S  h' p1 C& c而对于 IPsec VPN 来说的话,则两边部署的都是 Server 端,然后每个 Server 端的 内网 Server 都可以访问对端 Server 的内网 Server 。/ z' ], T: `" Z6 G/ y  A
对于 OpenVPN 或 IPSec VPN 都用到两个重要的命令 route 和 tcpdump 。6 ]3 r/ F5 S. Y' O) b% V& d6 k% m/ A- ]6 y
当前实验环境:
- r) ^. M8 y4 L1 m) K3 v: a" E台式机 Client IP :10.0.0.100/247 e( ~5 Z# \- X0 c
OpenVPN Server OS :CentOS 6.5
9 m/ y  u4 O% g1 I# N! h+ W               WAN IP eth1 :10.0.0.1/24
0 F3 v; R; V. `$ U               LAN IP eth0 :192.168.1.212/24
$ y- s' @' [6 G( _- [& f6 Y; W$ LOpenVPN Server 所在内网 web 服务器 IP 为 :192.168.1.207/24- o1 F/ Q2 ]1 U) Q+ K* e$ K( t
                                  网关为 :192.168.1.1
) H  [2 ^3 S+ }/ R5 Q: n6 H注意:web 服务器的网关不是 VPN Server 。- x) o5 E$ g) J) g
, Y: D/ `- R5 Y
3. 实验需求:
  J# R# ^9 S9 ?) r9 V- G' q在远端通过 vpn 客户端拨号到 vpn server ,然后可以直接访问 vpnserver 所在局域网内的多个 server ,进行管理维护
& Y3 ?0 J6 n8 A8 E  S1 z' q/ dVPN Server 查看系统部署情况 :
4 g4 K* L8 J/ D* S# g* Y
  1. [root@VPN-A ~]# cat /etc/redhat-release / F4 a3 z1 d4 |
  2. CentOS release 6.5 (Final)- [" r& U; m3 z% t/ v
  3. [root@VPN-A ~]# uname -r
    - W' Y+ h2 c# ], _5 h* K, x8 V
  4. 2.6.32-431.el6.x86_64
    / \; l5 p" |7 n2 g# C
  5. [root@VPN-A ~]# uname -m8 c5 V- F  R: \3 c, q4 x
  6. x86_64
复制代码

- m) f- B" ]7 h+ [; z
回复

使用道具 举报

 楼主| 发表于 2021-10-1 15:20:14 | 显示全部楼层
实验步骤
9 Z  W2 X  D6 q$ l1、配置时间同步6 F4 g) ^: @/ v' F# B7 J( I
[root@VPN-A ~]# /usr/sbin/ntpdate time.windows.com
3 L. r1 o* H" ]+ f: N* s+ V* g注意:如果时间相差太大,会有很多乱七八糟的问题出现,甚至会出现连接不上的问题。
! a4 C9 N% A0 D, _: \8 {加入到定时任务:' }& F4 K1 D/ q: ~  _; x; Z: ^
[root@VPN-A ~]# echo '#time sync' >> /var/spool/cron/root4 _$ l5 `3 `& ^9 E# `
[root@VPN-A ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com 2&> /dev/null' >> /var/spool/cron/root7 d/ V0 O! G; B9 y
[root@VPN-A ~]# crontab -l
% m- E) y3 g, ~4 I#time sync- I# W' U7 I; n' P5 l  H5 [+ {
*/5 * * * * /usr/sbin/ntpdate time.windows.com 2&> /dev/null7 b" b: |0 [2 t% k
2、创建存放工具目录- E, V0 O+ i: I+ Q- j
[root@VPN-A ~]# mkdir -p /home/tear/tools/openvpn
0 z# @& }; L  q- R; j  X+ o3 N[root@VPN-A ~]# cd /home/tear/tools/openvpn
- Z2 s4 O4 z7 O3 I  n3 nOpenVPN 的安装涉及到两个软件:lzo-2.06.tar.gz 和 openvpn-2.2.2.tar.gz 。4 l1 ~/ b. C& ^" t3 P  E
注意:因为这个版本比较稳定,这里选择使用这个版本。3 m# d" k$ X% K3 H9 V8 r7 v
因为 VPN 传输是经过公网的,所以需要一个压缩模块 lzo。( E7 u: n, ~4 m2 T6 J. C
先把这两个软件上传到以上目录中。
! l6 M, L% h0 ][root@VPN-A openvpn]# ls/ ]: m4 D5 E& |5 j
lzo-2.06.tar.gz  openvpn-2.2.2.tar.gz. P+ \* X* c! r9 |9 x/ F+ o- N
[root@VPN-A openvpn]# tar -zxf lzo-2.06.tar.gz ; f4 x* m: M! A! A5 ?
[root@VPN-A openvpn]# cd lzo-2.06
1 K% U2 B6 |' v! n[root@VPN-A lzo-2.06]# ./configure
: O. }7 u- c5 X* _& M/ X* B[root@VPN-A lzo-2.06]# make && make install" m( j8 d0 |7 @5 k. f3 Y
[root@VPN-A lzo-2.06]# echo $?
$ @; e  n4 F, V0 K4 L. F) C+ G0
3 u4 G- O8 X" x0 j% P[root@VPN-A lzo-2.06]# cd ..
: Q& z& p! c  L( T$ K( j9 S开始安装 openvpn ,注意:openvpn 是依赖 ssl 和 tls 协议,需要安装相关软件包。, i) \5 {$ A7 Z/ J  K! m7 t1 v
直接使用 yum 安装方便,如果不安装在编译安装 openvpn 的时候会出现问题。
8 x) ^4 y2 m6 @7 @" \/ P/ A/ I9 W[root@VPN-A openvpn]# yum -y install openssl*
6 l# Z4 G' ]( ~[root@VPN-A openvpn]# tar -zxf openvpn-2.2.2.tar.gz) @' Y9 o* Y3 ?( x# `9 i
[root@VPN-A openvpn]# cd openvpn-2.2.22 e1 A! u; {2 A! ?9 D
[root@VPN-A openvpn-2.2.2]# ./configure --with-lzo-headers=/usr/local/include/ --with-lzo-lib=/usr/local/lib/
; x/ T1 n4 i9 S, B- ~3 R1 z( q[root@VPN-A openvpn-2.2.2]# make && make install% B7 W$ T$ A& M5 W( W
[root@VPN-A openvpn-2.2.2]# echo $?
2 C  @4 P/ |4 k. Z( C, n0
8 P$ j6 V5 ?. ^[root@VPN-A openvpn-2.2.2]# cd ..
" w: ?4 h- L. z/ m" F' \[root@VPN-A openvpn]# which openvpn
  T3 \" F% @% W! T; e/usr/local/sbin/openvpn                          <--出现此结果,就代表安装好了。
" {4 f; T% g0 g; m/ V' y& m) @3、配置 openvpn server 建立 CA 证书
! a+ {& U8 q, I6 O; U! M1 J注意:需要到 openvpn 安装包的目录里去创建,因为这个版本的 openvpn 已经包含了这个工具,不需要再去别的地方弄。
6 n7 }. j$ i; u7 q" z7 f+ M' w) W6 ?- `[root@VPN-A openvpn]# cd openvpn-2.2.2/easy-rsa/2.0/: e; ~8 R2 F& Q  s, J
首先修改一下这个目录下的 vars 文件。
  |' k; V% i' g! V[root@VPN-A 2.0]# cp vars vars.tear.20160814              <--备份原文件
3 K/ t& B1 e  l  [[root@VPN-A 2.0]# ls vars*
" |3 ?5 W+ ?4 H+ O* J) xvars  vars.tear.20160814
- M3 m/ i" a- w编辑这个文件,然后切换到文件的结尾:
2 ^$ P: U* o: e! F4 f4 h9 R 64 export KEY_COUNTRY="US"
5 F# P/ J5 C! ~/ O1 K7 V! H+ W 65 export KEY_PROVINCE="CA"( w1 {2 M6 e1 K+ ?# o
66 export KEY_CITY="SanFrancisco"
( W% }; X4 s1 j- T+ r5 f 67 export KEY_ORG="Fort-Funston"4 S, Z: a  I7 V4 |' u( m
68 export KEY_EMAIL="me@myhost.mydomain"
* {; T5 H* C# D+ O& ^% m3 y 69 export KEY_EMAIL=mail@host.domain- a! u" a# T6 R. r
70 export KEY_CN=changeme/ E& V8 }5 n. N" }/ R" O+ X
71 export KEY_NAME=changeme  |: g2 K) {1 H+ j: U
72 export KEY_OU=changeme
# |, c& O  b9 ]/ V/ k 73 export PKCS11_MODULE_PATH=changeme
% i( k+ L& [2 u! c  a9 o  e 74 export PKCS11_PIN=12341 P- _/ ?4 Q% y# T
以上就是生成 CA 及服务端、客户端证书时需要提交的信息,先在这里修改,在生成时直接按“回车”即可方便操作。
- g0 v5 o* A; G; `" X修改为:  X2 _" g. z+ M+ {0 _: n
64 export KEY_COUNTRY="CN"                   <--国家
: ~  B! _! C' k4 P 65 export KEY_PROVINCE="GD"                   <--省
0 u6 f  B4 y" w( q 66 export KEY_CITY="ShenZhen"                   <--市& ?5 k% l0 y  t9 Z6 l
67 export KEY_ORG="SYS"                          <--组织' d  U- z- y+ l! t* A0 a. E
68 export KEY_EMAIL="tear@sys.local"             <--邮箱
6 V( |. a6 m: j 69 export KEY_EMAIL=tear@sys.local               <--邮箱; C( ]4 U: z! q1 J! P
70 export KEY_CN=CN; X1 p' v! C2 ~) h
71 export KEY_NAME=tear
. L4 n$ `8 I* G- h 72 export KEY_OU=tear/ n  D) |; ~$ \4 A1 U0 g* U
73 export PKCS11_MODULE_PATH=changeme            <--导入模块路径
/ w- [3 |. ], W. f% o) G 74 export PKCS11_PIN=1234                        <--导入密码
  |: X) h  N* }0 j$ o修改后需要重新加载配置文件:
# f' g+ \& `" ?+ b[root@VPN-A 2.0]# source vars' f4 \5 e5 k1 k( B: k4 T
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/tear/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/keys5 E" n' m5 v$ q3 _1 j) \
根据上面的提示,在搭建或者是重新创建证书目录时,可以使用当前目录下的 clean-all 命令,清除 keys 目录。
. z" p; {  ]/ E[root@VPN-A 2.0]# ./clean-all / |) w2 Q4 c6 ^1 E
使用当前目录下的 build-ca 命令新建证书:
2 A6 J& H1 g' C5 J- T[root@VPN-A 2.0]# ./build-ca
7 _) e1 y6 u* \8 F  `3 ~) B! nGenerating a 1024 bit RSA private key
) i( h4 ?. x6 N: |, ^........++++++5 B! }# }& h/ v4 g9 m/ n7 S: J( Z
.......................++++++
0 A: M( B* |/ S3 Jwriting new private key to 'ca.key'
2 e/ y7 M) Y- y+ ^0 d( c-----
, s, L3 K" b% U- T/ `3 d1 _( h! dYou are about to be asked to enter information that will be incorporated9 j0 Y' C& t; R, k7 p$ ~6 I. m4 G
into your certificate request.3 U+ c( \" a8 _0 n+ i
What you are about to enter is what is called a Distinguished Name or a DN.6 u6 O8 |! s. d: e" g
There are quite a few fields but you can leave some blank
0 F; k- X+ C/ n+ R+ hFor some fields there will be a default value,
. W# T$ m1 X: g  z& q$ ]3 KIf you enter '.', the field will be left blank.0 F! U+ h( ]; t
-----
1 ~* A$ m0 \" {* Z$ Y3 W; M5 b8 ~Country Name (2 letter code) [CN]:                                   <--默认按“回车”即可
, O) W: v/ p# ^State or Province Name (full name) [GD]:                             <--默认按“回车”即可
7 p% k4 _0 B: S0 f  D3 dLocality Name (eg, city) [ShenZhen]:                                 <--默认按“回车”即可
+ T6 r3 s; i( V2 rOrganization Name (eg, company) [SYS]:                               <--默认按“回车”即可% p# y1 A- u( _6 |9 Y% t
Organizational Unit Name (eg, section) [tear]:                       <--默认按“回车”即可4 o6 z+ B" k6 {8 {
Common Name (eg, your name or your server's hostname) [CN]: tear     <--这里输入 tear,可根据自己的需求设置9 f  t0 y* d/ D
Name [tear]:                                                         <--默认按“回车”即可
$ F# Z5 Z( Q  h4 ?' PEmail Address [tear@sys.local]:                                      <--默认按“回车”即可
+ L7 |3 L2 E  z1 y) j8 [以上就是刚修改 vars 配置文件相关的内容,方便操作。
' D, K% I9 P$ g" h查看生成的 CA 证书:
) {- [, P0 r: y[root@VPN-A 2.0]# ls keys/7 t7 v$ l% w5 J% O
ca.crt  ca.key  index.txt  serial
; ?6 o& ?: k) G: z6 K3 b$ v# Z! o& H" H7 v
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-1 15:22:05 | 显示全部楼层
4、生成服务端的密钥文件
8 |5 C5 J$ R) G* O; m2 Y使用当前目录的 build-key-server 命令创建
( u! u" x1 u( }[root@VPN-A 2.0]# ./build-key-server server      <--后面的是 server 是指定的文件名: K, D5 q0 `) A! m
注意:这个名字定义好后,以后都会需要调用到的。6 P" x. Z0 F- ^1 O
[root@VPN-A 2.0]# ./build-key-server server
# K" s" q, i8 _: GGenerating a 1024 bit RSA private key
1 i  O  E8 w+ n7 B) K5 o......++++++* W; [; K6 f/ Q0 Q3 [
...................................................++++++7 z9 U( }( W2 i: J: s. Q! |
writing new private key to 'server.key'
0 N, v  u8 i0 Y: i0 ~% I* y; b# O-----
" ^! `. A+ Y2 `  V: s9 }0 O0 Y; `You are about to be asked to enter information that will be incorporated
1 x; t9 g( O3 J6 M8 X9 v3 b- Zinto your certificate request.9 E, D  h& L5 c3 Y
What you are about to enter is what is called a Distinguished Name or a DN.; d/ X# G" }- |, z" w( Q1 w
There are quite a few fields but you can leave some blank
; t7 e, x8 z3 ]For some fields there will be a default value,
+ S) N7 B4 G. v" TIf you enter '.', the field will be left blank.2 a2 V% @8 h: C# n3 R1 M  V
-----
6 g4 B2 ]- F/ F: tCountry Name (2 letter code) [CN]:                                     <--默认按“回车”即可
5 N  [# G/ A; w+ rState or Province Name (full name) [GD]:                               <--默认按“回车”即可
/ d# K: G! y0 ]  _1 d) r* u  qLocality Name (eg, city) [ShenZhen]:                                   <--默认按“回车”即可  x( d9 E: }- C' z) o7 t2 k
Organization Name (eg, company) [SYS]:                                 <--默认按“回车”即可
6 j2 U' E5 w" \" K0 V. Q6 KOrganizational Unit Name (eg, section) [tear]:                         <--默认按“回车”即可
& `) t, X2 L% Z( w" HCommon Name (eg, your name or your server's hostname) [server]:        <--默认按“回车”即可
3 e* J" P/ U* J% K4 M" O1 `Name [tear]:                                                           <--默认按“回车”即可& e) t0 Z" T& A, ^' o
Email Address [tear@sys.local]:                                        <--默认按“回车”即可1 ]$ q' n4 w( ]- G: N: O5 ]
Please enter the following 'extra' attributes, q0 ?8 |3 a" @, `0 s! N  a
to be sent with your certificate request. L( G* b- q4 T' D; u9 @
A challenge password []:123456                                         <--要给一个密码,这个密码是在你发起证书请求的密码,这里4 g1 B/ _# N2 \. T, J2 |* \9 W
                                                                          设置为:123456,根据自己的要求更改。
' N8 w6 k0 X0 w1 MAn optional company name []:sys                                        <--一个可选的公司名
6 r5 M( }, _, ^, }Using configuration from /home/tear/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf
6 `* T( {- [; G  JCheck that the request matches the signature' [1 O6 [4 ~8 `6 T9 [
Signature ok3 Z# ^9 h1 H' S1 x$ d- n
The Subject's Distinguished Name is as follows
" r! k  s: o( x6 B% qcountryName           RINTABLE:'CN'
' k0 w2 C, I- B* V; dstateOrProvinceName   RINTABLE:'GD'4 y; F4 }; K! a" k' v& z
localityName          RINTABLE:'ShenZhen'
+ h# i+ L+ v# C; q. _- n/ b! [organizationName      RINTABLE:'SYS'
! }: N6 A/ V3 a( Z9 |organizationalUnitNameRINTABLE:'tear'
( J# w  ~/ x1 P6 D2 Y. TcommonName            RINTABLE:'server'
; g2 N4 Q9 c6 ^1 H" M& F- dname                  RINTABLE:'tear'' v  \" p0 i& W9 W; p
emailAddress          :IA5STRING:'tear@sys.local'
' s$ y, S( H9 W; m( Q. z, HCertificate is to be certified until Aug 12 07:17:54 2026 GMT (3650 days)
9 L& I8 H, _8 S+ `* z0 xSign the certificate? [y/n]:y                                          <--输入 y
* ^' e0 }! c3 `, b% j3 P0 ^! J
/ G4 K+ h/ ~5 ^1 out of 1 certificate requests certified, commit? [y/n]y              <--输入 y' m# C" B( Y, Y* `+ `! Q
Write out database with 1 new entries6 A; P; |4 |  s6 S7 q3 C" |
Data Base Updated                                                      <--有这个提示为成功2 T  Y7 Q8 m- W' D
查看所生成的证书文件:$ c% q' l$ w; @, G9 U
[root@VPN-A 2.0]# ls keys/2 w, N5 w6 M" a+ C
01.pem  ca.key     index.txt.attr  serial      server.crt  server.key
. A9 G4 s" i0 n- jca.crt  index.txt  index.txt.old   serial.old  server.csr& U9 ?3 T" q, R. V7 g
5、生成客户端证书和 key 文件
( y8 j" Q' ?) j注意:客户端证书可以给不同的用户生成不同的证书和密钥文件,那样以后方便管理。6 [, n) S6 p7 k; v# Q# B8 Q
使用当前目录下的 build-key 命令
* ~! W# Z" |% l* E+ }  @+ f0 L& F[root@VPN-A 2.0]# ./build-key tear       <--在工作当中,这个其实就是使用者的名字( S. T5 t3 S& A3 ~% X6 j
Generating a 1024 bit RSA private key' E8 e" l9 ~* ^# B9 b7 J9 H
.....++++++- l( f) _+ c: N% d* O1 ^
.................................++++++3 r! V- \- k# ?9 V% Q) @* n5 E
writing new private key to 'tear.key'/ [# ]/ I2 n; v* u3 C2 A
-----8 O* U6 s/ o, x; H* q; w/ [3 z
You are about to be asked to enter information that will be incorporated- x1 ]1 p2 o4 q! y, B6 B
into your certificate request.2 D1 I8 @4 a& {/ Q: Y
What you are about to enter is what is called a Distinguished Name or a DN.) y) v1 k) ?  S( s1 A: U# R( ]! t* V
There are quite a few fields but you can leave some blank
3 G" a) B& w1 X6 \& X4 ZFor some fields there will be a default value,( f: b# ]; k. |& G1 A- U) k
If you enter '.', the field will be left blank.6 E. ~+ l+ O9 f, x( R% r$ @$ }9 ~( [
-----& `* W' d" c; W; n
Country Name (2 letter code) [CN]:                                     <--默认按“回车”即可
) g! b8 t6 a8 D- d0 T9 vState or Province Name (full name) [GD]:                               <--默认按“回车”即可) k! b) U9 s- Y. Y( t/ ~
Locality Name (eg, city) [ShenZhen]:                                   <--默认按“回车”即可
% i# W$ [( H8 H, u; UOrganization Name (eg, company) [SYS]:                                 <--默认按“回车”即可
7 ?% e" S# |  J8 X+ fOrganizational Unit Name (eg, section) [tear]:                         <--默认按“回车”即可# j1 f: t3 l1 B1 J
Common Name (eg, your name or your server's hostname) [tear]:          <--默认按“回车”即可
  H, U& l3 q- C8 D6 zName [tear]:                                                           <--默认按“回车”即可
5 @; _' G. b# |3 vEmail Address [tear@sys.local]:                                        <--默认按“回车”即可
( c) t, K" i/ I2 c3 c# @: u$ OPlease enter the following 'extra' attributes) R4 O8 c8 V8 p$ Z' T2 d8 |
to be sent with your certificate request
- t/ |5 g6 D. g! V( n) MA challenge password []:123456                                         <--要给一个密码,这个密码是在你发起证书请求的密码,这里. P, S0 v! a6 o- ~! _5 e+ M! j3 _4 ^) G
                                                                          设置为:123456,根据自己的要求更改。
. x' y9 P( |4 x5 YAn optional company name []:tear                                       <--默认按“回车”即可
6 ]4 H  j* y* G0 \; pUsing configuration from /home/tear/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf
! n# W) b; `$ HCheck that the request matches the signature) {3 C/ l" w) |  u
Signature ok" N+ y* s+ A& l$ W9 ]- q9 Q
The Subject's Distinguished Name is as follows
% m& ~4 O/ t4 g6 S! n! O! j0 YcountryName           RINTABLE:'CN'; P4 R0 c& ~4 o* W
stateOrProvinceName   RINTABLE:'GD'
* f# J& E9 b1 {/ s& N+ ]" VlocalityName          RINTABLE:'ShenZhen'
0 D! X+ u' T; i6 O, ^, A, `organizationName      :PRINTABLE:'SYS'
! C" L0 }4 W1 @" [organizationalUnitName:PRINTABLE:'tear') P5 ]. n1 n9 d# [
commonName            :PRINTABLE:'tear'" s$ F; w9 ?- p
name                  :PRINTABLE:'tear'6 I, K8 f( y, z' c/ f4 |  r- ]! H
emailAddress          :IA5STRING:'tear@sys.local'
. z3 b$ B; I) F$ P7 W6 xCertificate is to be certified until Aug 12 07:26:44 2026 GMT (3650 days)
" Y3 @% S: Q  o  k& gSign the certificate? [y/n]:y                                          <--输入 y9 Q. I. A! ?& ~

7 E( i1 J7 v! G( n3 z1 out of 1 certificate requests certified, commit? [y/n]y              <--输入 y% {0 h9 c1 L/ K6 I( o& j5 K1 |
Write out database with 1 new entries
7 G  K! F6 X9 T, x7 q; k8 tData Base Updated/ z+ d; e# N% d) F5 A) o
[root@VPN-A 2.0]# ls keys/; I- V; [" j  e  M0 s
01.pem  ca.crt  index.txt       index.txt.attr.old  serial      server.crt  server.key  tear.csr2 f# M6 Z( i: F
02.pem  ca.key  index.txt.attr  index.txt.old       serial.old  server.csr  tear.crt    tear.key
7 ?8 l0 Y0 z3 T4 |' [9 c# w: {# [# Q& u生成了 tear 用户的三个文件。' m3 ~, B, \% e$ j* i- R: V0 A
此时,就一共有两个证书及密钥分别是:公用的 CA 证书、服务端的证书、客户端的证书。
. n6 C) e; [+ F) A需要注意的是:如果使用 build-key 来创建用户的证书,那么这个用户只需要提供证书就可进行拨号连接,不需要密码。
- b3 n; h: _# O; j) @) r$ D: S下面创建一个需要使用证书和密码认证的用户证书及密钥文件。: M- h" j( Z! c0 d+ v: x2 W
使用当前目录下的 build-key-pass 命令:
( Z+ N. U8 U7 |; R[root@VPN-A 2.0]# ./build-key-pass tom0 V# S3 G3 R# a, w9 G& z
Generating a 1024 bit RSA private key
7 m" d8 Y% d; W7 ]. K: O# a  o. L.........................................++++++
' v, }; a0 d4 Q& N2 k! V....++++++
, C( G( i+ e- u; i% \writing new private key to 'tom.key'! ~: H3 y; ~) o7 j9 G* I+ K
Enter PEM pass phrase:                                   <--输入用户密码,当拨号时就会需要密码
6 o7 [6 C0 h8 t$ c0 T6 JVerifying - Enter PEM pass phrase:                       <--再次输入用户密码: J# l" N1 r! R: K! F
-----
5 |5 t+ E# ?' x' r* V# qYou are about to be asked to enter information that will be incorporated
8 b, y: h( v: [& `6 b3 p3 d/ k: tinto your certificate request." T- @1 E, ~5 X; ]) |. H3 P( i
What you are about to enter is what is called a Distinguished Name or a DN.
! L3 V  r6 B* G$ XThere are quite a few fields but you can leave some blank, H+ E) r" G: H9 f7 U, {
For some fields there will be a default value," i6 S7 G* H* _% h+ L" L
If you enter '.', the field will be left blank.0 I8 R  ~; p$ j
-----2 L: S& ^9 S/ Q& `; T$ m
Country Name (2 letter code) [CN]:                                    <--默认按“回车”即可' J% k; o7 Q# r$ F" }
State or Province Name (full name) [GD]:                              <--默认按“回车”即可
, m  k9 r$ ^7 V; GLocality Name (eg, city) [ShenZhen]:                                  <--默认按“回车”即可
+ n) J) C* l. A  K7 f* ~% y2 IOrganization Name (eg, company) [SYS]:                                <--默认按“回车”即可, H4 N6 d2 x: H0 I* h* @
Organizational Unit Name (eg, section) [tear]:                        <--默认按“回车”即可: a- d' y  f; v# s- m" H" f1 G; E9 L, w! t
Common Name (eg, your name or your server's hostname) [tom]:          <--默认按“回车”即可9 s3 y! H3 V8 K1 n" `
Name [tear]:                                                          <--默认按“回车”即可
7 u- |# z6 X( B2 L& yEmail Address [tear@sys.local]:                                       <--默认按“回车”即可# O. Y5 M8 v9 w
Please enter the following 'extra' attributes# r$ n0 R5 F% f9 ?
to be sent with your certificate request
$ M, s1 _( F* l2 {A challenge password []:123456                                        <--要给一个密码,这个密码是在你发起证书请求的密码,这里
' o1 D$ S0 f. E! i                                                                         设置为:123456,根据自己的要求更改。
7 S  {( Z1 E8 ^6 I2 cAn optional company name []:sys                                       <--默认按“回车”即可
0 U2 n9 H! t" d6 d% rUsing configuration from /home/tear/tools/openvpn/openvpn-2.2.2/easy-rsa/2.0/openssl-1.0.0.cnf7 A+ S  K( q6 H" t0 R5 i
Check that the request matches the signature$ l8 x" ~$ m! R; N" T7 K
Signature ok3 \" w8 w& S/ h# i: v: ^/ g! w
The Subject's Distinguished Name is as follows
# M( j0 _7 M5 {7 J$ d+ g1 qcountryName           :PRINTABLE:'CN'
! m# p0 o8 [0 c" j$ ^9 q( `) PstateOrProvinceName   :PRINTABLE:'GD'( Y( K/ T9 B# f* `+ h0 h
localityName          :PRINTABLE:'ShenZhen'# b+ d1 m( U. T, ^% Y
organizationName      :PRINTABLE:'SYS'2 I% a, u  B! t
organizationalUnitName:PRINTABLE:'tear'% C9 f& D9 `7 w& u' s
commonName            :PRINTABLE:'tom'
  c( ]! Y/ O* t: }/ f# {name                  :PRINTABLE:'tear'
1 t% v( |3 i2 l4 h6 ?2 ?1 ^emailAddress          :IA5STRING:'tear@sys.local'
5 q9 X% M% e- N' @2 {Certificate is to be certified until Aug 12 07:46:15 2026 GMT (3650 days)
4 b5 p0 ?% P! s" ?Sign the certificate? [y/n]:y                                          <--输入 y
% w; {! s$ O" n& T5 K4 |% b. n
# @2 s( `7 c( s1 out of 1 certificate requests certified, commit? [y/n]y              <--输入 y& a4 c# i7 u: z  `5 D) e& I
Write out database with 1 new entries# B/ [2 m9 B% |# x( l
Data Base Updated
  U+ Z2 P5 V1 \. W, Q# c[root@VPN-A 2.0]# ls keys/
4 M- a8 h2 L! i9 A2 I01.pem  ca.crt     index.txt.attr      serial      server.csr  tear.csr  tom.csr
) q" _; n5 z, D; y9 }  R' Y02.pem  ca.key     index.txt.attr.old  serial.old  server.key  tear.key  tom.key  G6 S4 p& I8 ~! f* l
03.pem  index.txt  index.txt.old       server.crt  tear.crt    tom.crt, r6 u0 R# u  x  z/ Y+ @& b, G
1 Y1 n' c9 s0 d8 N8 V
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-1 15:23:26 | 显示全部楼层
6、生成 generate difflie hellman parameters  
* |% B1 H7 v1 w# ]( K, c1 A8 f# T提示:Diffie Hellman parameters must be generated for the the OpenVPN Server。
, J1 f6 o8 |* F/ [% q- m% Y1 W. B$ W; ~  w生成传输进行密钥交换时用到的交换密钥协议文件。/ |. n; N* ~! w) E8 g
使用当前目录下的 build-dh 命令生成: z7 a: T! f' ?, x6 O. p& q" _/ f
[root@VPN-A 2.0]# ./build-dh
4 s! C; i& y; T# @0 F0 B6 \Generating DH parameters, 1024 bit long safe prime, generator 2
/ @0 l: k  h" A. ~This is going to take a long time6 Y! |3 |8 a; o: @$ ^
.............................................+............+....................................................................................................................................................................................................................+..............................................................................................................+...................+...+.......+......................................................++*++*++*
9 k; K/ Z% o( I. N; B: Z$ `这个步骤生成的是:
; B$ s+ W, `  o+ ^: P[root@VPN-A 2.0]# ls keys/dh1024.pem 8 N; F7 s8 K; q
keys/dh1024.pem  M  o1 ~& F, z. g2 q3 {. m% u1 R; ]
详解服务器及客户端的证书各文件用途! w* k3 J! Y3 x, x3 R: j$ @
      ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
5 n" Z* H" _4 M/ Q4 `      ┃ Filename    ┃      Needed By         ┃        Purpose             ┃ Secret┃
( C+ n8 J6 [1 f      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
! B& h5 ~# Z0 B  j2 T      ┃ ca.crt      ┃server + all clients    ┃  Root CA certificate       ┃ NO    ┃
. q8 ^6 h6 p; e& x! [      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫. J+ L% @( O: l# \. O" j( U$ Y/ P
      ┃ ca.key      ┃key singing machine only┃  Root CA key               ┃ YES   ┃
- B0 N3 _3 p  h; o      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
/ s0 }, S% k# |7 F- L      ┃ dh{n}.pem   ┃   server only          ┃  Diffie Hellman parameters ┃ NO    ┃4 B% ?! ?% N. i) c  ~! X- h
      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫! V/ {5 a4 d* [2 X1 N3 _
      ┃ server.crt  ┃   server only          ┃  Server Certificate        ┃ NO    ┃4 R: i1 `$ k0 M5 Q5 }* Q
      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫  \: H4 h5 V+ ^1 V
      ┃ server.key  ┃   server only          ┃  Server key                ┃ YES   ┃8 \, O! B" N  Y- g3 H5 ^' t
      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫5 h+ A2 R8 C8 t' ^; ?0 H! Y8 c
      ┃ tear.crt    ┃   tear only            ┃  tear  Certificate         ┃ NO    ┃- |$ Y/ W- }+ a
      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫( Q  E2 k* z9 {9 D4 K" n& j
      ┃ tear.key    ┃   tear only            ┃  tear key                  ┃ YES   ┃+ \( x- s+ x6 z  Q
      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫" T8 M* ?5 m  b" ^
      ┃ tom.crt     ┃   tom only             ┃  tom  Certificate          ┃ NO    ┃
, }0 a! [" p9 B1 h7 V3 {9 J      ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫+ o( I  W- I' d' }: [5 J% X: j
      ┃ tom.key     ┃   tom only             ┃  tom  key                  ┃ YES   ┃
' F" N, y# t0 B% Q      ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
6 l+ g; W- R5 W8 J$ a* V+ V
" S/ j- ^, L& v4 K: H为了防止恶意攻击(如 DOS、UDP port flooding),我们生成一个“HMAC firewall”
/ S( q; l4 U8 R1 A使用当前目录下的 openvpn 命令生成
4 X9 {" k: U0 z5 `6 C) L/ B[root@VPN-A 2.0]# openvpn --genkey --secret keys/ta.key
' ~5 k) y4 \  S& Q' Q) L: m[root@VPN-A 2.0]# ls keys/ta.key
  @; N, W2 l$ z8 Ukeys/ta.key! d! q: t; {0 {: I" H, f( A
7、详解服务器端 VPN 重要命令! }& Y& P% G7 B1 H1 [' r1 `
vars 脚本是用来创建环境变量,设置所需要的变量脚本
7 I# ^* x8 A/ m) m, Q! n' Uclean-all 脚本是创建生成 ca 证书及密钥文件所需要的文件及目录
" S3 O0 j; y# L$ d) C1 |" A2 sbuild-ca 脚本生成 ca 证书(交互)
; X' H! _2 y) Dbuild-dh 脚本生成 Diffie-Hellman 文件(交互)
4 f& {+ k0 E( O. lbuild-key-server 脚本生成服务端密钥(交互)
) u9 Q5 O! Y5 S4 @1 ^: ?build-key 脚本生成客户端密钥(交互)
4 [0 T. {$ W5 w0 Tbuild-key-pass 脚本生成客户端带密码的密钥(交互)
+ F. U9 b& Q, p1 Fbuild-dh 脚本生成 Diffie-Hellman 文件(交互)
# q  T' D% f' g' P  K- fpkitool 脚本直接使用 vars 的环境变量设置,直接生成证书(非交互)2 I/ i4 a- _$ {
8、详解服务器端 VPN server.conf 重要参数  R) u# e& y/ c0 S( q! `
1)拷贝 keys 及设置' z0 P' g$ V! ^6 h4 r
把所有的 keys 和配置拷贝到 /etc/openvpn 目录下. A% X6 \( I. x% N
[root@VPN-A 2.0]# mkdir -p /etc/openvpn
  X& p. N/ \7 D" l[root@VPN-A 2.0]# cd /home/tear/tools/openvpn/2 J  l( g& `; C! K
[root@VPN-A openvpn]# cd openvpn-2.2.2/easy-rsa/2.0/4 b4 M1 p; x0 W4 e
[root@VPN-A 2.0]# /bin/cp -ap keys /etc/openvpn/6 k2 M# ~, n# n. K
[root@VPN-A 2.0]# cd /home/tear/tools/openvpn/openvpn-2.2.2/sample-config-files// R- R6 i, T  W- G( n
[root@VPN-A sample-config-files]# /bin/cp server.conf client.conf /etc/openvpn/! F& _) Y1 a" v  q
[root@VPN-A sample-config-files]# tree /etc/openvpn/# Y' d; u: b6 K) o
[root@VPN-A sample-config-files]# ls /etc/openvpn/
; U  r0 g7 S: t1 Lclient.conf  keys  server.conf' p9 O9 ~8 b* a, o
服务端配置文件默认如下1 e% Z& E: x- e5 j  L
[root@VPN-A sample-config-files]# grep -Ev ";|#|^$" server.conf
3 I) K4 e# e- t/ U6 w  j. Sport 1194
! A2 v+ i  A! ^3 h/ {4 _, Hproto udp, V. r7 |1 f. y2 r. x% x/ T
dev tun
3 }6 s0 C" c$ g) L. wca ca.crt; M+ o. N8 d5 r! b
cert server.crt6 I  B/ u& v: j& e+ r# G, \, ^( o
dh dh1024.pem2 m! n" g1 j; M8 U5 Q
server 10.8.0.0 255.255.255.0
0 I: ~+ q" R. D' K2 mifconfig-pool-persist ipp.txt( S, q, O3 o' R
keepalive 10 120
5 n" Y& I: F* s) N3 J; ]8 P- mcomp-lzo
$ J; v% h# V. u6 }persist-key4 t0 L7 b7 O, ]% r1 Q+ a% y
persist-tun
0 L1 }* n2 b! i3 Vstatus openvpn-status.log
  R3 r7 U& ~6 [8 A5 jverb 3
3 N4 T; \2 k& [  M企业生产环境 server.conf 配置案例:
4 N) }' t2 d6 G+ h' W! c配置参数:                           参数说明:5 }* Z7 H9 U0 ]- R4 o. Q
local 124.43.12.115                  哪一个本地地址要被 OpenVPN 进行监听,一般是外网 IP 地址
0 z! K4 Z+ Y6 g& {6 mport 52115                           监听的端口,默认是 1194,这里为了安全起见,修改为 52115
. D! y$ S8 \3 A3 A7 Bproto upd                            指定监听的协议,当并发访问多时,推荐 tcp+ ?, o/ I5 G" h* V2 N: \1 ?4 a
dev tun                              vpn server 的模式采用路由模式,可选 tap 或 tun: R6 G% y5 a6 ]
ca ca.crt                            ca 证书,注意此文件和 server.conf 在一个目录下,否则要用绝对路径调用
& u" A  V1 g+ ]' X/ r" R) Vcert server.crt                      server 端证书
, @& D+ s# m( A1 c  nkey server.key                       server 端密钥
+ P0 _+ \* h1 R% d' O; f1 Jdh dh1024.pem                        密钥协议文件/ B; |8 G7 Y) [) ^1 J. I: B
server 10.8.0.0 255.255.255.0        这个是 vpn server 动态分配给 vpn client 的地址池,一般不需要更改,这个段; p  H1 H- e4 T. r3 f: \& I
                                     不要和任何网络地址段重复。+ \, L/ z8 b% ~) u
ifconfig-pool-persist ipip.txt
9 m- y+ k2 A8 q1 V$ `push "route 10.0.0.0 255.255.255.0"  这个是 VPN Server 所在的内网网段,如果有多个可以写多个 push ,注意,此命令# z* `- k" y9 w
                                     实际作用是在 vpn 客户端本地生成 vpn server 所在的内网网段通信,路由条目类似:
5 G) j7 `6 b" f2 V. x                                     10.0.0.0 255.255.255.0 10.8.0.9 10.8.0.10 1,如果想知道 VPN 到底在本地加了哪些9 q/ m: \5 M/ N' _1 i5 n9 U
                                     路由,可以在拨号前,客户端上命令执行 route print 记录下所有路由条目,然后在拨号
+ y6 K+ q1 B* I, ~$ k# f. y! c0 f                                     记录下所有路由条目,然后,用比较软件比较一下即可知道变化在哪。9 g% Z: r& E. a7 t5 o
                                     注意:可以有多条 push ,这是 openvpn 的特色。' `; |5 l( K6 A+ f& u5 N8 z3 i
client-to-clinet                     允许拨号的多个 vpn client 互相通信: B, c& \6 Y# F0 z% b( ]
duplicate-cn                         允许多个客户端使用同一个账号连接
5 g+ |- q* `& bkeepalive 10 120                     每 10 秒 ping 一次,若是 120 秒未收到包,即定客户端断线
8 z, |. g/ i) ]7 B5 n5 R9 O9 \0 T5 lcomp-lzo                             开启压缩功能% ]/ S4 W; x* Y
persist-key                          当 vpn 超时后,当重新启动 vpn 后,保持上一次使用的私钥,而不重新读取私钥
3 z5 {  V% C" S5 ^persist-tun                          通过 keepalive 检测 vpn 超时后,当重新启动 VPN 后,保持 tun 或 tap 设备自动
" k( \/ w2 j6 Z2 }8 Y' v                                     连接状态
* Z' ]0 N6 w$ \3 R+ G1 Jstatus openvpn-status.log            openvpn 日志状态信息/ z, f9 b+ g' W' Y% g' v
log /var/log/openvpn.log             日志文件$ v+ t2 w( l" n, X& v+ }! E
verb 3                               指定日志文件冗余+ {; h+ f) S2 F4 P! Y
当前实验环境 server.conf 内容:8 J# o  X2 ~5 y, g* l1 X
local 10.0.0.1) w  C9 I3 x8 v, A8 a2 o
port 52115  D& Z- X* S* a+ t5 F2 A% y) C
proto tcp
; d3 a& r, W( m. ]" _+ [dev tun. h! P% i0 [! X
ca /etc/openvpn/keys/ca.crt9 R* q: Q# v+ D0 `) v* D# d
cert /etc/openvpn/keys/server.crt
- d7 b# n. b7 a$ G: @. H5 Qkey /etc/openvpn/keys/server.key
! u3 Y4 {1 _9 s" `" R/ G+ b! ~dh /etc/openvpn/keys/dh1024.pem( E; O. ~, ?- {6 t) g
server 10.8.0.0 255.255.255.08 h* B: Q6 z" s- U3 `, ^# P
push "route 192.168.1.0 255.255.255.0"! f8 s- e$ a4 j5 T2 x- q
ifconfig-pool-persist ipp.txt2 y+ o! j) i$ V4 n  s& x
keepalive 10 120
9 v6 j" O# D! G! P, y9 acomp-lzo
8 z' F  ?+ X+ D6 W- u: \; r9 upersist-key
$ S# c$ f' _5 N, D: K$ cpersist-tun( g. J3 ~' X9 q8 l. p! h
status openvpn-status.log8 b: E; j! v" g* b% J
verb 37 x2 r: k1 _+ S2 l8 N, H. _
client-to-client
# h% P: j  |7 I5 Xduplicate-cn
# Y8 d& z) S1 q' c+ g* B8 Zlog /var/log/openvpn.log
9 j# [( a5 p  v( }. D9 j客户端默认配置文件:
1 g, m  @3 [. i" V) ]& h[root@VPN-A openvpn]# egrep -v "#|^;|^$" client.conf - q7 h( ~: @  x( @  k/ X
client4 p+ ]0 L: K+ d* ^' Z
dev tun( x/ u$ |$ K, Z" L5 s. a) b
proto udp$ j( M, r3 Y# P9 X! D
remote my-server-1 1194
5 i! l9 ]. R3 A& X7 a" x+ Sresolv-retry infinite
! |6 ~. l! m8 R( S( k7 @0 ~8 ?nobind
) {# m# K# y' o  Opersist-key% s: Q3 g1 U6 D5 C" |2 Q+ Y
persist-tun
- {7 Q/ b9 W7 l- w+ aca ca.crt3 V$ T4 N* X$ s( b% Z
cert client.crt
, c) q7 h; b  ?4 jkey client.key
% l4 L  e9 H- Q! F* B- {# zns-cert-type server
! @5 |8 g* Z+ p3 E, L$ l7 e5 ]: kcomp-lzo+ t4 Y5 N" o  U. `( a- T$ h
verb 3: I3 i9 [8 l# e' e4 g
实验中客户端 client.conf 内容为:
3 P: g) V! h7 q* Q$ Bclient
! u1 C4 C# L) k% M; S* _( adev tun
" F3 M# L+ L' h, s7 Lproto tcp                      <--与服务器使用同样的协议
5 @% V7 e1 ~, ~2 h# b# ?' dremote 10.0.0.1 52115          <--服务器外网 IP 地址,端口, z) e6 F, x: c5 D& [
resolv-retry infinite) v3 Z4 ?3 _" P) y1 w
nobind
+ C( V8 S2 w2 _7 Z. v* N1 n4 dpersist-key# g- E0 u' S, K2 P5 x9 Y# v2 b
persist-tun+ r; u& I1 R. s3 N
ca ca.crt
. ?/ V8 X" ^5 }! }! _cert tear.crt                  <--客户端证书
9 U: n5 {- U5 d- Q. ^key tear.key                   <--客户端密钥
4 \9 T; J" R- A3 p- fns-cert-type server, U5 T! R) l: a" t, \
comp-lzo
; l# e2 Z; j5 hverb 3( n4 [/ I/ u( d. _

# o" |1 y% ?+ j0 g7 o; K% h9、调试服务端 vpn 服务启动环境7 _% A- p  _  e# p
a)取消服务器上防火墙 iptables 对 openvpn (默认 1194,本例 52115)的拦截,以及允许服务进行转发
. L7 r! h& j1 @6 Qb)开启内核转发功能/ O1 T/ H$ g/ a2 ]+ v+ l
[root@VPN-A openvpn]# vi /etc/sysconfig/iptables
+ H6 R# P& N" d* b. }在大概第 10 行左右添加以下内容:2 V/ d* [" \( o
-A INPUT -p tcp --dport 52115 -j ACCEPT" N1 _" i$ a8 v, R. `) B& {* s
[root@VPN-A openvpn]# vi /etc/sysctl.conf
5 [4 o1 P7 M1 p' a7 F7 `net.ipv4.ip_forward = 0
9 x( q; s( W$ Q6 z修改为:! }3 G5 G) O) Q. Q9 N& f4 u+ R* x* E
net.ipv4.ip_forward = 1
" B1 W! U5 K$ [( [: z[root@VPN-A openvpn]# sysctl -p       <--操作生效
: D, q7 m7 C7 |. b  Y' ]1 C3 t. x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-1 15:56:28 | 显示全部楼层
10、启动 VPN server 服务并检查
# V6 |  o. H5 u1 N, }9 _3 s9 c: |! }# j  g; \4 O# u  ?
[root@VPN-A openvpn]# /usr/local/sbin/openvpn --config /etc/openvpn/server.conf &  <--在后台运行* L; g, x9 a# d9 [: M9 ~
) G5 A2 Y# n- o1 F7 F4 p
[root@VPN-A openvpn]# pkill openvpn                                                <--停止 openvpn服务
* L% v# V0 V& P# l4 H$ o# M# T: {7 A
注意:这里使用全路径来运行 openvpn ,是因为需要等下把它添加到 rc.local 文件里,作为开机自动启动。
- z: Y3 P* V' S+ A9 }6 r3 o# `) i& Y& E; O
[root@VPN-A openvpn]# netstat -lntup | grep vpn  V; l* ?2 O/ ?+ w5 J
tcp        0      0 10.0.0.1:52115              0.0.0.0:*                   LISTEN      21789/openvpn) Q# t0 i, q3 A. s7 p+ ^% P
; V# p" R3 u- j! x* b% ^/ K( i
用 netstat 命令查询服务是否启动。1 d0 \( J4 t& k0 n  T4 y8 B

! o/ j" w5 U% Q! l2 j" B4 v% Y添加到 rc.local 开启自动启动6 _! E1 E+ i% U( Q4 a1 Q
- n( V+ c, j5 C
[root@VPN-A openvpn]# echo '#startup openvpn service by tear' >> /etc/rc.local 0 q% b7 ?7 I, i' d( ]/ A" ^: G
, |- Q- k& n0 ]. r9 y
[root@VPN-A openvpn]# echo '/usr/local/sbin/openvpn --config /etc/openvpn/server.conf &' >> /etc/rc.local
# G: \9 M: R/ B
% g' E0 N: @2 {) Y' ]4 e9 k当 vpn 启动以后,本地会多一个虚拟网卡:! L& n) \: M# T; D* ]$ D- x" W* n

) @8 ~5 _& [1 l) ?[root@VPN-A openvpn]# ifconfig" K$ [% W2 M6 p! E' X, I
/ R8 W: ~8 y8 ?6 {
......1 I" B  R( [% T% n  j

- T# X1 y4 ^/ Btun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
0 a( H$ H: c7 @* c8 e+ }; j          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.2552 n( d' G7 m9 q7 K/ v2 O6 R2 r
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
; Q9 o! @" q3 p          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
8 W3 ]1 J) _$ I# U7 N4 t' n. B, ?, a          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
* H* X2 V5 n/ W1 `6 ~, V          collisions:0 txqueuelen:100 $ J1 a7 x: g# j% L% u8 I1 e
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
! t% u- v" p4 C9 E4 }) w3 l7 q$ \4 q
注意:也可以把 oepnvpn 启动方式弄成 service openvpn start 等操作。8 U8 t! L1 N: M% f' ~

0 T; e& L. D1 C在 openvpn 安装目录中已经有相关现成的文件,直接拷贝到 /etc/init.d/ 目录下,并重命名为 openvpn ,需要注意的是:
+ S! i" B. ~/ l/ P配置文件的名字就只可是 server.conf ,则不可以手动指定配置文件。2 E6 F% u# |4 z" w# f% U4 E
- M+ {) b0 [; C# M2 N: }! O
[root@VPN-A openvpn]# cp /home/tear/tools/openvpn/openvpn-2.2.2/sample-scripts/openvpn.init /etc/init.d/openvpn8 k, w! w8 |/ C4 Y" _, _7 c
. F! o5 s9 y+ t) m8 @' Q
修改 /etc/init.d/openvpn 文件,在 148 行:3 {( V) q; j6 _2 o1 O+ ]

! P) \, S0 w: r4 z148         for c in `/bin/ls *.conf 2>/dev/null`; do
8 ~' x7 x! I- D% n* X: J4 T, x2 ?* y# M" L
修改为:
7 D8 X8 V% N; v& J1 k' Q2 X) p$ u! Y' d7 q3 D; q2 D
148         for c in `/bin/ls server.conf 2>/dev/null`; do      
2 [1 C; U4 ?  F' O! Q* f* C6 O6 O$ q/ X& [2 I7 y
指定配置文件名,因为在 /etc/openvpn 目录下有两个 .conf 文件,所以在这里就需要指定。如果只有一个则不需要修改。9 B, [8 `7 s( h# G( f( [8 l" O
6 b: k- ^7 m  p
[root@VPN-A openvpn]# chmod 700 /etc/init.d/openvpn       <--设置权限# P' p) K6 ]: E$ u

6 H# F2 [1 |* t7 t. l[root@VPN-A openvpn]# chkconfig openvpn on                <--即可以使用 chkconfig 设置开机自动启动- r1 @8 j6 }3 f& {  k
( j4 K) G( V7 I% }. d$ r! B; z
[root@VPN-A openvpn]# service openvpn restart2 q! o/ l6 X6 Z5 s! `# I
5 y2 [! w! v4 F1 U5 z& T
11、安装 windows 客户端配置 VPN 连接9 P# U9 o2 Y, J! X* O/ r& k! ?

/ z: H1 t) ]  w: s- u+ v- fwindows 安装好客户端后(这里就默认安装到 C:\Program Files\OpenVPN\),3 S# n/ G# m3 p1 i

* }! A0 z0 o: j& W7 s打开 C:\Program Files\OpenVPN\config 目录,把这目录下所有文件删除。
  q! \( G- }! q6 ]0 ?$ q" p& H9 l1 n! I. s' C
然后建立以使用者名字命令的文件夹,把服务器上的 ca.crt 、tear.crt、tear.key 都放在这个目录里。
7 y: l8 A8 H  d7 e) D" m# t3 N. S) ^0 ^6 o) K+ y9 r$ `
并在这个目录下创建一个文件为 tear.ovpn ,注意:后缀名为 .ovpn 。0 I& y4 O3 d7 R1 d* [* h: F
2 c7 D' Z" _' n; w
内容为:
1 p9 n2 R- u2 L/ G+ M7 `0 }
7 p8 Z$ p( z6 A+ nclient1 E/ _! V& d# i- c  X* N3 u( b$ p: D  X2 m
dev tun
# X7 J% Z* X0 [proto tcp( Q: P( w1 m( h' O9 K
remote 10.0.0.1 52115/ M+ F3 w, z+ E) H* G- j# X
resolv-retry infinite# u! b. T9 @- ~6 I
nobind
2 v. Z: B: U* H& }3 X: s! opersist-key7 S1 C% P( K; H5 E
persist-tun' _1 h2 ^. }5 [2 ~) Y" m7 j* X
ca ca.crt8 Z" w- N2 R% S% R- M6 R/ o
cert tear.crt. t2 z  Z" F9 e! G
key tear.key
# X% U# K% [# v6 nns-cert-type server
4 ?9 i& E8 `5 \* z- V0 ?' ^) G4 Icomp-lzo
+ |, L+ x5 |" S: V7 Overb 37 q! L6 r, w  f5 S% B) y1 g
3 p' i  G* M8 j' X9 ^
注意:这里以 tear 用户做为测试。9 O5 m  m3 ]& b" n! s1 ~

3 M, w6 k# Z1 r9 U, H4 n2 \. q/ \运行 OpenVPN GUI 程序。
& d: W: ~  K% ?  P! w1 o; b! z9 ?, k+ s- u  g( D  D
点击右下角OpenVPN GUI,点击 content 。7 f% ?. n  d. N! ~

6 \, ]% u# @& `! h) w2 Y成功连接。
3 f# ~2 h8 ^1 |7 v9 |4 q/ Z9 D
. g+ ~4 z9 L3 o4 C0 I. ^' U3 e注意:如果有多个用户的配置文件时,右下角则会有多个用户可以选择。
+ O1 G) G% l3 P4 k6 |' f+ c. R, ^; Y- q0 B
12、调试客户端可以访问 VPN Server 所在内网的服务器。
8 r) L( B1 h5 }% s3 e& r  f( B) w. V( T3 H: g' R
注意:按照以上操作,客户端是可以成功拨号访问到 VPN Server 服务器。
: q0 \! Y4 k" `! Q# E; I  _+ l9 {, w. o2 r( B% K8 w
但是,因为 VPN Server 所在内网服务器的网关指的并不是 VPN Server 。如果指向的是 VPN Server5 c+ C2 ?: j  C$ @: I0 w* R
那么,客户端就可地正常的访问 VPN Server 。
" B, W0 U" f# C, F& \6 m. v2 U  d4 h8 S+ A
此时,在客户端上操作 ping VPN Server 所在内网的服务器:+ q9 q# \+ S( H" U
# d" R6 D& ~+ A
C:\Users\Administrator>ping 192.168.1.254
. E2 v) `2 z( P6 ^1 H
$ v% o' A6 a  O# g9 T正在 Ping 192.168.1.254 具有 32 字节的数据:
5 z8 ?# \1 x: w: c+ n6 _) U; @0 J请求超时。
, ~9 X' Y# U  u- j请求超时。" k% e9 Q( m6 |6 l2 M- _
请求超时。* d3 e% b* e2 `$ d2 l& s6 i
请求超时。' e+ Q' H  s% W. j. j

2 z6 d- `* H3 d$ c3 X192.168.1.254 的 Ping 统计信息:
- |; t5 D/ T3 ~* Z, z    数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
& v' j% k2 F% g3 e5 u2 I* i+ H: }
服务器上使用 tcpdump 抓包结果:; M8 Z+ s$ c' r: x8 H

2 ^: Y/ r0 H. P[root@OpenVPN-A keys]# tcpdump -nnn -s 10000 | grep -i icmp  \  @/ s/ a/ T0 }+ @
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode8 A5 ]! p; S: X# p( ?
listening on eth0, link-type EN10MB (Ethernet), capture size 10000 bytes
0 R" V" p6 |; @13:28:10.240185 IP 10.8.0.6 > 192.168.1.135: ICMP echo request, id 1, seq 19, length 40& ]0 G/ {+ ]. E/ W
13:28:15.117122 IP 10.8.0.6 > 192.168.1.135: ICMP echo request, id 1, seq 20, length 40
% F8 i) w/ O  G. p13:28:20.124361 IP 10.8.0.6 > 192.168.1.135: ICMP echo request, id 1, seq 21, length 40
2 V, M' t; t1 x9 i13:28:25.116514 IP 10.8.0.6 > 192.168.1.135: ICMP echo request, id 1, seq 22, length 40
- {, s& Y; u" R. o
- p2 S" f2 G; V% \会发现,数据包是有去无回的。
# h5 j$ l, q; M  S- F2 Z7 N  V
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-3-28 22:15 , Processed in 0.168279 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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