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

10年php菜鸟 2024-08-27 13:37:22 阅读 76

目的:在公司找一台闲置主机,安装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/

以下是配置文件中的一些路径

<code>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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。