手把手教你搭建OpenVPN(保姆级教程)!

文章目录 「隐藏」
  1. 1. 简介
  2. 2. 应用场景
  3. 3.OpenVPN 服务端配置
    1. 3.1 环境准备
    2. 3.2 证书准备流程
    3. 1) 安装 openvpn 服务端、证书创建工具
    4. 2) 服务器充当权威机构,创建 ca 证书
    5. 3) 创建 server 端证书
    6. 4) 创建 client 端证书
    7. 5) 创建 dh-pem 算法文件和目录汇总
    8. 6) 小结
  4. 3.3 服务端配置文件
  5. 3.4 客户端配置文件
    1. 1) windows
    2. 2) OpenVPN 客户端配置(linux 端)
    3. 3)效果
  6. 4 、 OpenVPN 加密/认证
    1. 4.1 先配置服务端支持密码认证
    2. 4.2 编写用户验证 check.sh 脚本
    3. 4.3 脚本授权
    4. 4.4 添加用户
    5. 4.5 重启 openvpn 服务
    6. 4.6 客户端只需要在配置文件加个参数
    7. 4.7 最终效果
  7. 5 、 OpenVPN 连接内网其它服务器

OpenVPN 原理及部署使用

1. 简介

    VPN 技术通过密钥交换、封装、认证、加密手段在公共网络上建立起私密的隧道,保障传输数据的完整性、私密性和有效性。 OpenVPN 是近年来新出现的开放源码项目,实现了 SSL VPN 的一种解决方案。

2. 应用场景

有一些类似这样的情形或需求:

1 、开发: 通过 OpenVPN 让开发人员连接网站, 进行开发测试 (在家的时候)

2 、运维: 通过 OpenVPN 让运维连接内网服务器, 或者是连接 JUMPSERVER

在家里想进入公司网站的管理界面,但管理系统限制了仅允许来自公司 IP 可以访问想连接到某个特别网站的特别网络应用,但本地的 ISP 或路由节点不允许您去连接它本地的 ISP 或路由节点可能会监听您的数据而您不想被它拦截,想找一种可以跳过它的办法, 您想访问的网站和应用是基于明文传输,但您希望这个线路是私密的和可靠的。这时候就需要用到 VPN 来实现。

3.OpenVPN 服务端配置

3.1 环境准备

server IP
openvpn-server 公网:100.100.1.1 内网:10.100.240.3
client 能访问 Internet

3.2 证书准备流程

1) 安装 openvpn 服务端、证书创建工具

#openvpn 服务端、证书工具安装
[root@openvpn-server ~]# yum install -y openvpn easy-rsa

#证书工具目录
[root@openvpn-server ~]# rpm -ql easy-rsa
/usr/share/easy-rsa/3.0.8/easyrsa
...

2) 服务器充当权威机构,创建 ca 证书

#路径太深,新建目录
[root@openvpn-server ~]# mkdir -p   /opt/easy-rsa 
[root@openvpn-server ~]# cp -a /usr/share/easy-rsa/3.0.8/* /opt/easy-rsa/
[root@openvpn-server ~]# cp /usr/share/doc/easy-rsa-3.0.8/vars.example /opt/easy-rsa/vars

#修改 vars 文件,配置默认参数值
[root@openvpn-server ~]# cat > /opt/easy-rsa/vars
if [ -z "$EASYRSA_CALLER" ]; then
 echo "You appear to be sourcing an Easy-RSA
'vars' file." >&2
 echo "This is no longer necessary and is
disallowed. See the section called" >&2
 echo "'How to use this file' near the top
comments for more details." >&2
 return 1
fi

set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "CN"          # 国家
set_var EASYRSA_REQ_PROVINCE "Beijing"    # 省
set_var EASYRSA_REQ_CITY "ShangHai"       # 城市
set_var EASYRSA_REQ_ORG "zxc.com"         # 组织
set_var EASYRSA_REQ_EMAIL "123456@qq.com" # 邮箱
set_var EASYRSA_NS_SUPPORT "yes"
EOF

#配置完 var 后 检查 权威机构信息
[root@openvpn-server easy-rsa]# tree
.
|-- easyrsa
|-- openssl-easyrsa.cnf
|-- vars                  #var ca 权威机构信息
`-- x509-types
    |-- ca
    |-- client
    |-- code-signing
    |-- COMMON
    |-- email
    |-- kdc
    |-- server
    `-- serverClient
1 directory, 11 files

#初始化,会在当前目录创建 PKI 目录,用于存储证书
[root@openvpn-server easy-rsa]# ./easyrsa init-pki
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars    #正在使用来自于 vars

init-pki complete; you may now create a CA or requests.        #初始化完成 显示你可以尝试创建 CA 证书
Your newly created PKI dir is: /opt/easy-rsa/pki               #初始化后的目录在 pki 下面


#创建根证书,会提示设置密码,用于 ca 对之后生成的 server 和 client 证书签名时使用,其他可默认
[root@openvpn-server easy-rsa]# ./easyrsa build-ca
Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017

Enter New CA Key Passphrase:                                   #密码 1234
Re-Enter New CA Key Passphrase:                                #密码 1234
Generating RSA private key, 2048 bit long modulus
..............+++
...............................................+++
e is 65537 (0x10001)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:zxc.com                #域名即可

CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/opt/easy-rsa/pki/ca.crt


#查看 ca 证书和私钥
[root@openvpn-server easy-rsa]# tree pki/
pki/
|-- ca.crt                      #ca 证书
|-- certs_by_serial
|-- index.txt
|-- index.txt.attr
|-- issued
|-- openssl-easyrsa.cnf
|-- private
|   `-- ca.key                  #ca 私钥
|-- renewed
|   |-- certs_by_serial
|   |-- private_by_serial
|   `-- reqs_by_serial
|-- reqs
|-- revoked
|   |-- certs_by_serial
|   |-- private_by_serial
|   `-- reqs_by_serial
|-- safessl-easyrsa.cnf
`-- serial

12 directories, 7 files

3) 创建 server 端证书

#创建 server 端证书和私钥文件
# 创建请求文件及服务端私钥,gen-req 请求文件、 server 可以自定义、 nopass 表示不加密私钥文件,其他可默认
[root@openvpn-server easy-rsa]#  ./easyrsa gen-req server nopass

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017
Generating a 2048 bit RSA private key
....................................................+++
......................................+++
writing new private key to '/opt/easy-rsa/pki/easy-rsa-5343.MYL42w/tmp.4slsGH'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:

Keypair and certificate request completed. Your files are:
req: /opt/easy-rsa/pki/reqs/server.req               #server.req 用于创建证书 (证书资料) 
key: /opt/easy-rsa/pki/private/server.key            #server 私钥文件




#给 server 端证书签名,sign 签名、第一个 server 是服务器类型、第二个 server 是需要签名的证书名称
#首先是对一些信息的确认,输入 yes,然后输入创建 ca 根证书时设置的密码
[root@openvpn-server easy-rsa]# ./easyrsa sign server server

Note: using Easy-RSA configuration from: /opt/easy-rsa/vars
Using SSL: openssl OpenSSL 1.0.2k-fips  26 Jan 2017


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 825 days:

subject=
    commonName                = server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes                                  #输入 yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-7938.RZEfrP/tmp.NCVg6D
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:        #输入创建 ca 时设置的密码
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until May  7 15:26:38 2026 GMT (825 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /opt/easy-rsa/pki/issued/server.crt    #生成服务端证书


#验证是否创建了 server 的证书
[root@openvpn-server easy-rsa]# tree pki/
pki/
|-- ca.crt                                    #ca 证书
|-- certs_by_serial
|   `-- 63D708FF122452B7558651207A1AF01B.pem
|-- index.txt
|-- index.txt.attr
|-- index.txt.attr.old
|-- index.txt.old
|-- issued
|   `-- server.crt                           #server 证书 
|-- openssl-easyrsa.cnf
|-- private
|   |-- ca.key
|   `-- server.key                           #server 私钥 
|-- renewed
|   |-- certs_by_serial
|   |-- private_by_serial
|   `-- reqs_by_serial
|-- reqs
|   `-- server.req
|-- revoked
|   |-- certs_by_serial
|   |-- private_by_serial
|   `-- reqs_by_serial
|-- safessl-easyrsa.cnf
|-- serial
`-- serial.old

12 directories, 14 files

4) 创建 client 端证书

#创建 client 端证书和私钥文件
# 创建请求文件及服务端私钥,gen-req 请求文件、 client 可以自定义、 nopass 表示不加密私钥文件,其他可默认
[root@openvpn-server easy-rsa]# ./easyrsa gen-req client nopass


Common Name (eg: your user, host, or server name) [client]:    #直接回车

Keypair and certificate request completed. Your files are:
req: /opt/easy-rsa/pki/reqs/client.req
key: /opt/easy-rsa/pki/private/client.key


#给 client 端证书签名,sign 签名、第一个 client 是服务器类型、第二个 client 是需要签名的证书名称
#给 client 端证书签名时,首先是对一些信息的确认,可以输入 yes,然后创建 ca 根证书时设置的密码
[root@openvpn-server easy-rsa]# ./easyrsa sign client client
......
Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from /opt/easy-rsa/pki/easy-rsa-32687.69KFgb/tmp.y1hokA
Enter pass phrase for /opt/easy-rsa/pki/private/ca.key:
......

Certificate created at: /opt/easy-rsa/pki/issued/client.crt

5) 创建 dh-pem 算法文件和目录汇总

#创建 Diffie-Hellman 文件,秘钥交换时的 Diffie-Hellman 算法
[root@openvpn-server easy-rsa]# ./easyrsa gen-dh
.......
DH parameters of size 2048 created at /opt/easy-rsa/pki/dh.pem


#目录汇总
[root@openvpn-server easy-rsa]# tree
.
|-- easyrsa
|-- openssl-easyrsa.cnf
|-- pki
|   |-- ca.crt                           #ca 证书   
|   |-- certs_by_serial
|   |   |-- 58D4C3BEB5AA4931D7CE3D9D0119C3CF.pem
|   |   `-- 63D708FF122452B7558651207A1AF01B.pem
|   |-- dh.pem                          #df 算法文件
|   |-- index.txt
|   |-- index.txt.attr
|   |-- index.txt.attr.old
|   |-- index.txt.old
|   |-- issued
|   |   |-- client.crt                  #client 证书
|   |   `-- server.crt                  #server 证书
|   |-- openssl-easyrsa.cnf
|   |-- private
|   |   |-- ca.key
|   |   |-- client.key                  #客户端私钥
|   |   `-- server.key                  #服务端私钥
|   |-- renewed
|   |   |-- certs_by_serial
|   |   |-- private_by_serial
|   |   `-- reqs_by_serial
|   |-- reqs
|   |   |-- client.req
|   |   `-- server.req
|   |-- revoked
|   |   |-- certs_by_serial
|   |   |-- private_by_serial
|   |   `-- reqs_by_serial
|   |-- safessl-easyrsa.cnf
|   |-- serial
|   `-- serial.old
|-- vars
`-- x509-types
    |-- ca
    |-- client
    |-- code-signing
    |-- COMMON
    |-- email
    |-- kdc
    |-- server
    `-- serverClient

6) 小结

1 、创建 vars 文件 (伪装 ca 机构), 创建 ca 证书 build-ca 2 、创建 server 证书和私钥 gen-req server nopass sign server server 3 、创建 client 证书和私钥 gen-req client nopass sign client client 4 、 dh.pem 文件

3.3 服务端配置文件

#配置文件中 各种路径默认相对于 /etc/openvpn
[root@openvpn-server ~]# tree -F /etc/openvpn/
/etc/openvpn/
|-- client/
`-- server/

2 directories, 0 files

#服务端配置文件
[root@openvpn-server ~]# vim /etc/opnvpn/server/server.conf
[root@openvpn-server server]# cat server.conf
port 1194                               #端口
proto udp                               #协议
dev tun                                 #采用路由隧道模式 tun
ca ca.crt                               #ca 证书文件位置   /etc/openvpn   /etc/opnevpn/server
cert server/server.crt                  #服务端公钥名称 /etc/openvpn
key server/server.key                   #服务端私钥名称 /etc/openvpn
dh server/dh.pem                        #加密算法文件, 交换证书 校验算法 /etc/openvpn
server 192.168.1.0 255.255.255.0        #给客户端分配地址池 (ip 地址范围),注意:不能和 VPN 服务器内网网段有相同
push "route 10.100.240.0 255.255.255.0" #客户端连接后, 推送给客户端的路由规则
                                        #客户端想访问 10.100.240.0/24 网段联系 openvpn 服务端
#ifconfig-pool-persist ipp.txt          #地址池记录文件位置 未来让 openvpn 客户端固定 ip 地址使用的.
keepalive 10 120                        #存活时间,10 秒 ping 一次,120 如未收到响应则视为断线
max-clients 100                         #最多允许 100 个客户端连接
status /var/log/openvpn-status.log      #日志记录位置 openvpn 状态
log /var/log/openvpn.log                #openvpn 日志记录位置
verb 3                                  #verbose 日志输出级别   数字越大越详细最多 11(debug)
client-to-client                        #客户端与客户端之间支持通信
persist-key                             #通过 keepalive 检测超时后,重新启动 VPN,不重新读取 keys,保留第一次使用的 keys 对私钥进行缓存.
persist-tun                             #检测超时后,重新启动 VPN,一直保持 tun 是 linkup 的。否则网络会先 linkdown 然后再 linkup
duplicate-cn                            #客户端密钥 (证书和私钥) 是否可以重复



#复制证书及密钥
[root@openvpn-server server]# sudo vim server.conf
[root@openvpn-server server]# cd /opt/easy-rsa/pki/
[root@openvpn-server pki]# cp ca.crt /etc/openvpn/
[root@openvpn-server pki]# cp dh.pem   /etc/openvpn/server/
[root@openvpn-server pki]# cp issued/server.crt private/server.key /etc/openvpn/server/

#修改 systemctl 配置, 因为新建的文件夹通过 systemctl 启动 openvpn 时找不到路径
[root@openvpn-server server]# cat /usr/lib/systemd/system/openvpn@.service
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i/%i.conf   #增加%i 即可,只修改这一行
#%i/%i  就是运行 systemctl start openvpn@server 时,会把 @后面的 server 传给%i,就会读到 server/server.conf

[Install]
WantedBy=multi-user.target

#重新加载
[root@openvpn-server server]# systemctl daemon-reload

#启动和加入开机自启
[root@openvpn-server server]# systemctl enable openvpn@server
[root@openvpn-server server]# systemctl start openvpn@server

#检查进程与端口
[root@openvpn-server openvpn]# ss -lntup |grep 1194
udp    UNCONN     0      0         *:1194                  *:*                  users:(("openvpn",pid=31362,fd=5))

[root@openvpn-server openvpn]#  ps -ef |grep openvpn
root       960     1  0 Feb02 ?        00:00:00 /sbin/dhclient -q -lf /var/lib/dhclient/dhclient--eth0.lease -pf /var/run/dhclient-eth0.pid -H openvpn-server eth0
root     31362     1  0 03:05 ?        00:00:00 /usr/sbin/openvpn --cd /etc/openvpn/ --config server/server.conf
root     31912 10767  0 03:07 pts/1    00:00:00 grep --color=auto openvpn

[root@openvpn-server openvpn]# ip a s tun0
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none
    inet 192.168.1.1 peer 192.168.1.2/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::6813:2c79:d971:d16e/64 scope link flags 800
       valid_lft forever preferred_lft forever

3.4 客户端配置文件

1) windows

#openvpn 客户端下载:https://swupdate.openvpn.org/community/releases/OpenVPN-2.6.8-I001-amd64.msi

#把需要的证书先放到 client,方便下载
[root@openvpn-server openvpn]# cp /opt/easy-rsa/pki/private/client.key /opt/easy-rsa/pki/issued/client.crt /etc/openvpn/client/

#创建客户端配置文件
[root@openvpn-server openvpn]# cat /etc/openvpn/client/clinet.ovpn
client                  #指定当前 VPN 是客户端
dev tun                 #使用 tun 隧道传输协议
proto udp               #使用 udp 协议传输数据
remote 100.100.1.1 1194 #openvpn 服务器 IP 地址(公网)、端口号
resolv-retry infinite   #断线自动重新连接,在网络不稳定的情况下非常有用
nobind                  #不绑定本地特定的端口号
ca ca.crt               #指定 CA 证书的文件路径
cert client.crt         #指定当前客户端的证书文件路径
key client.key          #指定当前客户端的私钥文件路径
verb 3                  #指定日志文件的记录详细级别,可选 0-9,等级越高日志内容越详细
persist-key             #通过 keepalive 检测超时后,重新启动 VPN,不重新读取 keys,保留第一次使用的 keys

#安装完客户端
在 C:Program FilesOpenVPNconfigzxc.com
ca.crt           #ca 证书
client.crt       #客户端证书
client.key       #客户端私钥
client.ovpn      #客户端配置文件 类似于 client.conf

有多个 VPN,可以新建 configzxc1.com 目录

2) OpenVPN 客户端配置(linux 端)

root@openvpn-client ~]# cat /etc/openvpn/client/clinet.conf
client                  #指定当前 VPN 是客户端
dev tun                 #使用 tun 隧道传输协议
proto udp               #使用 udp 协议传输数据
remote 100.100.1.1 1194 #openvpn 服务器 IP 地址(公网)、端口号
resolv-retry infinite   #断线自动重新连接,在网络不稳定的情况下非常有用
nobind                  #不绑定本地特定的端口号
ca ca.crt               #指定 CA 证书的文件路径
cert client/client.crt  #指定当前客户端的证书文件路径
key client/client.key   #指定当前客户端的私钥文件路径
verb 3                  #指定日志文件的记录详细级别,可选 0-9,等级越高日志内容越详细


#修改 systemctl 配置
[root@openvpn-client ~]# cat /usr/lib/systemd/system/openvpn@.serv
[Unit]
Description=OpenVPN Robust And Highly Flexible
Tunneling Application On %I
After=network.target

[Service]
Type=notify
PrivateTmp=true
ExecStart=/usr/sbin/openvpn --cd /etc/openvpn/ --config %i/%i.conf   #增加%i 即可,只修改这一行
#%i/%i  就是运行 systemctl start openvpn@client 时,会把 @后面的 client 传给%i,就会读到 client/client.conf

[Install]
WantedBy=multi-user.target

#重新加载
[root@openvpn-client ~]# systemctl daemon-reload

#启动和加入开机自启
[root@openvpn-client ~]# systemctl enable openvpn@client
[root@openvpn-client ~]# systemctl start openvpn@client

#检查进程与端口
[root@openvpn-client ~]# ss -lntup |grep openvpn
udp   UNCONN     0      0         *:53781               *:*                   users:(("openvpn",pid=12553,fd=3))

[root@openvpn-client ~]# ip a
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
    link/none 
    inet 192.168.1.6 peer 192.168.1.5/32 scope global tun0
       valid_lft forever preferred_lft forever
    inet6 fe80::b198:27bb:5967:356b/64 scope link flags 800 
       valid_lft forever preferred_lft forever
 

3)效果

手把手教你搭建OpenVPN(保姆级教程)! - 第1张图片

手把手教你搭建OpenVPN(保姆级教程)! - 第2张图片

4 、 OpenVPN 加密/认证

考虑到万一证书被泄露或者丢失,外人直接就可以连接到内网,所以再加上 用户/密码 验证

4.1 先配置服务端支持密码认证

[root@openvpn-server ~]#  cat /etc/openvpn/server/server.conf
port 1194                               #端口
proto udp                               #协议
dev tun                                 #采用路由隧道模式 tun
ca ca.crt                               #ca 证书文件位置   /etc/openvpn   /etc/opnevpn/server
cert server/server.crt                  #服务端公钥名称 /etc/openvpn
key server/server.key                   #服务端私钥名称 /etc/openvpn
dh server/dh.pem                        #加密算法文件, 交换证书 校验算法 /etc/openvpn
server 192.168.1.0 255.255.255.0        #给客户端分配地址池 (ip 地址范围),注意:不能和 VPN 服务器内网网段有相同
push "route 10.100.240.0 255.255.255.0" #客户端连接后, 推送给客户端的路由规则  #客户端想访问 10.100.240.0/24 网段联系 openvpn 服务端
#ifconfig-pool-persist ipp.txt          #地址池记录文件位置 未来让 openvpn 客户端固定 ip 地址使用的.
keepalive 10 120                        #存活时间,10 秒 ping 一次,120 如未收到响应则视为断线
max-clients 100                         #最多允许 100 个客户端连接
status /var/log/openvpn-status.log      #日志记录位置 openvpn 状态
log /var/log/openvpn.log                #openvpn 日志记录位置
verb 3                                  #verbose 日志输出级别   数字越大越详细最多 11(debug)
client-to-client                        #客户端与客户端之间支持通信
persist-key                             #通过 keepalive 检测超时后,重新启动 VPN,不重新读取 keys,保留第一次使用的 keys 对私钥进行缓存.
persist-tun                             #检测超时后,重新启动 VPN,一直保持 tun 是 linkup 的。否则网络会先 linkdown 然后再 linkup
duplicate-cn                            #客户端密钥 (证书和私钥) 是否可以重复

#下面是要用户认证时才配置
script-security 3                       #允许使用自定义脚本
auth-user-pass-verify /etc/openvpn/check.sh via-env  #指定认证脚本
username-as-common-name                 #用户密码登陆方式验证

4.2 编写用户验证 check.sh 脚本

[root@openvpn-server ~]# cat /etc/openvpn/check.sh
#!/bin/bash
PASSFILE="/etc/openvpn/openvpnfile"   #密码文件 用户名 密码明文
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

4.3 脚本授权

[root@openvpn-server ~]# chmod 700 /etc/openvpn/check.sh

4.4 添加用户

[root@openvpn-server ~]# cat /etc/openvpn/openvpnfile
zxc 123456

4.5 重启 openvpn 服务

[root@openvpn-server ~]# systemctl restart openvpn@server

4.6 客户端只需要在配置文件加个参数

在 client.ovpn 或者 client.conf 文件最后一行添加
auth-user-pass

4.7 最终效果

手把手教你搭建OpenVPN(保姆级教程)! - 第3张图片

5 、 OpenVPN 连接内网其它服务器

#先在 openvpn 服务端开启内核转发。
[root@openvpn-server ~]# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf
[root@openvpn-server ~]# sysctl -p
net.ipv4.ip_forward = 1



#客户端尝试 ping 其他内网服务器,会显示请求超时。
[c:~]$ ping 10.100.240.14 -t
正在 Ping 10.100.240.14 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
请求超时。
请求超时。

#服务端抓包,发现只有请求的包,没有响应的包。
[root@openvpn-server ~]# tcpdump -i eth0 host 10.100.240.14
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:15:48.527017 IP 192.168.1.6 > 10.100.240.14: ICMP echo request, id 1, seq 738, length 40
16:15:53.087817 IP 192.168.1.6 > 10.100.240.14: ICMP echo request, id 1, seq 739, length 40
16:15:58.101622 IP 192.168.1.6 > 10.100.240.14: ICMP echo request, id 1, seq 740, length 40
16:16:03.083202 IP 192.168.1.6 > 10.100.240.14: ICMP echo request, id 1, seq 741, length 40

#一般都是 10.100.240.14 上没有 192.168.1.0 的路由,在 10.100.240.14 上添加路由
[root@localhost ~]# route add  -net   192.168.1.0/24   gw 10.100.240.3

#在重新连 vpn,再 ping 10.100.240.14 会通
[c:~]$ ping 10.100.240.14 -t
正在 Ping 10.100.240.14 具有 32 字节的数据:
来自 10.100.240.14 的回复: 字节=32 时间=1ms TTL=64
来自 10.100.240.14 的回复: 字节=32 时间<1ms TTL=64
来自 10.100.240.14 的回复: 字节=32 时间=1ms TTL=64
来自 10.100.240.14 的回复: 字节=32 时间<1ms TTL=64

以上就是手把手教你搭建 OpenVPN(保姆级教程)!

 

《手把手教你搭建OpenVPN(保姆级教程)!》留言数:0

发表留言