0887 371 498 support@itservice-bg.net
18.01.2018 · Самуил Арсов · Bash script, Debian, Kali Linux, Linux commands, MikroTik, Ubuntu, Рутери

OpenVPN клиент в Linux към MikroTik сървър

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

В поста за EdgeRouter вдигнах сесия от домашния си рутер. Сега обаче трябва да го направя от лаптопа си с Kali Linux.

OpenVPN Linux клиент към MikroTik сървър — схема на свързването

Инсталация

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

Копиране на OpenVPN сертификати от MikroTik със scp

Ключът излиза защитен с парола, което значи въпрос при всяко вдигане на сесията. Махам го с 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

Работеща OpenVPN сесия от Kali Linux към MikroTik

Проверка

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