openvpn部署之部署基于AD域认证访问内网

1 安装环境

Centos6.5

openvpn2.3.11

2 步骤

2.1 添加fedora的yum源

1
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm

2.2 安装openvpn

1
2
3
4
5
6
7
yum install openvpn -y

yum -y install openssl openssl-devel -y 

yum -y install lzo lzo-devel  -y 

yum install -y libgcrypt libgpg-error libgcrypt-devel

2.3 安装openvpn认证插件(LDAP认证使用)

1
yum install openvpn-auth-ldap -y

2.4 安装easy-rsa

由于openvpn2.3之后,在openvpn里面剔除了easy-rsa文件,所以需要单独安装

1
2
3
yum install easy-rsa
 
cp -rf /usr/share/easy-rsa/3.0.6 /etc/opevpn/easy-rsa

2.5 生成openvpn的key及证书

修改/opt/openvpn/etc/easy-rsa/2.0/vars参数

1
2
3
4
5
6
7
8
9
10
11
12
$ vi vars
export KEY_COUNTRY="CN"                 国家

export KEY_PROVINCE="ZJ"                省份

export KEY_CITY="NingBo"                城市

export KEY_ORG="TEST-VPN"               组织

exportKEY_EMAIL="81367070@qq.com"       邮件

export KEY_OU="baidu"                   单位

保存退出

2.5.1 创建服务器证书

./easyrsa clean-all 初始化目录,清理历史证书

./easyrsa build-ca 创建ca证书,设置ca证书密码,必须记着密码,为服务起名
1
./easyrsa gen-req server nopass 创建服务端证书,为server起名
2
./easyrsa sign server server 签约服务端证书,输入上面ca证书的密码
3
./easyrsa gen-dh 创建数据穿越密钥
4

2.5.2 创建客户端证书(使用客户端证书认证使用)

1
2
3
cd /etc/openvpn/client/
cp -rf /usr/share/easy-rsa/3.06 /etc/opevpn/client/
cd client/3.0.6

./easyrsa init-pki 初始化目录
5
./easyrsa build-ca 创建ca证书,记住密码,客户端登录要用
6
./easyrsa gen-req client1 创建客户端证书,输入客户端ca证书密码,也是客户端登陆密码
7
cd /etc/openvpn/easy-rsa/3.0.6
./easyrsa import-req /etc/openvpn/client/ 3.0.6/pki/reqs/client1.req client1 导入客户端证书
8

2.6 编辑openvpn服务端配置

2.6.1 拷贝配置文件

1
2
3
4
5
6
7
8
cd /etc/openpvn/easy-rsa/3.0.6/pki/
cp ca.crt /etc/openvpn/server/
cp private/server.key /etc/openvpn/server/
cp issued/server.crt /etc/openvpn/server/
cp dh.pem /etc/openvpn/server/
cp ca.crt /etc/openvpn/client/
cp issued/client1.crt /etc/openvpn/client/
cp /etc/openvpn/client/client/easyrsa3/pki/private/client1.key /etc/openvpn/client/
1
2
 cd /etc/openvpn/server
$ ls

9

1
2
cd /etc/openvpn/client
$ ls

10

2.6.2 配置服务端配置文件

1
$ cat /etc/openvpn/server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
port 1194
proto tcp
dev tun
# 证书路径
ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret
# 密钥路径
dh keys/dh.pem
server 10.8.0.0 255.255.255.0    //客户端分配的ip地址
push "route 172.20.17.0 255.255.255.0"  //推送客户端的路由
push "route 172.20.18.0 255.255.255.0"
push "route 172.20.19.0 255.255.255.0"
push "route 172.20.20.0 255.255.255.0"
push "route 172.20.22.0 255.255.255.0"
push "redirect-gateway"   //修改客户端的网关,使其直接走vpn流量,不配置走客户端流量
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo //客户端和服务端保持一致
persist-key
persist-tun
status openvpn-status.log //登录日志
verb 3
# LDAP认证插件,使用时配置
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
# 禁用客户端证书认证
client-cert-not-required
username-as-common-name 
log /var/log/openvpn.log

举例server.confLDAP方式配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
#################################################
# Sample OpenVPN 2.0 config file for #
# multi-client server. #
# #
# This file is for the server side #
# of a many-clients <-> one-server #
# OpenVPN configuration. #
# #
# OpenVPN also supports #
# single-machine <-> single-machine #
# configurations (See the Examples page #
# on the web site for more info). #
# #
# This config should work on Windows #
# or Linux/BSD systems. Remember on #
# Windows to quote pathnames and use #
# double backslashes, e.g.: #
# "C:\\Program Files\\OpenVPN\\config\\foo.key" #
# #
# Comments are preceded with '#' or ';' #
#################################################

# Which local IP address should OpenVPN
# listen on? (optional)
;local a.b.c.d
# Which TCP/UDP port should OpenVPN listen on?
# If you want to run multiple OpenVPN instances
# on the same machine, use a different port
# number for each one. You will need to
# open up this port on your firewall.
port 1194

# TCP or UDP server?
# ;proto tcp
# proto udp
proto tcp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap0" if you are ethernet bridging
# and have precreated a tap0 virtual interface
# and bridged it with your ethernet interface.
# If you want to control access policies
# over the VPN, you must create firewall
# rules for the the TUN/TAP interface.
# On non-Windows systems, you can give
# an explicit unit number, such as tun0.
# On Windows, use "dev-node" for this.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
# ;dev tap
dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel if you
# have more than one. On XP SP2 or higher,
# you may need to selectively disable the
# Windows firewall for the TAP adapter.
# Non-Windows systems usually don't need this.
;dev-node MyTap

# SSL/TLS root certificate (ca), certificate
# (cert), and private key (key). Each client
# and the server must have their own cert and
# key file. The server and all clients will
# use the same ca file.
#
# See the "easy-rsa" directory for a series
# of scripts for generating RSA certificates
# and private keys. Remember to use
# a unique Common Name for the server
# and each of the client certificates.
#
# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
# 证书路径
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key # This file should be kept secret

# Diffie hellman parameters.
# Generate your own with:
# openssl dhparam -out dh2048.pem 2048
# dh dh2048.pem
# 密钥路径
dh /etc/openvpn/dh.pem

# Network topology
# Should be subnet (addressing via IP)
# unless Windows clients v2.0.9 and lower have to
# be supported (then net30, i.e. a /30 per client)
# Defaults to net30 (not recommended)
;topology subnet

# Configure server mode and supply a VPN subnet
# for OpenVPN to draw client addresses from.
# The server will take 10.8.0.1 for itself,
# the rest will be made available to clients.
# Each client will be able to reach the server
# on 10.8.0.1. Comment this line out if you are
# ethernet bridging. See the man page for more info.
server 10.8.0.0 255.255.255.0

# Maintain a record of client <-> virtual IP address
# associations in this file. If OpenVPN goes down or
# is restarted, reconnecting clients can be assigned
# the same virtual IP address from the pool that was
# previously assigned.
ifconfig-pool-persist ipp.txt

# Configure server mode for ethernet bridging.
# You must first use your OS's bridging capability
# to bridge the TAP interface with the ethernet
# NIC interface. Then you must manually set the
# IP/netmask on the bridge interface, here we
# assume 10.8.0.4/255.255.255.0. Finally we
# must set aside an IP range in this subnet
# (start=10.8.0.50 end=10.8.0.100) to allocate
# to connecting clients. Leave this line commented
# out unless you are ethernet bridging.
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
# Configure server mode for ethernet bridging
# using a DHCP-proxy, where clients talk
# to the OpenVPN server-side DHCP server
# to receive their IP address allocation
# and DNS server addresses. You must first use
# your OS's bridging capability to bridge the TAP
# interface with the ethernet NIC interface.
# Note: this mode only works on clients (such as
# Windows), where the client-side TAP adapter is
# bound to a DHCP client.
;server-bridge

# Push routes to the client to allow it
# to reach other private subnets behind
# the server. Remember that these
# private subnets will also need
# to know to route the OpenVPN client
# address pool (10.8.0.0/255.255.255.0)
# back to the OpenVPN server.
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
# 发送路由
push "route 192.168.0.0 255.255.0.0"
# To assign specific IP addresses to specific
# clients or if a connecting client has a private
# subnet behind it that should also have VPN access,
# use the subdirectory "ccd" for client-specific
# configuration files (see man page for more info).

# EXAMPLE: Suppose the client
# having the certificate common name "Thelonious"
# also has a small subnet behind his connecting
# machine, such as 192.168.40.128/255.255.255.248.
# First, uncomment out these lines:
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
# Then create a file ccd/Thelonious with this line:
# iroute 192.168.40.128 255.255.255.248
# This will allow Thelonious' private subnet to
# access the VPN. This example will only work
# if you are routing, not bridging, i.e. you are
# using "dev tun" and "server" directives.

# EXAMPLE: Suppose you want to give
# Thelonious a fixed VPN IP address of 10.9.0.1.
# First uncomment out these lines:
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
# Then add this line to ccd/Thelonious:
# ifconfig-push 10.9.0.1 10.9.0.2

# Suppose that you want to enable different
# firewall access policies for different groups
# of clients. There are two methods:
# (1) Run multiple OpenVPN daemons, one for each
# group, and firewall the TUN/TAP interface
# for each group/daemon appropriately.
# (2) (Advanced) Create a script to dynamically
# modify the firewall in response to access
# from different clients. See man
# page for more info on learn-address script.
;learn-address ./script

# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"

# Certain Windows-specific network settings
# can be pushed to clients, such as DNS
# or WINS server addresses. CAVEAT:
# http://openvpn.net/faq.html#dhcpcaveats
# The addresses below refer to the public
# DNS servers provided by opendns.com.
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"
# 设置发送的DNS
push "dhcp-option DNS 114.114.114.114"

# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
# 开启客户端互相访问
client-to-client

# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
;duplicate-cn

# The keepalive directive causes ping-like
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
# 心跳侦测
keepalive 10 120

# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
# openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
# tls-auth ta.key 0 # This file is secret

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
# Note that v2.4 client/server will automatically
# negotiate AES-256-GCM in TLS mode.
# See also the ncp-cipher option in the manpage
# 加密方式
cipher AES-256-CBC

# Enable compression on the VPN link and push the
# option to the client (v2.4+ only, for earlier
# versions see below)
;compress lz4-v2
;push "compress lz4-v2"

# For compression compatible with older clients use comp-lzo
# If you enable it here, you must also
# enable it in the client config file.
# 和客户端保持一致
comp-lzo

# The maximum number of concurrently connected
# clients we want to allow.
;max-clients 100
# 最大连接数
max-clients 100

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#
# You can uncomment this out on
# non-Windows systems.
;user nobody
;group nobody

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun

# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
# 开启状态日志
status openvpn-status.log

# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "\Program Files\OpenVPN\log" directory).
# Use log or log-append to override this default.
# "log" will truncate the log file on OpenVPN startup,
# while "log-append" will append to it. Use one
# or the other (but not both).
;log openvpn.log
;log-append openvpn.log
# 日志路径
log /var/log/openvpn.log

# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3

# Silence repeating messages. At most 20
# sequential messages of the same message
# category will be output to the log.
;mute 20

# Notify the client that when the server restarts so it
# can automatically reconnect.
# explicit-exit-notify 1

# LDAP认证
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so "/etc/openvpn/auth/ldap.conf"
# 关闭证书认证
client-cert-not-required

2.7 修改openvpn-ldap-auth的配置文件:

1
vi /etc/openvpn/auth/ldap.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<LDAP>
    # LDAP server URL
    #更改为AD服务器的ip
    URL     ldap://172.20.20.10:389               
 
    # Bind DN (If your LDAP server doesn't support anonymous binds)
    # BindDN        uid=Manager,ou=People,dc=example,dc=com
    #更改为域管理的dn,可以通过ldapsearch进行查询,-h的ip替换为服务器ip,-d换为管理员的dn,-b为基础的查询dn,*为所有
    #ldapsearch -LLL -x -h 172.16.76.238 -D "administrator@xx.com" -W -b "dc=xx,dc=com" "*"
    BindDN      " cn=administrator,cn=users,dc=dealeasy,dc=local" 
 
    # Bind Password
    # Password  SecretPassword
    #域管理员的密码
    Password    passwd
 
 
    # Network timeout (in seconds)
    Timeout     15
 
    # Enable Start TLS
    TLSEnable   no
 
    # Follow LDAP Referrals (anonymously)
    FollowReferrals no
 
    # TLS CA Certificate File
    #TLSCACertFile  /usr/local/etc/ssl/ca.pem
 
    # TLS CA Certificate Directory
    #TLSCACertDir   /etc/ssl/certs
 
    # Client Certificate and key
    # If TLS client authentication is required
    #TLSCertFile    /usr/local/etc/ssl/client-cert.pem
    #TLSKeyFile /usr/local/etc/ssl/client-key.pem
 
    # Cipher Suite
    # The defaults are usually fine here
    # TLSCipherSuite    ALL:!ADH:@STRENGTH
</LDAP>
 
<Authorization>
    # Base DN
    #查询认证的基础dn
    BaseDN      " ou=de,dc=dealeasy,dc=local"
 
    # User Search Filter
    #SearchFilter   "(&(uid=%u)(accountStatus=active))"
    #其中sAMAccountName=%u的意思是把sAMAccountName的字段取值为用户名,后面“memberof=CN=myvpn,DC=xx,DC=com”指向要认证的vpn用户组,这样任何用户使用vpn,只要加入这个组就好了
    SearchFilter    "( (&(sAMAccountName=%u)(memberof=cn=myvpn,ou=vpn,ou=de,DC=dealeasy,DC=local"
 
    # Require Group Membership
    RequireGroup    false
 
    # Add non-group members to a PF table (disabled)
    #PFTable    ips_vpn_users
 
    <Group>
        #BaseDN     "ou=Groups,dc=example,dc=com"
        #SearchFilter   "(|(cn=developers)(cn=artists))"
        #MemberAttribute    uniqueMember
        # Add group members to a PF table (disabled)
        #PFTable    ips_vpn_eng
        BaseDN      " ou=vpn,ou=de,dc=dealeasy,dc=local"
        SearchFilter    " (cn=myvpn)"
        MemberAttribute     "member"
    </Group>
</Authorization>

例子:openldap配置示例
使用了上面安装的openvpn-auth-ldap认证插件
client-cert-not-required不再需要客户端证书,将改为使用OpenLDAP中的用户认证
注意:上面的ldap.confRequireGroup true以及Group的配置实际我们期望是必须是LDAP中的名称为vpn的组下的用户才可以登录VPN。但根据这个ISSUE https://github.com/threerings/openvpn-auth-ldap/issues/7,当前2.0.3的openvpn-auth-ldap不支持。因此如果只想限制LDAP中某些用户可以使用VPN的话,只能设置`RequireGroup false,然后可以在SearchFilter中做一些文章,比如(&(uid=%u)(ou=vpn))`即只有用户的ou字段为vpn的才可以。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<LDAP>
# LDAP server URL
URL ldap://192.168.0.129:389

# Bind DN (If your LDAP server doesn't support anonymous binds)
# BindDN uid=Manager,ou=People,dc=example,dc=com
BindDN cn=admin,dc=zhjx,dc=com
Password *******
# Bind Password
# Password SecretPassword

# Network timeout (in seconds)
Timeout 15

# Enable Start TLS
# TLSEnable yes
TLSEnable no

# Follow LDAP Referrals (anonymously)
# FollowReferrals yes
FollowReferrals no

# TLS CA Certificate File
# TLSCACertFile /usr/local/etc/ssl/ca.pem

# TLS CA Certificate Directory
# TLSCACertDir /etc/ssl/certs

# Client Certificate and key
# If TLS client authentication is required
#TLSCertFile /usr/local/etc/ssl/client-cert.pem
#TLSKeyFile /usr/local/etc/ssl/client-key.pem

# Cipher Suite
# The defaults are usually fine here
# TLSCipherSuite ALL:!ADH:@STRENGTH
</LDAP>

<Authorization>
# Base DN
BaseDN "ou=People,dc=zhjx,dc=com"

# User Search Filter
# SearchFilter "(&(uid=%u)(accountStatus=active))"
SearchFilter "(uid=%u)"

# Require Group Membership
RequireGroup false
#RequireGroup true

# Add non-group members to a PF table (disabled)
#PFTable ips_vpn_users

<Group>
BaseDN "ou=Group,dc=zhjx,dc=com"
SearchFilter "cn=openvpn"
MemberAttribute memberUid
# Add group members to a PF table (disabled)
#PFTable ips_vpn_eng
</Group>
</Authorization>

2.8 拷贝/etc/openvpn/key目录下的ca.crt证书,以备客户端使用。

注:客户端使用ca.crt和客户端配置文件即可正常使用openvpn了

2.8.1 配置客户端配置文件

注意:
客户端ca证书使用的是和服务端一样的ca证书,都是创建服务端证书用到的ca文件

1
$ vi client.ovpn
1
2
3
4
5
6
7
8
9
10
11
12
client
dev tun
proto tcp                  //注意协议,跟服务器保持一致
remote 172.20.20.25 1194     //xx.xx.com替换为你的服务器ip
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
auth-user-pass            //客户端使用账户密码登陆的选项,用于客户端弹出认证用户的窗口
comp-lzo
verb 3

例子:openldap方式客户端配置示例,与上方server版示例对照

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
##############################################
# Sample client-side OpenVPN 2.0 config file #
# for connecting to multi-client server. #
# #
# This configuration can be used by multiple #
# clients, however each client should have #
# its own cert and key files. #
# #
# On Windows, you might want to rename this #
# file so it has a .ovpn extension #
##############################################

# Specify that we are a client and that we
# will be pulling certain config file directives
# from the server.
# 服务端类型
client

# Use the same setting as you are using on
# the server.
# On most systems, the VPN will not function
# unless you partially or fully disable
# the firewall for the TUN/TAP interface.
# dev tap
# 与服务端一致
dev tun

# Windows needs the TAP-Win32 adapter name
# from the Network Connections panel
# if you have more than one. On XP SP2,
# you may need to disable the firewall
# for the TAP adapter.
#dev-node MyTap

# Are we connecting to a TCP or
# UDP server? Use the same setting as
# on the server.
# 与服务端一致
proto tcp
#proto udp

# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
# 连接地址与端口
remote XXX.imwork.net 1194
#remote my-server-2 1194

# Choose a random host from the remote
# list for load-balancing. Otherwise
# try hosts in the order specified.
;remote-random

# Keep trying indefinitely to resolve the
# host name of the OpenVPN server. Very useful
# on machines which are not permanently connected
# to the internet such as laptops.
resolv-retry infinite

# Most clients don't need to bind to
# a specific local port number.
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

# Try to preserve some state across restarts.
persist-key
persist-tun

# If you are connecting through an
# HTTP proxy to reach the actual OpenVPN
# server, put the proxy server/IP and
# port number here. See the man page
# if your proxy server requires
# authentication.
;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

# Wireless networks often produce a lot
# of duplicate packets. Set this flag
# to silence duplicate packet warnings.
;mute-replay-warnings

# SSL/TLS parms.
# See the server config file for more
# description. It's best to use
# a separate .crt/.key file pair
# for each client. A single ca
# file can be used for all clients.
# ldap方式只使用ca证书
ca ca.crt
# cert client.crt
# key client.key

# Verify server certificate by checking that the
# certicate has the correct key usage set.
# This is an important precaution to protect against
# a potential attack discussed here:
# http://openvpn.net/howto.html#mitm
#
# To use this feature, you will need to generate
# your server certificates with the keyUsage set to
# digitalSignature, keyEncipherment
# and the extendedKeyUsage to
# serverAuth
# EasyRSA can do this for you.
# remote-cert-tls server

# If a tls-auth key is used on the server
# then every client must also have the key.
#tls-auth ta.key 1

# Select a cryptographic cipher.
# If the cipher option is used on the server
# then you must also specify it here.
# Note that v2.4 client/server will automatically
# negotiate AES-256-GCM in TLS mode.
# See also the ncp-cipher option in the manpage
# 与服务的保持一致
cipher AES-256-CBC

# Enable compression on the VPN link.
# Don't enable this unless it is also
# enabled in the server config file.
# 与服务的保持一致
comp-lzo

# Set log file verbosity.
verb 3

# Silence repeating messages
;mute 20


# auth-user-pass

# 开启账户密码认证
ns-cert-type server
auth-user-pass

2.9 开启路由转发

1
vi /etc/sysctl.conf
  1. 修改参数

  2. net.ipv4.ip_forward = 1(默认为0,修改成1 表示开启路由转发,如果默认是空内容,请自行加上-腾讯云貌似就是空的)

重启sysctl生效路由转发:

1
sysctl -p

2.9.1 配置防火墙及路由转发策略:

1
2
3
4
5
6
7
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE        #做NAT转换

iptables -A INPUT -p TCP --dport 1194 -j ACCEPT                                         #OpenVPN服务端口,可自定义,不可冲突

service iptables save

service iptables restart

2.10 开启 HTTP代理连接openvpn服务器

通过此方法可以解决跨运营商连接中断及缓慢的问题,首先需要有一台三网HTTP代理服务器。公司使用的是景安的云服务器做HTTP代理。

参考资料:http://www.365mini.com/page/18.htm

1、 在景安云服务器部署代理软件CCProxy,并开启HTTP代理,端口443(可自定义)。

2、 在客户端配置文件添加如下语句。

1
http-proxy 122.114.100.229 443

配置完成。可以正常连接使用。

3 用到的文件下载:

=easy-rsa-master.zip
=lzo-2.09.tar.gz
=openvpn-2.3.11.tar.gz
=openvpn2.3.exe
=openvpn-auth-ldap-2.0.3-1.1.x86_64.rpm
=openvpn-auth-ldap-2.0.3-9.fc17.i686.rpm
=openvpn安装说明.docx

-------------本文结束感谢您的阅读-------------

本文标题:openvpn部署之部署基于AD域认证访问内网

文章作者:OperationMAN

发布时间:2018年09月10日 - 14:09

最后更新:2022年06月05日 - 21:06

原始链接:https://kxinter.gitee.io/2018/09/10/openvpn部署之部署基于AD域认证访问内网/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

坚持原创技术分享,您的支持将鼓励我继续创作!