1. 前言
OpenVPN is a virtual private network (VPN) system that implements techniques to create secure point-to-point or site-to-site connections in routed or bridged configurations and remote access facilities. It implements both client and server applications.
参考文档:
2. OpenVPN原理
FROM ChatGPT:
OpenVPN是一个开源的虚拟私人网络(VPN)解决方案。它使用SSL/TLS协议进行安全通信,并能够穿越大多数防火墙和NAT路由器。
OpenVPN的原理如下:
- 通信双方首先建立一个加密通道,这个过程叫做握手(handshake)。
- 握手完成后,通信双方会互相验证对方的身份。
- 验证完成后,OpenVPN将使用TLS协议进行数据通信,所有传输的数据将通过OpenVPN的通道进行加密和解密,保证通信的安全性。
- OpenVPN支持多种加密算法,例如AES和Blowfish等,同时还支持TLSv1.2协议,确保传输的数据不会被窃取或篡改。
在OpenVPN中,通常会有一个服务器和多个客户端。服务器会为每个客户端分配一个唯一的IP地址,并且使用路由器将其所有客户端的流量路由到公网上。
OpenVPN可以通过在不同的操作系统上运行来实现跨平台性。此外,OpenVPN还可以使用多种网络协议,例如TCP、UDP和ICMP等。
总的来说,OpenVPN的原理是通过加密和身份验证等安全措施来实现对数据传输的保护,从而实现在不安全的公共网络中建立安全的私人网络。
3. 准备VPN域名
1、登录dnspod或者其他域名解析平台
2、解析vpn.voidking.com
域名,指向准备安装OpenVPN Server的主机IP。
4. 安装OpenVPN Server
参考文档:
4.1. 准备volume
1 | OVPN_DATA="ovpn-data-example" |
4.2. 初始化volume中的数据
1、生成配置
1 | docker pull kylemanna/openvpn:2.4 |
如果没有域名,使用IP也是可以的。
2、生成CA证书
1 | docker run --rm -it \ |
- Enter New CA Key Passphrase: # 输入密码 voidking
- Re-Enter New CA Key Passphrase: # 再次输入密码 voidking
- Common Name (eg: your user, host, or server name) [Easy-RSA CA]: # 输入 openvpn-server
- Enter pass phrase for /etc/openvpn/pki/private/ca.key: # 输入密码 voidking
- Enter pass phrase for /etc/openvpn/pki/private/ca.key: # 再次输入密码 voidking
3、查看数据
1 | cd /var/lib/docker/volumes/ovpn-data-example/_data/pki/private |
4.3. 启动openvpn server
1 | docker run --name openvpn -d \ |
The UDP server uses 192.168.255.0/24 for dynamic clients by default.
4.4. 生成客户端证书
1 | docker run --rm -it \ |
这里的client0可以替换成其他名称。
4.5. 生成客户端配置
1 | docker run --rm -it \ |
4.6. 开启防火墙
在公有云防火墙或者安全组管理页面,放开1194端口的UDP协议。
4.7. OpenVPN Server日志
1 | docker logs -f openvpn |
监听日志变化,测试客户端接入时。
5. MacOS安装使用OpenVPN Client
5.1. 安装
OpenVPN Client有很多,这里选择使用OpenVPN官方Client - OpenVPN Connect。
版本选择OpenVPN Connect v3,下载安装即可。
5.2. 使用
打开OpenVPN Connect v3 -> File -> BROWSE
-> 选择client0.ovpn -> 选择OpenVPN Server点击启动
当按钮变绿,显示CONNECTED,表明连接成功,右上角日志可以查看到更详细信息。
同时OpenVPN Server日志中也会出现新的客户端连接信息。
5.3. 查看网络配置
1 | ifconfig | grep 192 |
1 | ➜ ~ ifconfig | grep 192 |
可以看到,本机新增了一个 192.168.255.6 的IP,网关是 192.168.255.5 ,使用的网卡设备是隧道utun2。
5.4. 测试连通性
1 | ping 172.17.12.85 |
ping OpenVPN Server 的内网IP,网络畅通。
6. Linux安装使用OpenVPN Client
6.1. 安装
参考文档:
Debian/Ubuntu:
1 | apt install apt-transport-https |
CentOS:
1 | yum install yum-plugin-copr |
6.2. 使用
1、启动OpenVPN Client
1 | openvpn3 session-start --config client0.ovpn |
输入用户名密码,即可连接到OpenVPN Server。
2、重启OpenVPN Client
1 | ps -ef | grep openvpn |
3、关闭OpenVPN Client
1 | openvpn3 session-manage --config client0.ovpn --disconnect |
6.3. 查看网络配置
1 | route -n |
7. OpenVPN vs IPsec
OpenVPN和IPsec都是VPN协议,但是安全性和用途不同。
OpenVPN是一种高度可配置的开源协议,可以使用各种端口和加密方法。它是最安全的VPN协议之一,并通过了许多第三方安全审计。一般需要自行安装。适合用于 client-to-site 的连接,例如远程办公。
IPSec(Internet Security Protocol)是一套安全的协议,可确保数据包的身份验证和加密,以通过互联网协议(IP)网络在两个端点之间提供受保护的通信。常内置在网关设备中,也可以自行安装。适合用于 site-to-site 的连接,例如打通多个独立的网络(内网和内网、办公网和内网等)。安全性不如OpenVPN,但是速度通常比OpenVPN要更快。
参考文档: