携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情
传输协议与静态密钥协议
1、选项proto p
功能:用于指定与远程主机通信时所使用的协议
默认(不指定的情况下)是UDP协议,当然也需要可靠传输时,我们也可以设置为TCP协议
设置TCP时需要指定tcp-server,tcp-clinet
配置如下:
#server端
[root@vpn ~]# openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --proto tcp-server
#clinet端
[root@client1 ~]# openvpn --ifconfig 10.200.0.2 10.200.0.1 --dev tun --remote 192.168.9.130 --proto tcp-clinet
现在将客户端断开,然后再看服务端的日志信息:
Mon Jun 13 08:11:07 2022 Connection reset, restarting [0] #由于我们使用的是tcp协议,客户端断开之后,服务端是感知的,因此服务端会有连接重置,重启的过程
Mon Jun 13 08:11:07 2022 /sbin/ip addr del dev tun0 local 10.200.0.1 peer 10.200.0.2
Mon Jun 13 08:11:07 2022 SIGUSR1[soft,connection-reset] received, process restarting
Mon Jun 13 08:11:08 2022 ******* WARNING *******: All encryption and authentication features disabled -- All data will be tunnelled as clear text and will not be protected against man-in-the-middle changes. PLEASE DO RECONSIDER THIS CONFIGURATION!
Mon Jun 13 08:11:08 2022 TUN/TAP device tun0 opened
Mon Jun 13 08:11:08 2022 /sbin/ip link set dev tun0 up mtu 1500
Mon Jun 13 08:11:08 2022 /sbin/ip addr add dev tun0 local 10.200.0.1 peer 10.200.0.2
Mon Jun 13 08:11:08 2022 Could not determine IPv4/IPv6 protocol. Using AF_INET
Mon Jun 13 08:11:08 2022 Listening for incoming TCP connection on [AF_INET][undef]:1194
密钥文件使用
1、在前面的实验中,输出的日志信息中,都会提示我们素有的数据传输都是以铭文传输的,不安全,因此我们需要对数据进行加密。
我们知道OpenVPN有两个通道:数据通道,控制通道。加密就是针对的数据通道。其中有两种方式:
-
静态密钥(Static Key)
- 优点:不需要证书和CA,配置简单
- 缺点:密钥的分发与管理成本高
-
TLS密钥协商(TLS-negotiated Key)
静态密钥的实现方式:就是同一个Key文件在两端节点都存在。
2、密钥文件生成与使用
在server或者clinet端生成密钥都行,然后在通过ssh或者其它途径输送至对端。
#生成密钥
[root@vpn ~]# openvpn --genkey --secret aa.key
[root@vpn ~]# openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --secret aa.key
#客户端使用
[root@client1 ~]# openvpn --ifconfig 10.200.0.2 10.200.0.1 --dev tun --remote 192.168.9.130 --secret aa.key
3.1、选项genkey说明:
功能:生成一个用于共享加密的密钥文件
通过--secret选项指定文件名
3.2、选项secret file [direction]
功能:
- 启用静态密钥加密模式
- 指定一个由--genkey生成的密钥文件
密钥文件用法:
-
从密钥文件内容中抽取出两个对称密钥
- 加密密钥:抽取出两个密钥,一个是用来加密数据,
- 签署数据包的HMAC密钥(Hash-based Message Authentication Code)
-
通过direction抽取出两对非对称密钥(也就是说需要抽取四个密钥):
- 客户端的加密密钥
- 客户端的HMAC密钥
- 服务端的加密密钥
- 服务端的HMAC密钥
补充:什么是对称密钥、非对称密钥?
对称密钥:就是通信两端必须使用相同的密钥对明文进行加密、解密运算。
非对称密钥:每一端都有一对唯一对应的密钥(对端的公,私钥相同):公钥、私钥。公钥对外开放,私钥个人私密保管。发送数据的一方用另一方的公钥对发送的信息进行加密,然后由接收者用自己的私钥继续进行解密。
通过日志分析密钥文件的使用
1、通过--verb 7选项输出详细信息
默认是1
openvpn --ifconfig 10.200.0.1 10.200.0.2 --dev tun --secret aa.key --verb 7
可以发现以上学习都是通过命令参数的形式来指定特定的功能。这样显得很笨重,OpenVPN支持指定配置文件的方式进行配置:
选项:config file
功能:用于载入指定的配置文件
格式:
- 配置文件中的选项没有--
- 配置文件可以嵌套
- 行首的"#"或者";"字符表示注释行
- 包含空格的参数,一定要包含在双引号或者是单引号中
- 不在单引号中的反斜线\,会被当做shell的转义符
- Windows系统;使用双斜线来表示路径名:secret "C:\openvpn\secret.key"
如下配置:
[root@vpn ~]# vi aa.conf
ifconfig 10.200.0.1 10.200.0.2
dev tun
secret /root/aa.key
[root@vpn ~]# openvpn --config aa.conf
\