原本使用的是端口转发,想着提升安全程度,所以准备在家里的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
就可以轻松访问家里的设备了。