侧边栏壁纸
博主头像
cloudnative-blog博主等级

I can break through the limitations !

  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

安装openvpn

周锐豪
2023-10-15 / 0 评论 / 1 点赞 / 74 阅读 / 9845 字 / 正在检测是否收录...

1.安装openvpn依赖环境

yum install -y gcc epel-release lzo-devel pam-devel lz4-devel openssl-devel systemd-devel sqlite-devel lzo pam openssl-devel lzo-devel pam-devel

2.安装openvpn

yum install -y openvpn easy-rsa 

3.复制配置文件到/open/vpn根目录

[root@openvpn ~]# mkdir /etc/openvpn/easy-rsa
[root@openvpn ~]# cd /usr/share/doc/easy-rsa-3.0.8/
[root@openvpn easy-rsa-3.0.8]# cp vars.example /etc/openvpn/easy-rsa/vars 
[root@openvpn easy-rsa-3.0.8]# cp -r * /etc/openvpn/easy-rsa/ 
[root@openvpn ~]# cd /usr/share/easy-rsa/3.0.8/
[root@openvpn 3.0.8]# cp -rf * /etc/openvpn/easy-rsa/

[root@openvpn ~]# cd /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/
[root@openvpn sample-config-files]# cp server.conf /etc/openvpn/
[root@openvpn sample-config-files]# cp client.conf /etc/openvpn/

4.初始化pki和创建ca

[root@openvpn ~]# vim /etc/openvpn/easy-rsa/vars
set_var EASYRSA_REQ_COUNTRY     "CN"
set_var EASYRSA_REQ_PROVINCE    "Beijing"
set_var EASYRSA_REQ_CITY        "Bejing"
set_var EASYRSA_REQ_ORG         "bj"
set_var EASYRSA_REQ_EMAIL       "123456@163.com"
set_var EASYRSA_REQ_OU          "ww"

[root@openvpn ~]# cd /etc/openvpn/easy-rsa/
[root@openvpn easy-rsa]# ./easyrsa init-pki
[root@openvpn easy-rsa]# ./easyrsa build-ca
Enter New CA Key Passphrase:        123456           #输入ca key的密码
Re-Enter New CA Key Passphrase:     123456           #输入ca key的密码

#输入ca通用名称
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:openvpn-ca

5.创建请求申请服务器证书

[root@openvpn ~]# cd /etc/openvpn/easy-rsa/
[root@openvpn easy-rsa]# ./easyrsa gen-req server nopass
#输入通用的server名称
Common Name (eg: your user, host, or server name) [server]:openvpn-server
----------------------------------------------------------------------------------------------------

[root@openvpn easy-rsa]#  ./easyrsa sign server server
Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars

Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /etc/openvpn/easy-rsa/pki/easy-rsa-8978.ss8xeY/tmp.GEa79t
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key: 123456

6.创建 Diffie-Hellman 协议

[root@openvpn easy-rsa]# ./easyrsa gen-dh

7.生成ta密钥文件

[root@openvpn easy-rsa]# openvpn --genkey --secret /etc/openvpn/easy-rsa/ta.key

8.初始化pki

[root@openvpn ~]# cd /etc/openvpn/client/
[root@openvpn client]# cp -r /usr/share/easy-rsa/3.0.8/* .
[root@openvpn client]# ./easyrsa init-pki

9.编辑配置文件

9.1复制服务器证书文件

mkdir /etc/openvpn/data
cd /etc/openvpn/easy-rsa/pki/
cp ca.crt /etc/openvpn/data/
cp private/server.key /etc/openvpn/data/
cp issued/server.crt /etc/openvpn/data/
cp dh.pem /etc/openvpn/data/
cp ../ta.key /etc/openvpn/data/

9.2复制客户端的证书文件

cd /etc/openvpn/client/
cp /etc/openvpn/easy-rsa/pki/ca.crt .
cp ../easy-rsa/ta.key .

cat > client.conf << EOF
client                        #指定当前VPN是客户端
dev tun                       #使用tun隧道传输协议
proto udp                     #使用udp协议传输数据
remote 1.1.1.1  1194          #openvpn服务器公网IP地址端口号
resolv-retry infinite         #断线自动重新连接,在网络不稳定的情况下非常有用
nobind                        #不绑定本地特定的端口号
persist-key                   #通过keepalive检测超时后,重新启动VPN,不重新读取keys,保留第一次使用的keys
persist-tun                   #检测超时后,重新启动VPN,一直保持tun是linkup的。否则网络会先linkdown然后再linkup
ca ca.crt                     #指定CA证书的文件路径
cert ww.crt                   #指定当前客户端的证书文件路径
key ww.key                    #指定当前客户端的私钥文件路径
remote-cert-tls server        #OpenVPN客户端将验证服务器证书扩展KeyUsage
tls-auth ta.key 1             #启用 HMAC 防火墙。它是用于防止DDos攻击的额外安全层
cipher AES-256-CBC            #启用加密密码
comp-lzo                      #启用lzo数据压缩格式
verb 3                        #指定日志文件的记录详细级别,可选0-9,等级越高日志内容越详细
auth-nocache                  #OpenVPN在使用用户名/密码后立即忘记输入
EOF

9.3编辑配置文件

[root@openvpn ~]# vim /etc/openvpn/server.conf
78 ca /etc/openvpn/data/ca.crt                     #设置CA证书路径
79 cert /etc/openvpn/data/server.crt               #设置服务器证书路径
80 key /etc/openvpn/data/server.key                #服务器证书对应的私钥
85 dh /etc/openvpn/data/dh.pem                     #Diffie-Hellman文件路径
101 server 10.10.0.0 255.255.0.0                   #设置VPN子网,用与客户端获取IP
108 ifconfig-pool-persist /etc/openvpn/ipp.txt     #维护客户端IP
135 push "route 192.168.10.0 255.255.255.0"        #允许客户端访问内网192.168.10.0网段
200 push "dhcp-option DNS 202.106.196.115"         #设置客户端首选DNS
201 push "dhcp-option DNS 114.114.114.114"         #设置客户端备选DNS
244 tls-auth /etc/openvpn/data/ta.key 0            #ta 密钥设置,服务器端为 0, 客户端设为 1 
263 comp-lzo                                       #对数据进行压缩,服务器和客户端要保持一致
267 max-clients 1000                               #允许客户端的最大并发数
287 status /etc/openvpn/openvpn-status.log         #定期把 openvpn 的一些状态信息写到文件中

-----------------------------------------------------------------------------------------------
#注释
push “redirect-gateway def1 bypass-dhcp”       #重定向客户端网关为openvpn的地址  (不推荐)
优点: 客户端的所有网络流量都将经过openvpn服务器,也就是说可以访问openvpn服务器端的所有网段的主机
缺点: 自己电脑访问所有的流量都是经过openvpn的,网络会有延迟,本地如果跟openvpn服务器端相同的网段,那么会优先访问服务器端网段主机,这时候自己电脑的公网ip就是openvpn服务器的出口ip地址

push "route 192.168.10.0 255.255.255.0"        #允许客户端访问内网192.168.10.0网段 (推荐)
优点: 这里只配置了访问192.168.10.0网段资源的时候会通过openvpn来访问,限制了访问openvpn服务器的网段,剩下的流量则经过自己电脑的公网ip
缺点: 只能访问192.168.10.0网段的资源,要是想访问openvpn服务器端其他网段的话则另外添加一条路由
-----------------------------------------------------------------------------------------------

10.配置openvpn支持md5

不配置这个的话后面openvpn会出错导致连接不到,Centos 7移除了Openssl的MD5支持
openssl仍然默认以md5作为散列算法并且可以正确识别md5散列算法,所以就悲剧了,只有cenots7不好用。关键是这个错误是大错误被小错误还掩盖了一下,所以很难被发现。

export OPENSSL_ENABLE_MD5_VERIFY=1
export NSS_HASH_ALG_SUPPORT=+MD5

[root@openvpn ~]# vim /usr/lib/systemd/system/NetworkManager.service
[Service]
Environment="OPENSSL_ENABLE_MD5_VERIFY=1 NSS_HASH_ALG_SUPPORT=+MD5"

[root@openvpn ~]# systemctl daemon-reload
[root@openvpn ~]# systemctl restart NetworkManager

11.启动openvpn

[root@openvpn ~]# systemctl start openvpn@server 
[root@openvpn ~]# systemctl enable openvpn@server 
[root@openvpn ~]# netstat -nupat | grep 1194
udp        0      0 0.0.0.0:1194            0.0.0.0:*                           9566/openvpn

12.开启ipv4转发

[root@openvpn ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
[root@openvpn ~]# sysctl -p

13.开启firewall防火墙

systemctl start firewalld
systemctl enable firewalld
setenforce 0
firewall-cmd --add-port=1194/udp --permanent
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --permanent --direct --passthrough ipv4 -t nat POSTROUTING -o eth0 -j MASQUERADE -s 10.10.0.0/16
firewall-cmd --reload

14.创建用户脚本

[root@openvpn ~]# mkdir -p /etc/openvpn/script
[root@openvpn script]# cd /etc/openvpn/script
[root@openvpn script]# vim create_user.sh
#!/bin/sh
client_data=/etc/openvpn/client
easy_data=/etc/openvpn/easy-rsa
data=/etc/openvpn/data
tar=/usr/bin/tar

printer(){
   read -p "press enter tocontinue"
}

#1.创建vpn用户
read -p "输入创建的账户名: " name

#2.配置客户端证书
cd $client_data
./easyrsa gen-req $name

#3.导入证书请求文件
cd $easy_data
./easyrsa import-req /etc/openvpn/client/pki/reqs/${name}.req $name
./easyrsa sign client $name

#4.复制证书请求文件到client
mkdir $client_data/$name
cp $easy_data/pki/issued/${name}.crt $client_data/$name
cp $client_data/pki/private/${name}.key $client_data/$name
cp $client_data/ca.crt $client_data/$name
cp $client_data/ta.key $client_data/$name
cp $client_data/client.conf $client_data/$name/

sed -i "s/vpn_user/$name/g" $client_data/$name/client.conf
mv $client_data/$name/client.conf $client_data/$name/client.ovpn
cd $client_data
zip -q -r $data/${name}.zip $name

if [ $? -eq 0 ]
then
      echo "${name}用户创建成功"
else
      echo "${name}用户创建失败"
fi

15.删除用户脚本

[root@openvpn script]# vim delete_user.sh
#!/bin/sh
client_data=/etc/openvpn/client
easy_data=/etc/openvpn/easy-rsa
data=/etc/openvpn/data
tar=/usr/bin/tar

#删除vpn用户
read -p "输入删除的账户名: " name
cd $easy_data
./easyrsa revoke $name
./easyrsa gen-crl

#删除用户认证文件
cd $client_data
rm -f ${name}.*

rm -f $client_data/pki/private/${name}.key
rm -f $easy_data/pki/issued/${name}.crt

if [ $? -eq 0 ]
then
      echo "${name}用户删除成功"
else
      echo "${name}用户删除失败"
fi

16.创建一个用户

[root@openvpn script]# ./create_user.sh
输入创建的账户名: ww
writing new private key to '/etc/openvpn/client/pki/easy-rsa-2394.svuNMW/tmp.Tfyvp9'
Enter PEM pass phrase: 123456                                               #输入用户连接openvpn的密码
Verifying - Enter PEM pass phrase: 123456                                   #输入用户连接openvpn的密码

Common Name (eg: your user, host, or server name) [ww]:ww                   #输入用户名

Type the word 'yes' to continue, or any other input to abort.               #是否继续创建
  Confirm request details: yes                                                    
  
Enter pass phrase for /etc/openvpn/easy-rsa/pki/private/ca.key:  123456     #输入ca的密码
Signature ok

ww用户创建成功
1

评论区