centos7-openvpn

摘要

本文内容来源于网络,个人收集整理,请勿传播

待续。。。

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
环境:CentOS Linux release 7.3.1611 (Core)

查看os版本命令:[root@openvpn ~]# cat /etc/redhat-release

命令记录如下:

1
2
3
yum upgrade #更新源
yum install epel-release -y #安装epel库
yum install easy-rsa openssh-server lzo openssl openssl-devel openvpn NetworkManager-openvpn openvpn-auth-ldap -y #安装一系列相关软件、
拷贝配置文件:

1
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn #拷贝server.conf到/etc/openvpn目录下
编辑openvpn配置文件

1
vim /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
port 1194
proto tcp    #指定TCP协议(使用TCP协议如果连接上VPN后网络很慢,可以更改成使用UDP协议)
dev tun    #采用路由隧道模式
ca ca.crt
cert server.crt
key server.key    # This file should be kept secret 服务器密钥
dh dh2048.pem    #密钥交换协议文件
topology subnet
server 10.8.0.0 255.255.255.0    #给客户端分配地址池,注意:不能和VPN服务器内网网段相同
ifconfig-pool-persist ipp.txt
push "route 0.0.0.0 0.0.0.0"    #定义网关
push "route 192.168.0.0 255.255.255.0"    #推送vpn服务器内网网段给客户端
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 114.114.114.114"
;client-to-client #这里为了安全起见,我禁止了客户端间的互访
;duplicate-cn    #正式环境下建议注释掉,因为会有安全隐患
keepalive 10 120    #存活时间,10秒ping一次,120 如未收到响应则视为断线
tls-auth ta.key 0    # 第二个参数在服务器端应该为'0',在客户端应该为'1'。
cipher AES-256-CBC    # 选择一个密码加密算法。
comp-lzo    #传输数据压缩
max-clients 50    #最多允许 50 客户端连接
persist-key
persist-tun
status openvpn-status.log    # OpenVPN的状态日志
log-append openvpn.log    # OpenVPN的运行日志(追加)
verb 3
mute 20    # 相同类别的信息只有前20条会输出到日志文件中
更多配置参考请访问:http://www.softown.cn/post/137.html

准备配置证书文件

1
2
3
mkdir -p /etc/openvpn/easy-rsa/keys
cp -a /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
vi /etc/openvpn/easy-rsa/vars
修改vars配置的内容, 自定义设置各项值就可以。

复制代码
export KEY_COUNTRY="CN"
export KEY_PROVINCE="ZJ"
export KEY_CITY="HZ"
export KEY_ORG="xihu" #定义所在的组织
export KEY_EMAIL="airoot@hz.com"
export KEY_OU="westlake" #定义所在的单位
export KEY_NAME="openvpn" #定义openvpn服务器的名称
export KEY_CN="APEC" #这行配置,需要将前边的“#”号注释去掉。
复制代码
开始制作证书

1
2
3
4
5
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf
cd /etc/openvpn/easy-rsa #切换工作目录
source ./vars #让配置文件生效
./clean-all
./build-ca #之前已配置好相关参数,故执行命令后,按回车键,一直到结束即可。
创建服务端证书

1
./build-key-server server #创建通用名(common name)为"server"的证书文件
#按回车键进行,在提示输入密码的地方,设置一个密码如qaz123,在An optional company name处输入CNABB,最后输入两次“y”确认

生成防攻击的key文件

1
openvpn --genkey --secret keys/ta.key # 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
创建客户端证书

1
2
3
4
5
6
7
./build-dh #创建秘钥文件,耗时1分钟左右
ls /etc/openvpn/easy-rsa/keys/ #可以看到,有一个db2048.pem的文件产生。
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key ta.key /etc/openvpn
cd /etc/openvpn/easy-rsa

./build-key client #创建一个通用名(common name)为 client的客户端证书
#创建客户端证书文件,按回车进行,提示输入密码的地方,输入之前设置的证书密码 "qaz123",An optional company name处输入先前设置的公司名字(CNABB)。【一定要和先前输入的一样】

#另外注意:有多少个客户端就需要./build-key client 多少次,当然这里的client名字需不同。

1
ls /etc/openvpn/easy-rsa/keys/ #可以看到,生成了客户端的证书文件
设置iptables、路由转发

1
2
3
4
5
6
7
8
9
10
yum install -y iptables-services
systemctl enable iptables
systemctl stop firewalld #关闭firewall防火墙,我的OS没有预装防火墙,因此这条命令不用输,
systemctl start iptables #启动iptables
iptables -F #清空默认的iptables规则
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE #设置iptables NAT转发规则
service iptables save #保存防火墙规则
echo 1 > /proc/sys/net/ipv4/ip_forward #临时开启路由转发
vi /etc/sysctl.conf #编辑配置文件,修改以下配置,设置永久路由转发
net.ipv4.ip_forward = 1
启动openvpn

1
2
3
4
systemctl -f enable openvpn@server.service #设置启动文件
systemctl start openvpn@server.service #启动openvpn的命令

#注意,这里如果启动报错,说明你前面的server.conf配置文件有误,需要调试配置文件
openvpn客户端(电脑)连接vpn

把服务器上 /etc/openvpn/easy-rsa/keys/ 目录下的三个证书文件和一个Ddos防护文件,下载到客户端:

ca.crt,client.crt,client.key , ta.key
安装好openvpn客户端软件后,把以上文件存放到openvpn安装目录的config文件夹下,然后从sample-config文件夹内拷贝client.ovpn 到config文件夹下,编辑client.ovpn,指定openvpn服务器的ip地址。再根据服务器端的配置做相应修改,我的client.conf配置如下:

复制代码
client
dev tun
proto tcp
remote 服务器IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
comp-lzo
verb 3
mute 20
复制代码
配置好后,点击openvpn的客户端图标,连接vpn。 openvpn的图标显示绿色后,表示已经连接上vpn了。

openvpn客户端(手机)连接vpn

如果要使用手机连接则需要合并这几个文件到client.conf里,格式如下:

复制代码
client
dev tun
proto tcp
remote 服务器IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
comp-lzo
verb 3

删除或者注释掉以下几行内容:
在这里我把它们注释掉:
ca ca.crt  改为:#ca ca.crt
cert client.crt  改为:#cert client.crt
key client.key  改为:#key client.key
tls-auth ta.key 1  改为:#tls-auth ta.key 1

在最后面添加以下内容:
<ca>
ca.crt文件内容
</ca>
<cert>
client.crt文件内容
</cert>
<key>
client.key文件内容
</key>
key-direction 1
<tls-auth>
ta.key文件内容
</tls-auth>
复制代码