安装openvpn服务


安装openvpn:

yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel easy-rsa openvpn

证书:

cp -rf /usr/share/easy-rsa/3.0.8/ /etc/openvpn/server/easy-rsa
cd /etc/openvpn/server/easy-rsa/
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa gen-dh
openvpn --genkey --secret ta.key

创建一些目录:

mkdir -p /var/log/openvpn/
mkdir -p /etc/openvpn/server/user
chown -R openvpn:openvpn /var/log/openvpn

配置:

cat > /etc/openvpn/server/server.conf <<EOF
port 55555
proto tcp
dev tun
user openvpn
group openvpn

#配置证书信息
ca /etc/openvpn/server/easy-rsa/pki/ca.crt
cert /etc/openvpn/server/easy-rsa/pki/issued/server.crt
key /etc/openvpn/server/easy-rsa/pki/private/server.key
dh /etc/openvpn/server/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/server/easy-rsa/ta.key 0

#配置账号密码的认证方式
auth-user-pass-verify /etc/openvpn/server/user/checkpsw.sh via-env
script-security 3
verify-client-cert none
username-as-common-name
client-to-client
duplicate-cn

#openvpn的虚拟网段,用来分配给客户端
server 10.8.0.0 255.255.0.0

#this line will redirect all traffic through our OpenVPN
# 重定向客户端的所有流量,否则访问服务端内网要配置路由
push "redirect-gateway def1"

# 推送给客户端的DNS解析地址
push "dhcp-option DNS 223.5.5.5"
push "dhcp-option DNS 114.114.114.114"

# 推送给客户端的路由配置,配置了redirect-gateway就不用配置下面的路由了
;push "route 192.168.1.0 255.255.255.0"
;push "route 192.168.2.0 255.255.255.0"

compress lzo
cipher AES-256-CBC
keepalive 10 120
persist-key
persist-tun
verb 3

log /var/log/openvpn/server.log
log-append /var/log/openvpn/server.log
status /var/log/openvpn/status.log
EOF

密码文件:

echo 'mytest mytestpass' >> /etc/openvpn/server/user/psw-file
chmod 600 /etc/openvpn/server/user/psw-file
chown openvpn:openvpn /etc/openvpn/server/user/psw-file

创建检查密码脚本:

cat > /etc/openvpn/server/user/checkpsw.sh <<EOF
#!/bin/sh

PASSFILE="/etc/openvpn/server/user/psw-file"
LOG_FILE="/var/log/openvpn/password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >>  ${LOG_FILE}
  exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=
\"${password}\"." >> ${LOG_FILE}
  exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=
\"${password}\"." >> ${LOG_FILE}
exit 1
EOF

修改权限数组:

chmod 700 /etc/openvpn/server/user/checkpsw.sh
chown openvpn:openvpn /etc/openvpn/server/user/checkpsw.sh

添加iptables规则:

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

开机自动添加iptables规则:貌似用iptables管理规则有点问题,不能转发,关掉iptables后重新添加规则又好了。

yum install -y iptables-services
systemctl enable iptables.service
service iptables save

开启ipv4转发:

临时修改:

echo 1 > /proc/sys/net/ipv4/ip_forward

永久修改:

cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 1
EOF

sysctl -p

启动服务:

cd /etc/openvpn/server/
ln -sv server.conf .service.conf
systemctl start openvpn-server@.service.service && systemctl status openvpn-server@.service.service

启动服务:

nohup openvpn /etc/openvpn/server/server.conf &


客户端配置文件:需要将 ca.crt、和 ta.key文件下载到本地配置,并创建 client.ovpn内容如下。

client
proto tcp
dev tun
auth-user-pass
remote your.domain.com 55555 # openvpn服务器地址和端口
ca ca.crt
tls-auth ta.key 1
remote-cert-tls server
cipher AES-256-CBC
auth-nocache
persist-tun
persist-key
compress lzo
verb 3
mute 10
reneg-sec 0 # 默认值3600,一个小时进行一次TSL重新协商,会重连,0表示禁用TSL重协商


openvpn win客户端下载:

https://www.techspot.com/downloads/5182-openvpn.html

官方配置文件参考:

https://github.com/OpenVPN/openvpn/blob/master/sample/sample-config-files/server.conf

参考文章:

jianshu.com/p/637b4123fc92 
howtoing.com/how-to-install-openvpn-on-centos-7


linux客户端:

ls /etc/openvpn/client
ca.crt
ta.key

配置文件:

vim /etc/openvpn/client/client1.conf

client
proto tcp
dev tun
auth-user-pass
remote your.domain.com 55555
ca /etc/openvpn/client/ca.crt
tls-auth /etc/openvpn/client/ta.key 1
remote-cert-tls server
cipher AES-256-CBC
auth-nocache
persist-tun
persist-key
compress lzo
verb 3
mute 10
reneg-sec 0

启动:openvpn-client@配置文件名.service

systemctl start openvpn-client@client1.service && systemctl status openvpn-client@client1.service



监控openvpn


openvpn_exporter地址:

https://github.com/kumina/openvpn_exporter

没有二进制需要编译:

yum install go -y

解压编译:编译过程当中需要从github上下载包,所以根据网络情况可能需要配置代理。

tar -xf v0.3.0.tar.gz
cd openvpn_exporter-0.3.0/
go build -o openvpn_exporter main.go
mkdir /usr/local/openvpn_exporter/
mv openvpn_exporter /usr/local/openvpn_exporter/

        openvpn_exporter是读取openvpn的状态文件来读取指标的,所以要配置openvpn状态文件的位置。在openvpn 的配置文件 /etc/openvpn/server/server.conf 如下指令是配置状态文件的。

status /var/log/openvpn/status.log

启动exporter:

./openvpn_exporter -openvpn.status_paths /var/log/openvpn/status.log &

创建systemd服务文件:

[Unit]
Description=Prometheus OpenVPN Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/openvpn_exporter/openvpn_exporter -openvpn.status_paths /var/log/openvpn/status.log

Restart=on-failure
KillMode=process
RestartSec=10
[Install]
WantedBy=multi-user.target

开机启动:

systemctl start openvpn_exporter.service && systemctl status openvpn_exporter.service

导入面板:

https://grafana.com/grafana/dashboards/10562



打通两地网络:


        要打通两地网络openvpn的隧道网络的网段不能相同,如图的10.8.0.0/24 和 10.6.0.0/24。两地的局域网的网段也不能相同,如图的192.168.0.1/24 和 192.168.1.0/24。两地分别用自己的客户端连接对方的服端务,这样两地的网络就可以互通了。其他机器通过配置路由规则转发流量即可,或在路由器中配置静态路由。