windows端成功搭建了OpenVPN虚拟专用网,本文主要写在linux上安装和配置服务端和客户端,使用yum安装的话,可能都是安装的3.x版本
1.服务端安装
执行下面的一系列操作,进行openvpn安装
1 2 3 4 5 6 7
| yum install -y epel-release yum update -y
yum install -y openssl lzo pam openssl-devel lzo-devel pam-devel
yum install -y easy-rsa yum install -y openvpn
|
2.生成服务端和客户端密钥
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| cp -rf /usr/share/easy-rsa/3.0.3 /etc/openvpn/server/easy-rsa cd /etc/openvpn/server/easy-rsa ./easyrsa init-pki ./easyrsa build-ca nopass
./easyrsa build-server-full server nopass
./easyrsa build-client-full client1 nopass ./easyrsa build-client-full client2 nopass
./easyrsa gen-dh
openvpn --genkey --secret ta.key
mkdir -p /etc/openvpn/server/ cp -a pki/ca.crt /etc/openvpn/server/ cp -a pki/private/server.key /etc/openvpn/server/ cp -a pki/issued/server.crt /etc/openvpn/server/ cp -a pki/dh.pem /etc/openvpn/server/
cp -a ta.key /etc/openvpn/server/
mkdir -p /etc/openvpn/client/ cp -a pki/private/client1.key /etc/openvpn/client/ cp -a pki/issued/client1.crt /etc/openvpn/client/
|
3.创建目录
根据需要创建相应的用户密码,日志目录,在编写配置文件的时候,根据需要进行填写
1 2 3 4 5 6
| mkdir -p /var/log/openvpn/
mkdir -p /etc/openvpn/server/user
chown openvpn:openvpn /var/log/openvpn
|
4.生成服务端配置文件
服务端配置文件,在windows上安装的时候,会自动生成一个默认的server.ovpn和client.ovpn文件,但是在linux上没有生成,只能自己写了,/etc/openvpn/server/server.conf ,内容大致如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| ;表示openvpn服务端的监听地址 local 0.0.0.0
;监听的端口,默认是1194 port 1194
;使用的协议,有udp和tcp。建议选择tcp proto tcp
;使用三层路由IP隧道(tun)还是二层以太网隧道(tap)。一般都使用tun dev tun
;ca证书、服务端证书、服务端密钥和密钥交换文件。如果它们和server.conf在同一个目录下则可以不写绝对路径,否则需要写绝对路径调用 ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem
;vpn服务端为自己和客户端分配IP的地址池 ;服务端自己获取网段的第一个地址(此处为10.8.0.1),后为客户端分配其他的可用地址。以后客户端就可以和10.8.0.1进行通信 ;注意:该网段地址池不要和已有网段冲突或重复。其实一般来说是不用改的。除非当前内网使用了10.8.0.0/24的网段 server 10.9.0.0 255.255.255.0
;使用一个文件记录已分配虚拟IP的客户端和虚拟IP的对应关系,以后openvpn重启时,将可以按照此文件继续为对应的客户端分配此前相同的IP。也就是自动续借IP的意思。 ifconfig-pool-persist ipp.txt
;使用tap模式的时候考虑此选项 ;server-bridge XXXXXX
;vpn服务端向客户端推送vpn服务端内网网段的路由配置,以便让客户端能够找到服务端内网。多条路由就写多个Push指令 ;push "route 172.16.10.0 255.255.255.0"
;让vpn客户端之间可以互相看见对方,即能互相通信。默认情况客户端只能看到服务端一个人,默认是注释的,不能客户端之间相互看见 client-to-client
;允许多个客户端使用同一个VPN帐号连接服务端,默认是注释的,不支持多个客户登录一个账号 ;duplicate-cn
;每10秒ping一次,120秒后没收到ping就说明对方挂了 keepalive 10 120
;加强认证方式,防攻击。如果配置文件中启用此项(默认是启用的) ;需要执行openvpn --genkey --secret ta.key,并把ta.key放到/etc/openvpn/server目录 ;服务端第二个参数为0;同时客户端也要有此文件,且client.conf中此指令的第二个参数需要为1 tls-auth /etc/openvpn/server/ta.key 0
;选择一个密码。如果在服务器上使用了cipher选项,那么您也必须在这里指定它。注意,v2.4客户端/服务器将在TLS模式下自动协商AES-256-GCM。 cipher AES-256-CBC
;openvpn 2.4版本的vpn才能设置此选项。表示服务端启用lz4的压缩功能,传输数据给客户端时会压缩数据包 ;Push后在客户端也配置启用lz4的压缩功能,向服务端发数据时也会压缩。如果是2.4版本以下的老版本,则使用用comp-lzo指令 compress lz4-v2 push "compress lz4-v2"
;启用lzo数据压缩格式。此指令用于低于2.4版本的老版本。且如果服务端配置了该指令,客户端也必须要配置 ;comp-lzo
;并发客户端的连接数 max-clients 1000
;user nobody ;group nobody
;通过ping得知超时时,当重启vpn后将使用同一个密钥文件以及保持tun连接状态 persist-key persist-tun
;在文件中输出当前的连接信息,每分钟截断并重写一次该文件 status openvpn-status.log
;默认vpn的日志会记录到rsyslog中,使用这两个选项可以改变。 ;log指令表示每次启动vpn时覆盖式记录到指定日志文件中, ;log-append则表示每次启动vpn时追加式的记录到指定日志中。 ;但两者只能选其一,或者不选时记录到rsyslog中 ;如果设置了这个,那么在使用 openvpn --config 的时候,可能在控制台就不会立即显示日志了 log /var/log/openvpn/openvpn.log
;日志记录的详细级别 verb 3
;沉默的重复信息。最多20条相同消息类别的连续消息将输出到日志。 ;mute 20
;当服务器重新启动时,通知客户端,以便它可以自动重新连接。仅在UDP协议是可用 ;explicit-exit-notify 1
|
关于如何配置用户名密码登录,我这里就不写了,因为还要编写密码检查脚本。
5.启动服务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
openvpn --config /etc/openvpn/server/server.conf
openvpn --daemon --config /etc/openvpn/server/server.conf
ps -ef | grep 'open'
netstat -lntup | grep '19095'
|
6.CentOS8上安装客户端
(1) 在Centos8上安装其实挺简单的
在Centos8上安装openvpn,使用dnf命令,Centos7使用yum命令安装。
1 2 3 4 5 6
| dnf install epel-release -y
dnf install openvpn -y
dnf install easy-rsa
|
(2) 在服务器上生成客户端密钥:ca.crt、client.crt、client.key,复制到客户端的 /etc/openvpn/client 目录下。除了通过拷贝的文件的方式之外,还可以将ca.crt、client.crt和client.key的内容都复制到.ovpn文件中,只需要将ca,crt,key节点换成
1 2 3 4 5 6 7 8 9 10 11 12 13
| <ca> ca.crt 文件内容 </ca> <cert> client.crt 文件内容 </cert> <key> client.key 文件内容 </key>
<tls-auth> ta.key 文件内容 </tls-auth>
|
(3) 编辑client.conf,指定ca、key、crt等参数,复制到 /etc/openvpn/client 目录下ps
(4) 在 /etc/openvpn/client 目录下启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| openvpn --config client.conf
openvpn --daemon --config /etc/openvpn/client/client.conf
--daemon --cd --config --auth-user-pass --log-append
ifconfig tun0
yum install net-tools
|
查了很多的资料,发现为什么没有地方说如何关闭linux的openvpn客户端的呢?
7.客户端配置文件
文件名 windows为client.ovpn,Linux为client.conf,我一直都没有使用密码的形式访问,所以如何输入密码,我也不知道。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| client
dev tun ;远程服务协议 proto tcp
;远程服务地址和端口 remote 10.0.0.190 1194
resolv-retry infinite nobind
;user nobody ;group nobody
persist-key persist-tun
ca ca.crt cert client.crt key client.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC compress lz4-v2 verb 3 ;mute 20
|
为了实现访问,可能需要远程服务器的防火墙,或者是阿里云的安全组要相应的开启
问题
(1) 丢包问题
不知道为什么,使用linux客户端总是会有很高的丢包率。当我使用ifconfig命令查看的时候,发现了两个tun0,所以将openvpn客户端停止,然后重启一个客户端就可以了。
(2) error: packet HMAC authentication failed
认证错误
(3) SIGINT[hard,init_instance] received, process exiting
注意可能还是上面的问题,就是用户认证的部分,这个时候还是要处理好ta.key文件的位置问题
7.Ubuntu系统安装
1 2 3
| sudo apt-get install openssl libssl-dev sudo apt-get install lzop
|