Skip to content

By Тодор in Mikrotik

Вероятно много “колеги” ще си помислят, че да се конфигурира IPSec/L2TP тунелче е далеч по-съвместимо откъм клиентксата част – поддържа се “извън кутията” от всичко от Windows XP насам. Андроид, IOS, Windows имат вграден клиент за такъв тип тунел, което значи, че не е необходимо да се инсталира допълнителен софтуер. Не, че не може, но не е задължително.
Напрактика обаче, не е толкова сладко, колкото звучи 🙂
Ще го обясня максимално разбираемо и минимално подробно – ipsec-esp, ike и l2tp трафика е гаден за рутиране и често нещата изобщо не се случват, ако в мрежата има NAT. Най-обичайната ситуация е да седнете в заведение с наличен свободен безжичен Интернет, който изглежда като да работи, обаче VPN тунела не успява да се закачи. И всичко това, защото са сложили рутер, който се е паднал от пакет зрънчо или нарочно са блокирали nat-traversal, без който ще видим ipsec само през крив макарон.

И така, следващото достатъчно съвместимо, достъпно, безплатно и т.н. решение се явява OpenVPN. Има клиенти за всякакви устройства и операционни системи. Може да се ползва в режим dial-up за пътуващи “работници”, а може и като site-to-site, свързвайки цели мрежи. Изключително гъвкав протокол, може да работи по TCP или по UDP на порт по избор. Минава през всякакви рутери, нескопосано маршрутизиране и куци NAT-ове.
Сървър може да се конфигурира на OpenWRT, Mikrotik и други достъпни решения, както за вкъщи, така и за офиса.

Ще опиша пример със сървър на Mikrotik.

Създаване на пул от адреси за клиентите:
/ip pool add name=remote-pool ranges=10.10.10.100-10.10.10.120

Добавяме профил:
/ppp profile add local-address=10.10.10.1 name=openvpn remote-address=remote-pool use-encryption=required
10.10.10.1 е ИП-то на LAN (вътрешния) интерфейса.

Създаваме си потребител:
/ppp secret add name=todor password=p4ssW00 profile=openvpn

Без сертификат, обаче няма да минем:

/certificate add name=vpn-cert common-name=vpn.kamenitza.org days-valid=3650
/certificate sign 0
/certificate export-certificate 0

С тези команди ще бъде издаден, подписан и експортнат 10 годишен сертификат за домейна vpn.kamenitza.org. Изнесения сертификат е съхранен във файл на рутера.

Вземаме публичния ключ:

/file print detail
 0 name="flash" type="disk" creation-time=jan/01/1970 02:00:03
 1 name="cert_export_vpn-cert.crt" type=".crt file" size=1192 
   creation-time=nov/28/2018 22:34:18 contents=
     -----BEGIN CERTIFICATE-----
     MIIDQzCCAiugAwIBAgIIS74buY1yHXAwDQYJKoZIhvcNAQELBQAwHDEaMBgGA1UE
     AwwRdnBuLmthbWVuaXR6YS5vcmcwHhcNMTgxMTI4MjAzMzIyWhcNMjgxMTI1MjAz
     MzIyWjAcMRowGAYDVQQDDBF2cG4ua2FtZW5pdHphLm9yZzCCASIwDQYJKoZIhvcN
     AQEBBQADggEPADCCAQoCggEBAMBP8cDeknHKYPXCvgZkT+KeNXmjazXmcShNtGY6
     uUcuVbPBOn6FcqA/VwSAdVeNnkY0IqZM1zHCr/kXtgWVGNld2/GnkGCoNgm6SrkZ
     O6dZraC/B3LRIRLp0OR0aZ8/vTO3TwSP+/M/3rWKcs5LdpS8SoheHZBbcK43/qB1
     dR2si5sWJ4l34ketjuJrduzxxD+TE4QLwovMzNyE9S+tKidBBN+/PEJDv3njUZwe
     II+CN0JwosEZ2FfW7MYsx1kUyYZtrBUjCjxerMom9iQR9gWUpsey3yhNKGCDHe/v
     z1h3vkZ5znDAjf/uRbnwGRHkUbIiZ1XKIhmOnPnlgqw4qasCAwEAAaOBiDCBhTAP
     BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBtjAdBgNVHSUEFjAUBggrBgEF
     BQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFBHDtmEAUdv54tr/tRHkHWu9BA5lMCQG
     CWCGSAGG+EIBDQQXFhVHZW5lcmF0ZWQgYnkgUm91dGVyT1MwDQYJKoZIhvcNAQEL
     BQADggEBACa76JK+oUgYddfrfABWGEQDDvSUv37Sfo4WqqokM1r4xuQsF8V+/oEO
     ifdTTX4r/48tohct+jRBCW5vh6Jkx5mVie8MlhFG5oY1dxtd/M9F1Kc6PpyRipCw
     yvuJFOU8ESxEQSwFsElckvaamc09fw55rUgaFmMebuhleXUuyg7WAPUlLSgeGqyd
     RB4lOitA4qmOgEBIUs7Y6jiUe44orWzgGrQGP9zoI8aPwRGvKJoe11PCocrEJvIM
     xMcHyOdrqECY4LlgNLoDGRXJYASWSqTzPvl4TAH1ffKhdp+aUP3/EoHYaF2nu8fD
     wYHuD/lP0Cy21zbobDaFPF4iKdAk2qc=
     -----END CERTIFICATE-----

Всичко между BEGIN CERTIFICATE и END CERTIFICATE, включително, ще ни трябва за конфигурирането на клиента.

Остана и интерфейса:

/interface ovpn-server server
set auth=sha1 certificate=vpn-cert cipher=aes256 default-profile=openvpn 
    enabled=yes mode=ip netmask=24 port=1194 require-client-certificate=no

Евентуално ще трябва да отворим tcp/1194 на фиревала.

Харесва ми възможността отдалечените клиенти да са в същата мрежа, в която са и LAN клиентите, но за да работи изобщо тази екстра, която е на ръба на стандартите, трябва да се активира proxyarp на вътрешния интерфейс.

Клиенската конфигурация изглежда по следния начин:

dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
auth-user-pass
resolv-retry infinite
remote vpn.kamenitza.org 1194 tcp-client
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDQzCCAiugAwIBAgIIS74buY1yHXAwDQYJKoZIhvcNAQELBQAwHDEaMBgGA1UE
AwwRdnBuLmthbWVuaXR6YS5vcmcwHhcNMTgxMTI4MjAzMzIyWhcNMjgxMTI1MjAz
MzIyWjAcMRowGAYDVQQDDBF2cG4ua2FtZW5pdHphLm9yZzCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAMBP8cDeknHKYPXCvgZkT+KeNXmjazXmcShNtGY6
uUcuVbPBOn6FcqA/VwSAdVeNnkY0IqZM1zHCr/kXtgWVGNld2/GnkGCoNgm6SrkZ
O6dZraC/B3LRIRLp0OR0aZ8/vTO3TwSP+/M/3rWKcs5LdpS8SoheHZBbcK43/qB1
dR2si5sWJ4l34ketjuJrduzxxD+TE4QLwovMzNyE9S+tKidBBN+/PEJDv3njUZwe
II+CN0JwosEZ2FfW7MYsx1kUyYZtrBUjCjxerMom9iQR9gWUpsey3yhNKGCDHe/v
z1h3vkZ5znDAjf/uRbnwGRHkUbIiZ1XKIhmOnPnlgqw4qasCAwEAAaOBiDCBhTAP
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBtjAdBgNVHSUEFjAUBggrBgEF
BQcDAQYIKwYBBQUHAwIwHQYDVR0OBBYEFBHDtmEAUdv54tr/tRHkHWu9BA5lMCQG
CWCGSAGG+EIBDQQXFhVHZW5lcmF0ZWQgYnkgUm91dGVyT1MwDQYJKoZIhvcNAQEL
BQADggEBACa76JK+oUgYddfrfABWGEQDDvSUv37Sfo4WqqokM1r4xuQsF8V+/oEO
ifdTTX4r/48tohct+jRBCW5vh6Jkx5mVie8MlhFG5oY1dxtd/M9F1Kc6PpyRipCw
yvuJFOU8ESxEQSwFsElckvaamc09fw55rUgaFmMebuhleXUuyg7WAPUlLSgeGqyd
RB4lOitA4qmOgEBIUs7Y6jiUe44orWzgGrQGP9zoI8aPwRGvKJoe11PCocrEJvIM
xMcHyOdrqECY4LlgNLoDGRXJYASWSqTzPvl4TAH1ffKhdp+aUP3/EoHYaF2nu8fD
wYHuD/lP0Cy21zbobDaFPF4iKdAk2qc=
-----END CERTIFICATE-----
</ca>

Съхранява се във файл с разширение .ovpn и се импортира в желания клиент или устройство. При свързване ще попита за име и парола.

С тази конфигурация през тунела ще има връзка единствено до отдалечената вътрешна мрежа.
Към момента Микротик не поддържа “route-push” – възможността да изпрати към клиента маршрути за допълнителни мрежи, които да се рутират през тунела. И така, ако има нужда от рутиране на допълнителни мрежи през тунела или изобщо за целия Интернет трафик, ще трябва към клиентската конфигурация да се добавят следните редове:
route 10.0.0.0 255.0.0.0
или
route 0.0.0.0 0.0.0.0 vpn_gateway 0

Дано не съм забравил нещо 🙂

Comment Feed

No Responses (yet)



Some HTML is OK

or, reply to this post via trackback.