مقدمه
بالا آمدن tunnel بدون کنترل forward، شبکه دیتاسنتر را بیش از نیاز در اختیار کلاینت قرار میدهد. VPN باید احراز هویت، مسیر برگشت و مجوز سرویس را یکجا validate کند.
مثال عملی
پشتیبان فقط به SSH سرور 10.20.30.10 دسترسی دارد؛ pool مجزای 10.250.0.0/24، split tunnel و گواهی اختصاصی استفاده میشود.
پیشنیازها
RouterOS 7.17 یا جدیدتر با ساختار named server؛ OpenVPN Community 2.6 روی Linux/Windows. patch انتخابشده در staging تثبیت شود.
سختافزار و ظرفیت: روتر یا CHR آزمایشگاهی با پورتهای مجزا؛ ظرفیت CPU، RAM و connection tracking باید زیر بار واقعی اندازهگیری شود.
نرمافزار و دسترسی: Terminal از شبکه مدیریت، حساب دارای policy لازم برای write؛ Safe Mode با Ctrl+X، export خارج دستگاه و console مستقل پیش از تغییر. PKI سازمانی با CA، گواهی vpn.example.com دارای SAN و client اختصاصی؛ ساعت sync و TCP/1194. این runbook PKI موجود را استفاده میکند.
Architecture / Design
Client certificate + PPP user → TCP/1194 → ovpn server → pool → forward ACL → server. LAN باید route برگشت 10.250.0.0/24 به روتر داشته باشد؛ NAT جای route درست نیست.
Installation / Configuration
گواهیها را با نامهای ca.crt و server.p12 از PKI به Files بارگذاری کنید. private key از طریق فایل passwordدار وارد شود؛ CA private key روی edge نگهداری نمیشود.
/system clock print
/certificate import file-name=ca.crt passphrase=""
/certificate import file-name=server.p12 passphrase="REPLACE_WITH_P12_SECRET"
/certificate print detail
نام certificate واردشده را با CLI بررسی کنید و در دستور بعد REPLACE_SERVER_CERT را با نام واقعی جایگزین کنید. certificate باید private key و chain معتبر داشته باشد.
/ip pool add name=ent-ovpn-pool ranges=10.250.0.10-10.250.0.100
/ppp profile add name=ent-ovpn local-address=10.250.0.1 remote-address=ent-ovpn-pool
/ppp secret add name=opsvpn service=ovpn password="REPLACE_WITH_UNIQUE_USER_SECRET" profile=ent-ovpn
/interface ovpn-server server add name=ent-ovpn-server disabled=no protocol=tcp port=1194 mode=ip certificate=REPLACE_SERVER_CERT require-client-certificate=yes auth=sha256 cipher=aes256-cbc tls-version=only-1.2 default-profile=ent-ovpn
/ip firewall filter add chain=input in-interface-list=WAN protocol=tcp dst-port=1194 action=accept comment="ENT-OVPN listener"
/ip firewall filter add chain=forward src-address=10.250.0.0/24 dst-address=10.20.30.10 protocol=tcp dst-port=22 action=accept comment="ENT-OVPN SSH grant"
/ip firewall filter add chain=forward src-address=10.250.0.0/24 action=drop comment="ENT-OVPN deny other"
ruleها قبل از drop نهایی و پیش از accept عمومی LAN قرار گیرند؛ established/related موجود برای پاسخ باید درست باشد. نمونه روی firewall آماده اجرا میشود، نه روتر خالی بدون default deny.
فایل client.ovpn کامل زیر کنار ca.crt، client.crt و client.key قرار گیرد. vpn.example.com placeholder است؛ گواهی باید همین نام واقعی را پوشش دهد. کلید client passphraseدار باشد.
client
dev tun
proto tcp-client
remote vpn.example.com 1194
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
auth-user-pass
remote-cert-tls server
verify-x509-name vpn.example.com name
tls-version-min 1.2
auth SHA256
cipher AES-256-CBC
data-ciphers AES-256-CBC
route 10.20.30.10 255.255.255.255
verb 3
اجرای sudo openvpn --config client.ovpn روی Linux باید Initialization Sequence Completed نشان دهد. login و key password بهصورت تعاملی وارد شوند؛ در فایل ذخیره نشوند. SSH مجاز و دسترسی به مقصد غیرمجاز هر دو تست شوند.
Security Hardening
compression خاموش باشد. client مشترک استفاده نشود؛ certificate و PPP credential هر دو در offboarding لغو شوند. require-client-certificate هویت فرد را به username بهتنهایی bind نمیکند؛ نگاشت credential و certificate را در policy و آزمون منفی بررسی کنید. MFA نیازمند طرح سازگار RADIUS/identity است و در این نمونه پیادهسازی نشده است.
Monitoring
PPP active، pool utilization، certificate expiry، failed auth و log tunnel پایش شوند. Alert قطع اتصال کاربر عادی با قطع کل سرویس متفاوت باشد؛ certificate زیر ۳۰ روز هشدار نمونه است.
Troubleshooting
TLS verify failed: زمان، CA، SAN و key usage. AUTH_FAILED: PPP service، password یا policy. tunnel بالا ولی SSH timeout: route برگشت و forward counter. cipher mismatch: دقیقاً CBC/SHA256 این baseline را در هر دو طرف تطبیق دهید؛ GCM را بدون طراحی سازگار اضافه نکنید.
Backup / Recovery
export بدون secrets، backup رمزنگاریشده و نسخه PKI در vault نگهداری شوند. گواهی client قابل revoke باشد و روش اعمال CRL روی patch هدف تست شود. در rollback named server و ruleهای ENT-OVPN را disable و routeهای اختصاصی کلاینت را حذف کنید؛ restore کل روتر برای یک rule لازم نیست.
Best Practices
اول route، سپس auth، سپس ACL مثبت و منفی را تأیید کنید. هر client یک گواهی و حساب دارد؛ cipher انتخابی compatibility baseline است و ارزیابی cryptographic policy سازمان لازم است.
نسخههای قدیمی و Compatibility
قبل از 7.17 ساختار server singleton متفاوت است. UDP و cipherهای قابل پشتیبانی به نسخه وابستهاند؛ مثال قدیمی SHA1 همراه AES-GCM ناسازگار بود. gateway برابر IP خود روتر نباید default route باشد.
پرسشهای متداول
چرا tunnel برقرار است ولی سرور باز نمیشود؟
مسیر برگشت و forward ACL مستقل از authentication هستند و باید بررسی شوند.
آیا تنظیم v7 روی همه patchها یکسان است؟
خیر؛ از 7.17 ساختار named server تغییر کرده و باید patch هدف تثبیت شود.
منابع رسمی
تاریخ بررسی منابع: 2026-09-30. اعتبارسنجی عملی روی محیط هدف باید پیش از انتشار تغییر زیرساخت انجام شود.