OpenVPN клиент в Linux към MikroTik сървър
В поста за MikroTik OpenVPN конфигурирах три рутера в три отдалечени офиса и създадох между тях криптирани тунели, за да могат LAN мрежите им да обменят фирмената информация, а останалият трафик да минава през локалния доставчик. Освен тунелите трябваше да пипна нещо и по фирмения сървър, за което се наложи от дома ми да вдигна OpenVPN тунел.
В поста за EdgeRouter вдигнах сесия от домашния си рутер. Сега обаче трябва да го направя от лаптопа си с Kali Linux.

Инсталация
sudo apt install openvpn
Сертификатите
Копирам ги директно от рутера:
scp admin@93.155.130.62:cert_export_CA.crt /home/samyil
scp admin@93.155.130.62:cert_export_client.crt /home/samyil
scp admin@93.155.130.62:cert_export_client.key /home/samyil

Ключът излиза защитен с парола, което значи въпрос при всяко вдигане на сесията. Махам го с openssl:
sudo openssl rsa -in /home/samyil/cert_export_client.key -out /home/samyil/cert_export_client_rmpass.key
Потребител и парола
vim pass.txt
Потребителят и паролата са един под друг:
samyil
qwerty
⚠️ Този файл съдържа парола в чист вид, а ключът вече е без защита. И двата задължително се затварят за всички освен собственика — иначе всеки друг потребител на машината има готов достъп до фирмената мрежа:
chmod 600 /home/samyil/pass.txt /home/samyil/cert_export_client_rmpass.key
Конфигурационен файл
client
dev tun
proto tcp
remote 93.155.130.62 1194
resolv-retry infinite
nobind
persist-key
persist-tun
verb 1
cipher AES-128-CBC
auth SHA1
auth-user-pass /home/samyil/pass.txt
ca /home/samyil/cert_export_CA.crt
cert /home/samyil/cert_export_client.crt
key /home/samyil/cert_export_client_rmpass.key
Настройките cipher и auth тук са такива, каквито ги поддържаше RouterOS 6 по онова време. На RouterOS 7 сървърът вече умее по-добри и си струва да се вдигнат от двете страни:
cipher AES-256-GCM
auth SHA256
RouterOS 7 поддържа и UDP за OpenVPN, което на практика значи по-малко закъснение — TCP в тунела върху TCP навън е известна причина за забавяне при натоварване.
Вдигане
sudo openvpn --config /home/samyil/ovpn

Проверка
ip addr show tun0
ip route | grep tun0
ping адрес-във-фирмената-мрежа
Като услуга, вместо на ръка
За тунел, който трябва да е вдигнат постоянно, конфигурацията се слага в /etc/openvpn/client/ с разширение .conf и се пуска като systemd услуга:
sudo cp /home/samyil/ovpn /etc/openvpn/client/office.conf
sudo systemctl enable --now openvpn-client@office
systemctl status openvpn-client@office
Така тунелът се вдига при зареждане и се вдига отново сам, ако падне.
Само фирмената мрежа или целият трафик
По подразбиране през тунела минава само това, за което сървърът е пратил маршрут — тоест фирмените мрежи, а останалото ходи по обичайния път. Ако трябва всичко да минава през тунела, се добавя:
redirect-gateway def1
Обратното — да се пренебрегнат маршрутите, които сървърът налага, и да се решава локално:
route-nopull
route 192.168.122.0 255.255.255.0