OpenVPN: настройка Ubuntu-сервера и клиента Keenetic
Опубликовано 11.09.2025
🛠 Настройка OpenVPN: Ubuntu (сервер) + Keenetic (клиент)
В этой инструкции разберём, как поднять OpenVPN-сервер на Ubuntu и подключить к нему роутер Keenetic. Такой сценарий удобен, если нужно дать доступ к домашней сети или пробросить сервисы (например, PBX или веб-сервер) через VPN.
1. Подготовка Ubuntu-сервера
1.1 Установка пакетов
sudo apt update
sudo apt install -y openvpn easy-rsa iptables-persistent
1.2 Создание PKI (Easy-RSA v3)
make-cadir ~/easy-rsa
cd ~/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
Серверные ключи
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
Клиентские ключи (для Keenetic)
./easyrsa gen-req keenetic nopass
./easyrsa sign-req client keenetic
TLS-ключ (именно tls-auth
, а не tls-crypt
)
openvpn --genkey secret ta.key
1.3 Разложить ключи
В
/etc/openvpn/server/
:server.crt
,server.key
,dh.pem
,ca.crt
,ta.key
В
/etc/openvpn/ccd/keenetic
(создадим позже) — маршруты LAN.
2. Конфигурация OpenVPN-сервера
Файл /etc/openvpn/server/server.conf
:
port 1194
proto udp
dev tun
user nobody
group nogroup
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
ca ca.crt
cert server.crt
key server.key
dh dh.pem
# TLS-защита
tls-auth ta.key 0
auth SHA256
data-ciphers AES-256-CBC
data-ciphers-fallback AES-256-CBC
keepalive 10 120
persist-key
persist-tun
explicit-exit-notify 1
# Пушим только нужные маршруты
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.45.0 255.255.255.0"
# Индивидуальные настройки клиентов
client-config-dir /etc/openvpn/ccd
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3
3. Указать сеть за Keenetic (CCD)
Файл /etc/openvpn/ccd/keenetic
:
iroute 192.168.45.0 255.255.255.0
4. Включить IP-форвардинг
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-openvpn.conf
sudo sysctl --system
5. Настройка iptables (DNAT + SNAT)
Пример для:
- Web-сервер:
192.168.45.230:443
- PBX:
192.168.45.235:5060–5065 TCP, 10000–20000 UDP
EXT_IF=enp3s0 # внешний интерфейс
# DNAT
iptables -t nat -A PREROUTING -i $EXT_IF -p tcp --dport 443 -j DNAT --to-destination 192.168.45.230
iptables -t nat -A PREROUTING -i $EXT_IF -p tcp --dport 5060:5065 -j DNAT --to-destination 192.168.45.235
iptables -t nat -A PREROUTING -i $EXT_IF -p udp --dport 10000:20000 -j DNAT --to-destination 192.168.45.235
# FORWARD (туда и обратно)
iptables -A FORWARD -i $EXT_IF -o tun0 -d 192.168.45.230 -p tcp --dport 443 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $EXT_IF -o tun0 -d 192.168.45.235 -p tcp --dport 5060:5065 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $EXT_IF -o tun0 -d 192.168.45.235 -p udp --dport 10000:20000 \
-m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i tun0 -o $EXT_IF \
-m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# SNAT (чтобы ответы шли через VPN-сервер)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -d 192.168.45.0/24 -o tun0 -j MASQUERADE
Сохранить правила:
netfilter-persistent save
6. Конфигурация клиента Keenetic
Файл keenetic.ovpn
:
client
dev tun
proto udp
remote <PUBLIC_IP_UBUNTU> 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
key-direction 1
auth SHA256
cipher AES-256-CBC
verb 3
<ca>
-----BEGIN CERTIFICATE-----
... ca.crt ...
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
... keenetic.crt ...
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
... keenetic.key ...
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
... ta.key ...
-----END OpenVPN Static key V1-----
</tls-auth>
Загрузить в интерфейсе Keenetic: Интернет → VPN-клиенты → OpenVPN → Загрузить профиль.
- Снять галку: «Использовать для выхода в интернет» (иначе весь трафик уйдёт в VPN).
✅ Итог
Теперь Ubuntu-сервер выполняет роль VPN-шлюза, а Keenetic предоставляет доступ к своей локальной сети (192.168.45.0/24
).
Дополнительно реализован проброс портов для сервисов за роутером.