原本使用的是端口转发,想着提升安全程度,所以准备在家里的centos7上搭建一个openvpn来提供在外面访问家里的设备

准备

centos一台或者vps 客户端软件### 安装依赖

1
[root@100 ~]# yum install -y lz4-devel lzo-devel pam-devel openssl-devel systemd-devel sqlite-devel net-toos autoconf automake libtool ncurses-devel

使用源码包的方式来编译安装

1
2
3
4
5
[root@100 ~]# https://github.com/OpenVPN/openvpn/archive/v2.4.9.tar.gz
[root@100 ~]# autoreconf -i -v -f
[root@100 ~]# ./configure --prefix=/usr/local/openvpn --enable-lzo --enable-lz4 --enable-crypto --enable-server --enable-plugins --enable-port-share --enable-iproute2 --enable-pf --enable-plugin-auth-pam --enable-pam-dlopen --enable-systemd
[root@100 ~]# make && make install
[root@100 ~]# ln -s /usr/local/openvpn/sbin/openvpn /usr/local/sbin/openvpn

修改配置文件

1
2
[root@100 ~]# vi /usr/local/openvpn/lib/systemd/system/openvpn-server\@.service
ExecStart=/usr/local/openvpn/sbin/openvpn --config server.conf

开启转发功能

1
2
3
4
5
[root@100 ~]# grep 'net.ipv4.ip_forward = 1' /etc/sysctl.conf || echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@100 ~]# sysctl -p
[root@100 ~]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o ens192 -j MASQUERADE
[root@100 ~]# iptables-save > /etc/sysconfig/iptables
[root@100 ~]# iptables -L -n -t nat

配置证书

1
2
3
4
5
[root@100 ~]# wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.7.tar.gz 
[root@100 ~]# mv v3.0.7.tar.gz easy-rsa-3.0.7.tar.gz 
[root@100 ~]# tar -xvf easy-rsa-3.0.7.tar.gz 
[root@100 ~]# cd easy-rsa-3.0.7/easyrsa3 
[root@100 ~]# cp -a vars.example vars

vars文件可修改可不修,这里就不修改了 初始化创建CA根证书

1
2
3
4
5
[root@100 ~]#  ./easyrsa init-pki 
[root@100 ~]#  ./easyrsa build-ca 会提示输入两次PEM密码 提示输入common name 随意设置生成服务器证书
[root@100 ~]# ./easyrsa build-server-full server nopass
[root@100 ~]# ./easyrsa gen-dh 创建diffie-hellman,确保key穿越不安全网络的命令生成客户端证书
[root@100 ~]# ./easyrsa build-client-full zhangsan # 让你输入密码,后续VPN连接时会使用

生成ta.key

1
2
3
4
5
6
7
[root@100 ~]#  openvpn --genkey --secret ta.key 将证书保存到/etc/openvpn/server/中
[root@100 ~]# mkdir -p /etc/openvpn/server/
[root@100 ~]# cp -a pki/ca.crt /etc/openvpn/server/
[root@100 ~]# cp -a pki/private/server.key /etc/openvpn/server/
[root@100 ~]# cp -a pki/issued/server.crt /etc/openvpn/server/
[root@100 ~]# cp -a pki/dh.pem /etc/openvpn/server/
[root@100 ~]# cp -a ta.key /etc/openvpn/server/

配置服务端文件 /etc/openvpn/server/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
[root@100 ~]# vi /etc/openvpn/server/server.conf # 配置文件内容
local 0.0.0.0
port 1194
proto tcp
dev tun
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
;client-to-client
;duplicate-cn
keepalive 10 120
tls-auth /etc/openvpn/server/ta.key 0
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
;comp-lzo
max-clients 1000
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
log  /var/log/openvpn.log
verb 3
;explicit-exit-notify 1

win使用

下载并安装openvpn打开配置文件config 创建用户名文件夹 ca.crt.ta.key 以及下面的两个XX.crt,XX.key都是我们刚才生成的 前两个在/etc/openvpn/server中 后者在pki的issued和private中 XX.ovpn文件则需要按照下面填写

文件名 windows为client.ovpn,Linux为client.conf

client dev tun proto tcp remote XXX.XXX 1194 #XXX填写服务ip resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert XXX.crt #name.crt key XXX.key #name.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC compress lz4-v2 verb 3 就可以轻松访问家里的设备了。