续1补充-Centos7安装openvp-超详细

本篇文章为上一篇文章的补充

问题1.为啥按照步骤安装,连接vpn后地址不是vpn服务端的IP地址。

是因为上一篇文章搭建的是内网VPN,也就是客户端访问服务端的内网网络。

下面是配置连接vpn后使用服务端IP当做客户端的出口IP步骤:

1.全部流量使用服务端出口IP

服务端配置:

原配置
#__server.conf—stat___
#端口
port 1194
#协议
proto tcp
dev tun
#ca证书文件
ca /data/openvpn/certificate/ca.crt
#服务端证书文件
cert /data/openvpn/certificate/openvpnserver.crt
#服务端私钥文件
key /data/openvpn/certificate/openvpnserver.key
#交换秘钥文件
dh /data/openvpn/certificate/dh.pem
#安全增强文件,0是服务端,1是客户端
tls-auth /data/openvpn/certificate/ta.key 0
#分配客户端IP的网段,不能和服务器一个网段,不能冲突
server 10.8.0.0 255.255.255.0
#运行通讯的内网路由,可以多条
push "route 192.168.0.0 255.255.255.0"
#会话检测,每十秒测试一下,超过120秒没回应就认为对方down
keepalive 10 120
#加密算法
cipher AES-256-CBC
#压缩算法
compress lz4-v2
#推送客户端使用lz4-v2算法
push "compress lz4-v2"
#最大客户端数
max-clients 100
#运行openvpn的用户和用户组
user openvpn
group openvpn
#状态日志
status  /data/openvpn/logs/openvpn-status.log
log-append /data/openvpn/logs/openvpn.log
#日志级别
verb 3
mute 20
#__server.conf—end_
修改后配置
#__server.conf—stat___
#端口
port 1194
#协议
proto tcp
dev tun
#ca证书文件
ca /data/openvpn/certificate/ca.crt
#服务端证书文件
cert /data/openvpn/certificate/openvpnserver.crt
#服务端私钥文件
key /data/openvpn/certificate/openvpnserver.key
#交换秘钥文件
dh /data/openvpn/certificate/dh.pem
#安全增强文件,0是服务端,1是客户端
tls-auth /data/openvpn/certificate/ta.key 0
#分配客户端IP的网段,不能和服务器一个网段,不能冲突
server 10.8.0.0 255.255.255.0
#会话检测,每十秒测试一下,超过120秒没回应就认为对方down
keepalive 10 120
#加密算法
cipher AES-256-CBC
#压缩算法
compress lz4-v2
#推送客户端使用lz4-v2算法
push "compress lz4-v2"
#最大客户端数
max-clients 100
#运行openvpn的用户和用户组
user openvpn
group openvpn
#状态日志
status  /data/openvpn/logs/openvpn-status.log
log-append /data/openvpn/logs/openvpn.log
#日志级别
verb 3
mute 20
#路由
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 114.114.114.114"
#__server.conf—end_

在这里插入图片描述

优缺点

优点:所有流量出口都是vpn服务端的地址,
缺点:因为配置成这样的话,客户端的请求都会走到vpn服务器,然后再走到互联网;假如你本地宽带是100M,vpn服务端带宽是1M,那么用这种模式,你连上vpn实际的带宽就是1M,也就是vpn服务端的带宽数

2.指定流量使用服务端出口IP

服务端配置:

原配置
#__server.conf—stat___
#端口
port 1194
#协议
proto tcp
dev tun
#ca证书文件
ca /data/openvpn/certificate/ca.crt
#服务端证书文件
cert /data/openvpn/certificate/openvpnserver.crt
#服务端私钥文件
key /data/openvpn/certificate/openvpnserver.key
#交换秘钥文件
dh /data/openvpn/certificate/dh.pem
#安全增强文件,0是服务端,1是客户端
tls-auth /data/openvpn/certificate/ta.key 0
#分配客户端IP的网段,不能和服务器一个网段,不能冲突
server 10.8.0.0 255.255.255.0
#运行通讯的内网路由,可以多条
push "route 192.168.0.0 255.255.255.0"
#会话检测,每十秒测试一下,超过120秒没回应就认为对方down
keepalive 10 120
#加密算法
cipher AES-256-CBC
#压缩算法
compress lz4-v2
#推送客户端使用lz4-v2算法
push "compress lz4-v2"
#最大客户端数
max-clients 100
#运行openvpn的用户和用户组
user openvpn
group openvpn
#状态日志
status  /data/openvpn/logs/openvpn-status.log
log-append /data/openvpn/logs/openvpn.log
#日志级别
verb 3
mute 20
#__server.conf—end_
修改后配置
#__server.conf—stat___
#端口
port 1194
#协议
proto tcp
dev tun
#ca证书文件
ca /data/openvpn/certificate/ca.crt
#服务端证书文件
cert /data/openvpn/certificate/openvpnserver.crt
#服务端私钥文件
key /data/openvpn/certificate/openvpnserver.key
#交换秘钥文件
dh /data/openvpn/certificate/dh.pem
#安全增强文件,0是服务端,1是客户端
tls-auth /data/openvpn/certificate/ta.key 0
#分配客户端IP的网段,不能和服务器一个网段,不能冲突
server 10.8.0.0 255.255.255.0
#注释下条---------运行通讯的内网路由,可以多条
#push "route 192.168.0.0 255.255.255.0"
#会话检测,每十秒测试一下,超过120秒没回应就认为对方down
keepalive 10 120
#加密算法
cipher AES-256-CBC
#压缩算法
compress lz4-v2
#推送客户端使用lz4-v2算法
push "compress lz4-v2"
#最大客户端数
max-clients 100
#运行openvpn的用户和用户组
user openvpn
group openvpn
#状态日志
status  /data/openvpn/logs/openvpn-status.log
log-append /data/openvpn/logs/openvpn.log
#日志级别
verb 3
mute 20
#新增的信息------------------------路由
push "redirect-gateway def1 bypass-dhcp" 
push "dhcp-option DNS 114.114.114.114"
#__server.conf—end_

客户端配置

原配置
client
dev tun
proto tcp
remote 124.70.49.106 1194
resolv-retry infinite
nobind
ca ca.crt
cert zhangsan.crt
key zhangsan.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
compress lz4-v2
修改后的配置
client
dev tun
proto tcp
remote 124.70.49.106 1194
resolv-retry infinite
nobind
ca ca.crt
cert zhangsan.crt
key zhangsan.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
compress lz4-v2
#新增的配置
route-nopull
route 11.0.0.0 255.255.255.0 vpn_gateway

#这样的话客户端只有访问11.0.0.0/24的地址才会走vpn隧道,也就是会使用vpn服务端的IP地址,访问其他地址还是会走本地网络。

优缺点

优点;灵活
缺点:新增一个地址就需要配置一条

问题2.客户端证书不好生成

这个其实写个脚本就可以,我这边提供一个脚本:

脚本

#openvpn-client-create.sh
#!/bin/bash
#
#导入functions
. /etc/init.d/functions
#OPENVPN服务端的IP
OPENVPN_SERVER=124.70.49.106
#OPENVPN服务端的端口
OPENVPN_PORT=1194

#如果存在证书就删除证书
remove_cert () {
    rm -rf /data/openvpn/client/${NAME}
    find /data/openvpn/ -name "$NAME.*" -delete
}
#创建证书
create_cert () {
    cd /data/openvpn/easy-rsa-client/
    ./easyrsa gen-req ${NAME} nopass <<EOF

EOF
    cd /data/openvpn/easy-rsa-server/
    sed -i "s/set_var EASYRSA_CERT_EXPIRE.*$/set_var EASYRSA_CERT_EXPIRE\t$OPENVPN_DATA/g" ./vars
    ./easyrsa import-req /data/openvpn/easy-rsa-client/pki/reqs/${NAME}.req ${NAME}
    ./easyrsa sign client ${NAME} <<EOF
yes
EOF

    mkdir /data/openvpn/client/${NAME}
    cp /data/openvpn/easy-rsa-server/pki/issued/${NAME}.crt /data/openvpn/client/${NAME}
    cp /data/openvpn/easy-rsa-client/pki/private/${NAME}.key /data/openvpn/client/${NAME}
    cp /data/openvpn/certificate/{ca.crt,ta.key} /data/openvpn/client/${NAME}

#生产客户端配置文件    
cat > /data/openvpn/client/${NAME}/client.ovpn <<EOF
client
dev tun
proto tcp
remote ${OPENVPN_SERVER} ${OPENVPN_PORT}
resolv-retry infinite
nobind
ca ca.crt
cert $NAME.crt
key $NAME.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3
compress lz4-v2
EOF

    echo "证书存放路径:/data/openvpn/client/${NAME},证书文件如下:"
    echo -e "\E[1;32m******************************************************************\E[0m"
    ls -l /data/openvpn/client/${NAME}
    echo -e "\E[1;32m******************************************************************\E[0m"
    cd /data/openvpn/client/${NAME}
    zip  /root/${NAME}-openvpn.zip *
    action "证书的打包文件已生成: /root/${NAME}-openvpn.zip"
}
read -p "请输入用户的姓名拼音(如:zhangsan): " NAME
read -p "请输入证书的有效期(默认:90天): " OPENVPN_DATA
OPENVPN_DATA=${OPENVPN_DATA:=90}
remove_cert
create_cert

使用方法

[root@hecs-289073 tmp]# sh openvpn-client-create.sh 
请输入用户的姓名拼音(如:zhangsan): zhangsan
请输入证书的有效期(默认:90天): 
...
证书的打包文件已生成: /root/zhangsan-openvpn.zip           [  OK  ]

#例如生成张三的证书,证书有效期不输入数字的话默认设置的是90天。
#出现上面的打包文件已生成就表示客户端证书生成了

报错

1)客户端连接服务端,服务端服务就挂掉了

cat /data/openvpn/logs/openvpn.log #报错
2022-07-31 17:51:01 Read error on key file ('/data/openvpn/certificate/ta.key')
2022-07-31 17:51:01 Exiting due to fatal error
2022-07-31 17:51:01 net_route_v4_del: 10.8.0.0/24 via 10.8.0.2 dev [NULL] table 0 metric -1
2022-07-31 17:51:01 sitnl_send: rtnl: generic error (-1): Operation not permitted
2022-07-31 17:51:01 ERROR: Linux route delete command failed
2022-07-31 17:51:01 Closing TUN/TAP interface
2022-07-31 17:51:01 net_addr_ptp_v4_del: 10.8.0.1 dev tun0
2022-07-31 17:51:01 sitnl_send: rtnl: generic error (-1): Operation not permitted
2022-07-31 17:51:01 Linux can't del IP from iface tun0

#上边的问题,检查一下是否有这个文件/data/openvpn/certificate/ta.key。并查看一下这个文件的属主属组是不是openvpn。
chown openvpn. /data/openvpn -R && systemctl restart openvpn.service
执行上面的命令然后再试试

2) 连上VPN后,无法上网或者无法访问配置的内网IP。

其他都正常,就是访问不了配置的内网地址

1.检查一下是否开启内核转发
sysctl -n net.ipv4.ip_forward
显示如下结果为正常
[root@hecs-289073 logs]# sysctl -n net.ipv4.ip_forward
1

2.检查iptables是否配置nat转发
[root@hecs-289073 logs]# iptables  -t nat -L POSTROUTING
Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.8.0.0/24          anywhere            
有上面这条为正确,10.8.0.0/24 这个是我们在 /data/openvpn/server.conf 中分配给客户端的IP端 

版权声明:本文为m0_69013817原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。