CentOS

OpenVPN на Linux: установка сервера, клиентский профиль и проверка маршрутов

Рабочий пример для Debian/Ubuntu: VPN 10.8.0.0/24, LAN 192.168.1.0/24, внешний интерфейс eth0, порт 1194/udp. Перед изменением firewall сохраните действующие правила и не закрывайте текущую SSH-сессию.

Установка и резервная копия

apt update
apt install -y openvpn easy-rsa nftables tcpdump
cp -a /etc/openvpn /root/openvpn-backup-$(date +%F-%H%M)
nft list ruleset > /root/nftables-before-openvpn.txt

Создание PKI

make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret pki/ta.key
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
install -d -m 700 /etc/openvpn/server
cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem pki/ta.key /etc/openvpn/server/

server.conf

cat > /etc/openvpn/server/server.conf <<'EOF'
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-crypt ta.key
server 10.8.0.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
keepalive 10 120
persist-key
persist-tun
user nobody
group nogroup
verb 3
status /var/log/openvpn-status.log
EOF
openvpn --config /etc/openvpn/server/server.conf --test-crypto

Маршрутизация и firewall

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/99-openvpn.conf
sysctl --system
cp /etc/nftables.conf /etc/nftables.conf.backup
cat > /etc/nftables.conf <<'EOF'
flush ruleset
table inet filter {
 chain input { type filter hook input priority 0; policy drop; ct state established,related accept; iif lo accept; tcp dport 22 accept; udp dport 1194 accept; }
 chain forward { type filter hook forward priority 0; policy drop; ct state established,related accept; iifname "tun0" oifname "eth0" accept; iifname "eth0" oifname "tun0" accept; }
 chain output { type filter hook output priority 0; policy accept; }
}
table ip nat { chain postrouting { type nat hook postrouting priority 100; ip saddr 10.8.0.0/24 oifname "eth0" masquerade; } }
EOF
nft -c -f /etc/nftables.conf
systemctl enable --now nftables

Запуск и проверка

systemctl enable --now openvpn-server@server
systemctl status openvpn-server@server --no-pager
ss -lunp | grep 1194
ip addr show tun0
journalctl -u openvpn-server@server --since '15 min ago' --no-pager

Клиентский профиль

Создайте client1.ovpn с параметрами client, dev tun, proto udp, remote vpn.example.ru 1194, remote-cert-tls server и встроенными блоками ca, cert, key и tls-crypt. После подключения проверьте:

ip addr show tun0
ip route
ping -c 3 10.8.0.1
ping -c 3 192.168.1.1

Диагностика и rollback

tcpdump -ni any udp port 1194
cat /var/log/openvpn-status.log
nft list ruleset
sysctl net.ipv4.ip_forward
# откат
systemctl disable --now openvpn-server@server
rm -f /etc/sysctl.d/99-openvpn.conf
sysctl --system
cp /etc/nftables.conf.backup /etc/nftables.conf
nft -f /etc/nftables.conf

Критерий успеха: сервер слушает UDP 1194, tun0 поднят, клиент получает адрес 10.8.0.x и открывает разрешённый ресурс в LAN.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *