centos 7安装openvpn服务端,以及用到的一些问题。

目的:在公司找一台闲置主机,安装centos 7系统,配置好局域网静态ip,然后在公司路由器配置端口映射,使外网访问某些网站的时候,记录的ip地址是公司的ip。

1.centos7 安装 openvpn:

步骤 1:更新yum库

sudo yum update

步骤 2:安装EPEL仓库

sudo yum install epel-release

步骤 3:安装OpenVPN

sudo yum install openvpn easy-rsa -y

步骤 4:配置Easy-RSA 3

sudo mkdir /etc/openvpn/easy-rsa/
sudo cp -ai /usr/share/easy-rsa/3/
/etc/openvpn/easy-rsa/
*

cd /etc/openvpn/easy-rsa/
sudo ./easyrsa init-pki

步骤 5:创建CA和生成服务器证书,(需要设置密码,记录好)

sudo ./easyrsa build-ca
sudo ./easyrsa build-server-full server nopass

如果在/etc/openvpn/easy-rsa/pki/目录下找不到dh.pem文件,可能是因为你还没有生成Diffie-Hellman密钥交换参数。这是设置OpenVPN服务器所需的一个步骤,用于确保安全的密钥交换过程。你可以按照以下步骤生成这个文件:
生成Diffie-Hellman密钥交换参数
首先,确保你处于Easy-RSA的根目录下。如果你按照常规指南安装和配置Easy-RSA,它通常位于/etc/openvpn/easy-rsa/。
运行以下命令生成Diffie-Hellman参数:

sudo ./easyrsa gen-dh

生成完成后,dh.pem文件将被放置在/etc/openvpn/easy-rsa/pki/目录中。

server.conf文件中–tls-auth选项用于提供额外的安全层,防止未经授权的连接尝试,但它需要指向一个存在的密钥文件。

如果还没有ta.key文件,您需要生成它。在Easy-RSA目录下使用以下命令生成ta.key:

openvpn --genkey --secret ta.key

步骤 6:生成客户端证书,对于每个客户端,重复此步骤并为每个证书指定唯一的名称:

sudo ./easyrsa build-client-full client1 nopass

sudo ./easyrsa build-client-full {英文字母客户端证书名称} nopass=不使用密码

步骤 7:配置OpenVPN服务器,复制配置文件,修改编辑/etc/openvpn/server.conf文件,确保证书和密钥的路径正确指向之前生成的文件。

sudo cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/
以下是配置文件中的一些路径

ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key 
dh /etc/openvpn/easy-rsa/pki/dh.pem
crl-verify /etc/openvpn/easy-rsa/pki/crl.pem   #这个是为了删除证书的时候,立马失效
tls-auth /etc/openvpn/ta.key 0     #0是服务端配置
log         openvpn.log  #这个是日志文件,记得给权限 chmod 0755 openvpn.log
duplicate-cn        #这个是允许一个证书多个设备使用

步骤 8:启动OpenVPN服务并设置开机启动:

sudo systemctl start openvpn@server 《启动》
sudo systemctl enable openvpn@server
《开机启动》
sudo systemctl restart openvpn@server 《重启》
sudo systemctl status openvpn@server.service
《查看状态》

步骤9:配置防火墙,放行端口1194
sudo firewall-cmd --zone=public --add-port=1194/udp --permanent
sudo firewall-cmd --zone=public --add-port=1194/tcp --permanent
sudo firewall-cmd --reload

sudo firewall-cmd --zone=public --list-ports
可以让从 VPN 客户端来的流量在经过服务器转发到互联网时,使用服务器的 IP 地址
sudo firewall-cmd --zone=public --add-masquerade --permanent
如果 VPN 客户端的 IP 地址范围是 10.8.0.0/24,你还需要为这个网络添加专门的源地址转换规则:
sudo firewall-cmd --zone=public --add-rich-rule=‘rule family=“ipv4” source address=“10.8.0.0/24” masquerade’ --permanent
sudo firewall-cmd --reload

在服务器上,IP 转发需要被启用,以允许网络流量通过服务器转发。你可以通过编辑 /etc/sysctl.conf 文件并确保以下行是开启的:
net.ipv4.ip_forward = 1
sudo sysctl -p

修改后,运行 sudo sysctl -p 来应用更改。

关闭SELinux
临时关闭SELinux:你可以通过运行setenforce 0命令将SELinux设置为宽容模式。在这种模式下,SELinux仍然会记录违规行为,但不会阻止程序的运行。要恢复SELinux的强制模式,可以运行setenforce 1命令。
永久关闭SELinux:要永久关闭SELinux,你需要编辑SELinux的配置文件。使用文本编辑器(如vi或nano)打开/etc/selinux/config文件,找到SELINUX=这一行,并将其值改为disabled。保存文件并重启系统,SELinux就会被永久关闭。

最后
重载防火墙:firewall-cmd --reload
重新启动vpn:sudo systemctl restart openvpn@server

步骤10:手动配置客户端.ovpn文件,用来连接openvpn

#指定当前VPN是客户端
client
#使用tun隧道传输协议
dev tun
#使用udp协议传输数据
proto udp
#openvpn服务器IP地址端口号,转发的填写公网IP 加对应转发端口,填写公司ip,进行路由器映射
remote 8.8.1.8 1194
#断线自动重新连接,在网络不稳定的情况下非常有用
resolv-retry infinite
#流量转发,就是使用服务器ip
redirect-gateway def1
#不绑定本地特定的端口号
nobind
#指定CA证书的文件路径 手动下载到本地:/etc/openvpn/easy-rsa/pki/ca.crt
ca ca.crt
#指定当前客户端的证书文件路径 手动下载到本地:/etc/openvpn/easy-rsa/pki/issued/client1.crt
cert client1.crt
#指定当前客户端的私钥文件路径 手动下载到本地: /etc/openvpn/easy-rsa/pki/private/client1.key
key client1.key
#指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
verb 3
#通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-key
#检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
persist-tun
#使用ta.key防御攻击。服务器端的第二个参数值为0,客户端的为1 手动下载到本地:/etc/openvpn/ta.key
tls-auth ta.key 1
#如果要把所有的加密信息集成在一个文件中,tls-auth 需要以下申明
#key-direction 1

以下是把所有信息集成到一个文件中

client
dev tun
proto udp
remote 8.8.1.8 1194
resolv-retry infinite
nobind
redirect-gateway def1
key-direction 1
<ca>
的点点滴滴
</ca>
<cert>
的点点滴滴
</cert>
<key>
的点点滴滴
</key>
<tls-auth>
的点点滴滴
</tls-auth>
verb 3
persist-key
persist-tun

步骤11:自动创建客户端证书脚本和删除客户端证书脚本
证书目录:/etc/openvpn/client/keys

bash /etc/openvpn/client/add_vpnuser.sh client2
bash /etc/openvpn/client/del_vpnuser.sh client2

#!/bin/bash
 
set -e
 
keys_dir=/etc/openvpn/client/keys
easyras_dir=/etc/openvpn/easy-rsa
pki_dir=$easyras_dir/pki
 
for user in "$@"
 
do
    if [ -d "$keys_dir/$user" ]; then
        rm -rf $keys_dir/$user
        rm -rf $pki_dir/reqs/$user.req
        sed -i '/'"$user"'/d' $pki_dir/index.txt
    fi
    
    cd $easyras_dir
 
    ./easyrsa build-client-full $user nopass
 
    mkdir -p $keys_dir/$user
 
    cp $pki_dir/ca.crt $keys_dir/$user/
    cp $pki_dir/issued/$user.crt $keys_dir/$user/
    cp $pki_dir/private/$user.key $keys_dir/$user/
    cp /etc/openvpn/client/sample.ovpn $keys_dir/$user/$user.ovpn
    sed -i 's/admin/'"$user"'/g' $keys_dir/$user/$user.ovpn
    cp $easyras_dir/ta.key $keys_dir/$user/ta.key
 
    cd $keys_dir
    zip -r $user.zip $user
 
done
 
exit 0

# ! /bin/bash

set -e

keys_dir=/etc/openvpn/client/keys

easyras_dir=/etc/openvpn/easy-rsa/

for user in "$@"

	do
		cd $easyras_dir

        echo -e 'yes\n' | ./easyrsa revoke $user

        ./easyrsa gen-crl

        if [ -d "$keys_dir/$user" ]; then
			rm -rf $keys_dir/${user}*
		fi

		systemctl restart openvpn@server

	done

exit 0
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值