新手向导:轻松离线搭建最新版OpenVPN(含一键安装脚本)
[alert title="文字块标题"][/alert]
[alert title="文字块标题"][/alert]
- 最常见的openvpn搭建方式就是通过docker,非常的简单、方便。如果是搭建过openvpn应该会知道这个镜像kylemanna/openvpn,但是它一直没有更新了,也就是三年前更新过然后就再也没更新过了,版本停留在openvpn2.4的版本。
那么如何升级openvpn到最新版本呢?可以到官方的开源社区找到最新的安装版本,可以看到最近一次更新是在2024年2月份openvpn v2.6.9。可以看到2.6.7 2.6.8 2.6.9 官方的开源社区更新还是很频繁的。
以下是详细的安装步骤:
一、离线包安装步骤
1、openvpn安装
- 官方下载最新版本openvpn
- 安装前先安装以下依赖,不然会报错
apt install -y gcc libnl-genl-3-dev libcap-ng-dev pkg-config liblzo2-dev libssl-dev libpam0g-dev
./configure
- 安装openssl
checking additionally if OpenSSL is available and version >= 1.0.2... configure: error: OpenSSL version too old
- 下载编译安装,opensslv1.1.1最新的一个版本是1.1.1w。如果你的版本是3.x好像也不行,只能是1.1.1x的版本。
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar -zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
apt install -y gcc make zlib1g-dev
./config --prefix=/usr/local/openssl shared zlib
make -j32 (j32使用多线程,比make会快一些)
make install
- 备份旧版本openssl,设置新版本
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -sv /usr/local/openssl/bin/openssl /usr/bin/openssl
#更新动态链接库数据
echo "/usr/local/openssl/lib" >>sudo /etc/ld.so.conf
ldconfig -v
openssl version
如果openssl version报以下错
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
继续执行以下命令
sudo ln -sv /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/
sudo ln -sv /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/
openssl version
如果openssl version已经是最新版本,但还是提示too old可以执行以下命令:
apt install libssl-dev
执行就可以了,最后,确认一下版本:
# openssl version
OpenSSL 1.1.1w 11 Sep 2023
继续./configure
configure: error: No compatible LZ4 compression library found. Consider --disable-lz4
如果报以上错误的话就执行:
./configure --disable-lz4
如果正常就成功了,如果报以下错误:
configure: error: libpam required but missing
apt install libpam0g-dev
执行后应该就没错了
接着就是执行
make -j32
make install
看到以上结果就完成安装了,也可以看看openvpn的版本信息。
openvpn --version
2、证书生成
- 初始化密钥
cd /usr/share/easy-rsa
./easyrsa init-pki
初始化,程序将自动创建pki并生成相应的密钥文件
完成后会生成pki目录
- 编辑easyrsa的配置文件 vars:
set_var EASYRSA_REQ_COUNTRY "hanko"
set_var EASYRSA_REQ_PROVINCE "hanko"
set_var EASYRSA_REQ_CITY "hanko"
set_var EASYRSA_REQ_ORG "hanko"
set_var EASYRSA_REQ_EMAIL "hanko@hanko.com"
set_var EASYRSA_REQ_OU "hanko"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO "rsa"
set_var EASYRSA_DIGEST "sha256"
set_var EASYRSA_CA_EXPIRE 365000
set_var EASYRSA_CERT_EXPIRE 365000
set_var EASYRSA_CERT_RENEW 18000
set_var EASYRSA_CRL_DAYS 6000
- 输入以下命令,生成根证书:
./easyrsa build-ca
PEM pass phrase,这个就是根证书密码,后面好几个步骤需要用到它,出现 “Common Name” 的时候直接敲回车默认即可。
- 服务器证书生成:
./easyrsa gen-req server nopass
Common Name直接回车使用默认名称:server
- 签发服务器证书:
./easyrsa sign-req server server
出现 “Type the word ‘yes’ to continue” 的时候输入: yes
然后输入刚才在上一步设置的根证书密码。
- 生成Diffie-Hellman
./easyrsa gen-dh
至此,我们就完成了全部所需证书文件的生成,下面将这些零散的文件集中聚合到 keys 目录中去:
- 把文件复制到 /etc/openvpn
mkdir -p /etc/openvpn
cp /usr/share/easy-rsa/pki/ca.crt /etc/openvpn/
cp /usr/share/easy-rsa/pki/private/server.key /etc/openvpn/
cp /usr/share/easy-rsa/pki/issued/server.crt /etc/openvpn/
cp /usr/share/easy-rsa/pki/dh.pem /etc/openvpn/dh2048.pem
cp /usr/share/easy-rsa/pki/issued/y-client.crt /etc/openvpn/
cp /usr/share/easy-rsa/pki/private/y-client.key /etc/openvpn/
- tls密钥生成ta.key
tls密钥生成:openvpn --genkey secret ta.key这个密钥由openvpn主程序生成,起作用是用密钥取代密码输入
openvpn --genkey secret ta.key
- 复制server.conf配置文件
cp /usr/local/src/openvpn-2.6.8/sample/sample-config-files/server.conf /etc/openvpn/
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1
- 启动openvpn
openvpn --config /etc/openvpn/server.conf
- 生成client证书
./easyrsa gen-req client nopass
./easyrsa sign-req client client
cp /usr/share/easy-rsa/pki/private/client.key /etc/openvpn/
cp /usr/share/easy-rsa/pki/issued/client.crt /etc/openvpn/
- client.ovpn
client
dev tun
proto udp
remote 10.9.2.79 1194
resolv-retry infinite
nobind
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
verb 3
- 安装windows或linux版本客户端,使用client.ovpn文件生成的client.crt、client.key、ta.key连接openvpn服务端
至此安装就完成了。
二、一键安装脚本
⭐⭐⭐⭐⭐
重点来了↓↓↓
一键安装,来了!!!
如果感到上面的命令太多、太麻烦。那么可以看看这个github上的大牛们做成了一键安装的命令openvpn-install.sh,一键安装。
安装完客户端文件也会自动生成,直接下载使用就可以了。
p.s.一键安装比较简单,但也存在一个问题就是版本不是最新的,脚本使用的是apt install方式安装openvpn,apt install源最新版本是2.5.x。截止2024年3月最新版本应该是v2.6.9。
三、相关问题
- 安装好后,客户端正常连接至服务器,但无法使用代理网络。
增加以下配置:
iptables -t nat -A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE