Cómo configurar el servicio OpenVPN en el sistema Ubuntu

Primero, permítanme explicarles que el entorno local es el siguiente:

Sistema operativo: Ubuntu-18.04-LTS
IP interna: 192.168.1.110
IP externa: 14.153.76.90
Versión de OpenVPN: 2.4.4


1. Instalar OpenVPN
2. Crear certificado y clave secreta

  1. Modificar e inicializar variables de entorno.
  2. Cree una clave secreta
    3. Cree un archivo de configuración del lado del servidor (server.conf)
    4. Configure el kernel y el firewall, inicie el servidor
    5. Cree un archivo de configuración del cliente client.ovpn (para el software del cliente)
    6. Cree un enrutador virtual en el servidor del enrutador
    7. Inicie el cliente

1. Instale OpenVPN

Primero instale algunas dependencias, instale openssl y lzo. lzo se usa para comprimir datos de comunicación para acelerar la transmisión.

sudo apt-get install openssl libssl-dev
sudo apt-get install lzop

Instale OpenVPN y easy-rsa

sudo apt-get install openvpn
sudo apt-get install easy-rsa

2. Crear certificado y clave secreta

Después de instalar easy-rsa, podemos comenzar a crear las claves necesarias para el servicio OpenVPN.

  1. Modificar e inicializar variables de entorno.
sudo su
cd /usr/share/easy-rsa/
vim vars

# 修改注册信息,比如公司地址、公司名称、部门名称等。
export KEY_COUNTRY="CN"
export KEY_PROVINCE="GuangDong"
export KEY_CITY="ShenZhen"
export KEY_ORG="XJXH"
export KEY_EMAIL="[email protected]"
export KEY_OU="FuckItWhatever"
export KEY_NAME="EasyRSA"

# 使环境变量生效
source ./vars

# 添加 openssl 配置文档
cp openssl-1.0.0.cnf openssl.cnf

2. Crea una clave secreta

# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/keys目录里
./clean-all

# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca

# 为服务端生成证书和私钥, --batch 表示保持默认设置,无须回车确认
./build-key-server --batch server

# 为客户端生成证书和私钥
./build-key --batch client

# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh

# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key

3. Cree el archivo de configuración del lado del servidor (server.conf)

Primero, cree un nuevo directorio de claves en el directorio de configuración de openvpn.

sudo mkdir -p /etc/openvpn/keys

Luego, copie el certificado openvpn y la clave que necesita en el directorio de claves que acaba de crear.

cp /usr/share/easy-rsa/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

Copie una copia de la plantilla del archivo de configuración del lado del servidor server.conf en /etc/openvpn/

gzip -d /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/

Editar servidor.conf

# 服务端口
port 1194

# 使用的传输协议
proto tcp
# 路由模式,桥接模式用dev tap
dev tun

# 证书路径
ca keys/ca.crt
cert keys/server.crt
key keys/server.key

dh keys/dh2048.pem

# 默认虚拟局域网网段,不要和实际的局域网冲突即可
server 10.8.0.0 255.255.255.0

ifconfig-pool-persist /var/log/openvpn/ipp.txt

# 192.168.1.0 是我的 OpenVPN 服务器所在在局域网的网段
# 如果你的局域网不是这个,那这里需要修改成你的网段
push "route 192.168.1.0 255.255.255.0"
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn

# 这里如果设置了 tls-auth 则客户端也要设置,而且要跟服务器端对应,服务端为0,客户端则为 1
# 我这里注释掉了,因为我客户端没有使用 tls-auth
;tls-auth keys/ta.key 0 # This file is secret
;key-direction 0

# clients we want to allow.
max-clients 100

persist-key
persist-tun

status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
log-append  /var/log/openvpn/openvpn.log

verb 3

# 如果上面配置了传输方式为 TCP, 则此处应该注释掉,否则会产生冲突
;explicit-exit-notify 1

# 这里配置使用用户名和密码登录的支持,可以取代使用秘钥和证书登录
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env
# 这里非常重要,如果你启用了该选项,你就只需要通过用户名和密码登录了
# 但是如果你注释了该选项,那你必须使用 用户名 + 密码 + 证书 才能登录成功,缺一不可。
;verify-client-cert none
username-as-common-name
script-security 3

Si configura el inicio de sesión con nombre de usuario y contraseña, deberá crear el script de verificación de inicio de sesión vim /etc/openvpn/checkpsw.sh.

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/etc/openvpn/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file "${PASSFILE}" for reading." >> ${LOG_FILE}
  exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username="${username}", password="${password}"." >> ${LOG_FILE}
  exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username="${username}"." >> ${LOG_FILE}
  exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username="${username}", password="${password}"." >> ${LOG_FILE}
exit 1

Luego también necesita crear un archivo de libro de contraseñas vim /etc/openvpn/psw-file, con un usuario por línea, y el nombre de usuario y la contraseña están separados por espacios:

user1 pass1
user2 pass2
user3 pass3

En este punto, se completa la configuración del servidor.

4. Configure el kernel y el firewall e inicie el servidor.El
primer paso es habilitar la función de enrutamiento y reenvío.

sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
sed -i '/net.ipv4.ip_forward/s/#//' /etc/sysctl.conf
sysctl -p

El segundo paso es configurar iptables.

iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

Luego guardamos la configuración de iptables y cargamos automáticamente la configuración y la inicializamos en el arranque. Esto se puede lograr rápidamente a través de iptables-persistent

sudo apt-get install iptables-persistent

guardar regla

sudo service netfilter-persistent save
Puede ver que las reglas de iptables se han cargado automáticamente la próxima vez que inicie la computadora.

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:openvpn /* openvpn */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

Desactivar el firewall ufw

ufw disable

Paso 3: inicie el servicio OpenVPN

/etc/init.d/openvpn start
# 设置开机启动
systemctl enable openvpn@server

5. Cree el archivo de configuración del cliente client.ovpn (para uso del software del cliente)

Primero copie una plantilla client.conf y asígnele el nombre client.ovpn

mkdir ~/openvpn-client
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-client/client.ovpn

Luego modifique client.ovpn, vim /etc/openvpn/client.ovpn

client
# 这里设置跟服务端一样
dev tun
proto tcp

# OpenVPN 服务端 IP 和端口
remote 14.153.76.90 1194

resolv-retry infinite

nobind

persist-key
persist-tun

# 这里设置证书和秘钥
ca ca.crt
cert client.crt
key client.key

remote-cert-tls server

# 如果服务端使用 tls-auth, 则这里也要启用
;tls-auth ta.key 1

comp-lzo

verb 3

# 用来存放用户名和密码的文件路径,这样在连接的时候就不需要手动输入用户名密码了
auth-user-pass pass.txt

Después de modificar el documento de configuración del cliente, debe copiar el archivo del certificado a la carpeta ~/openvpn-client:

cp /ect/openvpn/keys/ca.crt ~/openvpn-client
cp /usr/share/easy-rsa/keys/client.crt ~/openvpn-client
cp /usr/share/easy-rsa/keys/client.key ~/openvpn-client

Luego necesita crear un nuevo archivo pass.txt en el directorio openvpn-client. Escriba el nombre de usuario en la primera línea y la contraseña en la segunda línea:

user1
pass1

7. Inicie el cliente
Es muy sencillo iniciar el cliente, simplemente copie la carpeta openvpn-client que creamos en el paso anterior en la máquina cliente y luego ejecute el siguiente comando:

cd openvpn-client
sudo openvpn --config client.ovpn

Si ve un resultado de registro similar al siguiente, significa que se ha conectado correctamente a la VPN y puede acceder directamente a la red donde se encuentra el servidor VPN.

Sat Apr 20 14:30:34 2019 /sbin/ip link set dev tun0 up mtu 1500
Sat Apr 20 14:30:34 2019 /sbin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5
Sat Apr 20 14:30:34 2019 /sbin/ip route add 192.168.0.0/24 via 10.8.0.5
Sat Apr 20 14:30:34 2019 /sbin/ip route add 10.8.0.1/32 via 10.8.0.5
Sat Apr 20 14:30:34 2019 Initialization Sequence Completed

Supongo que te gusta

Origin blog.csdn.net/qq_45206551/article/details/132428222
Recomendado
Clasificación