OpenVPN使用教程
source link: https://maxqiu.com/article/detail/113
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
2021/08/08 Windows Linux VPN
- 有一台或多台云服务器,且均在同一局域网内
- 服务器内有多个服务需要访问,例如:
MySQL
、Redis
等服务,这些服务可以设置密码,然后开放端口Nacos
、Elasticsearch
、zipkin
等服务,这些服务无法设置密码、或者不方便设置密码,但是又想正常访问
此时可以搭建VPN
通道,使本地机器和云服务器组成局域网,云服务器的控制面板上只需要开放一个VPN
的端口即可。
服务端(CentOS7环境):
yum install -y gcc-c++ openssl openssl-devel net-tools lzo lzo-devel pam pam-devel
安装OpenVPN
- 打开OpenVPN官网下载地址:https://openvpn.net/community-downloads/
- 下载
openvpn-2.5.3.tar.gz
- 下载完成上传到服务器
# 直接执行脚本下载到服务器
wget https://swupdate.openvpn.org/community/releases/openvpn-2.5.3.tar.gz
解压、编译、安装
# 解压
tar -zxf openvpn-2.5.3.tar.gz
# 进入该目录
cd openvpn-2.5.3/
# 配置
./configure --prefix=/usr/local/openvpn/
# 编译
make
# 安装
make install
添加环境变量
编辑环境变量文件
vim /etc/profile
PATH
添加:/usr/local/openvpn/sbin
,例如:
export PATH=$PATH:/usr/local/openvpn/sbin
source /etc/profile
查看是否成功
openvpn --version
退出当前目录
cd ..
下载easy-rsa
工具
- 打开GitHub地址https://github.com/OpenVPN/easy-rsa/releases
- 下载最新版easy-rsa的tgz包
- 下载完成上传到服务器
# 直接执行脚本下载到服务器
wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz
# 解压
tar -zxf EasyRSA-3.0.8.tgz
# 进入该目录
cd EasyRSA-3.0.8/
生成服务端与客户端证书
- 初始化
./easyrsa init-pki
- 生成根证书
./easyrsa build-ca nopass
nopass
表示不加密- 提示输入通用名,可以输入
服务器IP
或者域名
或者不输入
,然后直接回车 - 此时看到提示
ca
文件在/root/EasyRSA-3.0.8/pki/ca.crt
- 服务端:
- 创建服务端证书
./easyrsa gen-req server nopass
server
即创建后的证书文件名,可自定义nopass
表示不加密- 提示输入通用名,直接回车
- 给服务端证书做签名
./easyrsa sign server server
- 第一个
server
代表签为服务端 - 第二个
server
为服务端证书文件名 - 提示一些确认信息,输入
yes
并回车
- 第一个
- 创建服务端证书
- 客户端:(如果需要多个客户端,每个客户端都需要一个唯一的证书。重复以下两步:client端文件名不相同即可,例如:client1 client2)
- 创建客户端证书
./easyrsa gen-req client nopass
nopass
表示不加密client
即创建后的文件名,可自定义- 提示输入通用名,直接回车
- 给客户端证书做签名
./easyrsa sign client client
- 第一个
client
代表签为客户端 - 第二个
client
为客户端证书文件名 - 提示一些确认信息,输入
yes
并回车
- 第一个
- 创建客户端证书
配置服务端
复制服务端秘钥至安装目录
# PS:当前命令还在上文的 /root/EasyRSA-3.0.8 目录下
cp -p pki/ca.crt pki/private/server.key pki/issued/server.crt /usr/local/openvpn/
复制服务端配置文件至安装目录
# 退出当前文件夹并进入openvpn源码文件夹
cd ../openvpn-2.5.3/
# 复制配置文件示例
cp ./sample/sample-config-files/server.conf /usr/local/openvpn/
生成其他文件
进入到安装目录
cd /usr/local/openvpn/
生成pem
文件
openssl dhparam -out dh2048.pem 2048
生成key
文件
openvpn --genkey tls-auth ta.key
修改配置文件
编辑配置文件
vim server.conf
修改如下配置
# 监听端口:默认1194,可自定义修改
port 1194
# 使用TCP协议
proto tcp
;proto udp
# 使用tap模式
dev tap
;dev tun
# 证书文件
ca /usr/local/openvpn/ca.crt
cert /usr/local/openvpn/server.crt
key /usr/local/openvpn/server.key
# pem文件
dh /usr/local/openvpn/dh2048.pem
# 给客服端分配的IP网段,根据自己喜好修改,不能和服务器内网IP一个网段
server 10.8.0.0 255.255.255.0
# IP记录文件
ifconfig-pool-persist /usr/local/openvpn/ipp.txt
# 允许客户端访问服务器上的其他网络,10.0.4.0是服务器的内网IP网段,根据实际情况修改
push "route 10.0.4.0 255.255.255.0"
# 允许客户端之间互相访问,例如公司电脑和家里电脑想互相访问,则需要开启
client-to-client
# key文件
tls-auth /usr/local/openvpn/ta.key 0 # This file is secret
# 加密方式
cipher AES-256-GCM
# 状态文件
status /usr/local/openvpn/openvpn-status.log
# 日志文件
log /usr/local/openvpn/openvpn.log
# 明确的退出通知,TCP模式需要设置为0
explicit-exit-notify 0
修改完成后保存退出
修改firewalld
必须启用
firewalld
,否则无法完成网络转发(当然,如果你会iptables就当我没说)
启用firewalld
并设置开机自启
PS:如果服务器没有启用过firewalld
且ssh
端口不是默认的22,那么请使用云厂商的VNC
网页模式登录服务器并开启防火墙,然后再添加自定义的ssh
端口放行。XShell
等远程连接会在打开firewalld
之后被动断开,需要开放端口之后再重新连接
systemctl start firewalld.service
systemctl enable firewalld.service
开放openvpn
的端口以及打开masquerade
firewall-cmd --zone=public --permanent --add-port=1194/tcp
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --complete-reload
启动与开机自启
新建服务文件
vim /etc/systemd/system/openvpn.service
添加如下内容
[Unit]
Description=OpenVPN Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
ExecStart=/usr/local/openvpn/sbin/openvpn --config /usr/local/openvpn/server.conf
刷新系统服务、设置开机自启、启动服务、查看服务状态
systemctl daemon-reload
systemctl enable openvpn.service
systemctl start openvpn.service
systemctl status openvpn.service
修改云服务器控制面板的防火墙
根据上文配置文件中的端口和协议,在云服务器的控制面板中打开对应的端口和协议即可
客户端(Windows)
- 打开官网https://openvpn.net/community-downloads/
- 点击
Windows 64-bit MSI installer
后面的OpenVPN-2.5.3-I601-amd64.msi
进行下载
# 浏览器打开如下地址
https://swupdate.openvpn.org/community/releases/OpenVPN-2.5.3-I601-amd64.msi
- 双击开始安装
- 选择
Customize
自定义安装Launch on User Logon
:图形化界面的开机自启。根据自己需求进行选择OpenVPN Servcie
:后台服务模式(如果要开机自动连接VPN,则启用)Wintun
:tun
模式虚拟网卡。根据上文配置,关闭
- 自定义选项完成后,点击
Install Now
- 安装完成后,选择
Close
完成安装
在服务器上导出客户端证书文件和ta.key
文件,列表如下:
- /root/EasyRSA-3.0.8/pki/ca.crt
- /root/EasyRSA-3.0.8/pki/private/client.key
- /root/EasyRSA-3.0.8/pki/issued/client.crt
- /usr/local/openvpn/ta.key
导出后放在C:\Program Files\OpenVPN\config
目录下
客户端配置文件
复制一份C:\Program Files\OpenVPN\sample-config\client.ovpn
到C:\Program Files\OpenVPN\config
路径下,使用记事本等文本编辑工具编辑client.ovpn
文件。修改的内容如下
# 使用tap模式
dev tap
;dev tun
# 使用TCP
proto tcp
;proto udp
# 服务端地址与端口
remote x.x.x.x 1194
# 秘钥文件(默认即可)
ca ca.crt
cert client.crt
key client.key
# ta.key文件(默认即可)
tls-auth ta.key 1
# 加密方式
cipher AES-256-GCM
# 不缓存认证(添加在文件结尾)
auth-nocache
客户端配置
右击任务栏
带锁的小电脑图标,选择选项
菜单
- 常规:
- 启动:此处也可以设置图形界面是否开机自启
- 静默连接:连接时不弹出窗口
- 显示通知:根据需求选择
- 高级:
- 配置文件:
C:\Program Files\OpenVPN\config
- 日志文件:
C:\Program Files\OpenVPN\log
- 配置文件:
图形界面连接
- 双击桌面
OpenVPN GUI
图标启动图形界面(已启动则忽略) - 双击
任务栏
带锁的小电脑图标 - 看到图标变绿色代表连接成功
- (可选)打开
cmd
,测试ping 10.8.0.1
PS:GUI打开自动连接:快捷方式 → 右击 → 属性 →
目标
后面添加--connect client.ovpn
(注意--前面有个空格) → 确定
开机自启服务连接
安装时如果启用了OpenVPN Servcie
,则安装目录下有一个config-auto
文件夹
- 使用
突袭界面连接
保证连接正常可用 - 将
config
目录下的配置文件都复制到config-auto
目录下 - 重启电脑,然后打开
cmd
,测试ping 10.8.0.1
PS:
可能会出现开机之后ping
不通的情况,等2分钟后又可以连上去。
从日志分享,第一次连接的时候连不上,2分钟之后会重试,重试的时候就连上去了
目前还不知道为啥第一次连不上去
当服务端和客户端均正常启动后,就可以通过服务器的内网IP访问到上面的服务
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK