آموزش راهاندازی سرور VPN با پروتکل IKEv2 با استفاده از StrongSwan در اوبونتو 24.04

مقدمه
یک شبکه خصوصی مجازی (VPN) به شما اجازه میدهد تا ترافیک اینترنت خود را هنگام عبور از شبکههای ناامن (مانند شبکههای کافیشاپ، فرودگاه یا کنفرانسها) به صورت امن رمزنگاری کنید.
پروتکل تبادل کلید اینترنت نسخه ۲ (IKEv2) یک پروتکل است که امکان تونلزنی مستقیم IPSec بین سرور و کلاینت را فراهم میکند. در پیادهسازیهای VPN با IKEv2، پروتکل IPSec وظیفه رمزنگاری ترافیک شبکه را بر عهده دارد. پروتکل IKEv2 به صورت پیشفرض روی برخی پلتفرمها (مانند OS X 10.11 به بالا، iOS 9.1 به بالا و ویندوز 10) پشتیبانی میشود و نیازی به نصب نرمافزار اضافی ندارد. همچنین این پروتکل در برابر قطعیهای موقت کلاینت مقاومت بالایی دارد.
در این آموزش، شما یک سرور VPN با پروتکل IKEv2 را با استفاده از نرمافزار StrongSwan روی یک سرور اوبونتو 24.04 راهاندازی خواهید کرد. سپس نحوه اتصال به آن از طریق کلاینتهای ویندوز، مکاواس (macOS)، اوبونتو، iOS و اندروید را یاد میگیرید.
(نکته: از آنجایی که نسخههای قدیمیتر اوبونتو مانند 20.04 به پایان عمر خود رسیدهاند، در این مقاله مراحل را برای اوبونتو 24.04 بهروزرسانی کردهایم.)
پیشنیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
- یک سرور اوبونتو 24.04 که طبق راهنمای راهاندازی اولیه سرور در پارمین کلود (Parmin Cloud) پیکربندی شده باشد، شامل یک کاربر غیر روت (non-root) با دسترسی sudo و فایروال.
مرحله ۱ — نصب StrongSwan
ابتدا StrongSwan را نصب میکنیم. StrongSwan یک دیمون (Daemon) متنباز IPSec است که ما آن را به عنوان سرور VPN خود پیکربندی خواهیم کرد. ما همچنین کامپوننت زیرساخت کلید عمومی (PKI) را نصب میکنیم تا بتوانیم یک مرجع صدور گواهی (Certificate Authority یا CA) برای زیرساخت خود ایجاد کنیم.
ابتدا کش پکیج محلی را بهروزرسانی کنید:
sudo apt update
سپس نرمافزارها را نصب کنید:
sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins
پکیج libcharon-extauth-plugins اطمینان حاصل میکند که کلاینتهای مختلف بتوانند با استفاده از نام کاربری و رمز عبور مشترک با سرور احراز هویت کنند. پکیج libstrongswan-extra-plugins نیز برای پشتیبانی StrongSwan از مجموعههای رمزنگاری منحنی بیضوی (Elliptic Curve) که از крипتوگرافی Curve25519 استفاده میکنند، شامل شده است.
مرحله ۲ — ایجاد مرجع صدور گواهی (CA)
یک سرور IKEv2 برای معرفی خود به کلاینتها به یک گواهی (Certificate) نیاز دارد. برای کمک به ایجاد گواهی مورد نیاز، پکیج strongswan-pki شامل ابزاری به نام pki است که برای تولید CA و گواهیهای سرور استفاده میشود.
ابتدا چند دایرکتوری برای ذخیره تمام فایلهایی که روی آنها کار میکنیم ایجاد کنید. ساختار دایرکتوری با برخی از دایرکتوریهای موجود در /etc/ipsec.d مطابقت دارد، جایی که در نهایت تمام موارد ایجاد شده را به آنجا منتقل خواهیم کرد:
mkdir -p ~/pki/{cacerts,certs,private}
سپس مجوزها را قفل کنید تا فایلهای خصوصی شما توسط کاربران دیگر دیده نشوند:
chmod 700 ~/pki
اکنون که ساختار دایرکتوری را داریم، میتوانیم یک کلید ریشه (Root Key) تولید کنیم. این یک کلید RSA 4096 بیتی خواهد بود که برای امضای گواهی ریشه CA ما استفاده میشود:
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
سپس، با استفاده از کلیدی که به تازگی تولید کردیم، گواهی ریشه CA را ایجاد و امضا میکنیم:
pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
--type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem
فلگ --lifetime 3650 تضمین میکند که گواهی ریشه CA برای ۱۰ سال معتبر خواهد بود.
مرحله ۳ — تولید گواهی برای سرور VPN
اکنون یک گواهی و کلید برای سرور VPN ایجاد میکنیم. این گواهی به کلاینت اجازه میدهد تا با استفاده از گواهی CA که به تازگی تولید کردیم، اصالت سرور را تایید کند.
ابتدا یک کلید خصوصی برای سرور VPN ایجاد کنید:
pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
سپس، گواهی سرور VPN را با کلید CA ایجاد و امضا کنید. در دستور زیر، فیلد Common Name (CN) و Subject Alternate Name (SAN) را با نام دامنه یا آدرس IP سرور VPN خود جایگزین کنید:
pki --pub --in ~/pki/private/server-key.pem --type rsa \
| pki --issue --lifetime 1825 \
--cacert ~/pki/cacerts/ca-cert.pem \
--cakey ~/pki/private/ca-key.pem \
--dn "CN=server_domain_or_IP" --san server_domain_or_IP \
--flag serverAuth --flag ikeIntermediate --outform pem \
> ~/pki/certs/server-cert.pem
نکته: اگر از آدرس IP به جای نام دامنه استفاده میکنید، باید چندین ورودی --san را مشخص کنید. خط مربوط به نام متمایزکننده (--dn) باید با ورودیهای اضافی مانند زیر اصلاح شود:--dn "CN=IP address" --san @IP_address --san IP_address \
دلیل این ورودی --san @IP_address اضافی این است که برخی کلاینتها هنگام بررسی هویت سرور، بررسی میکنند که آیا گواهی TLS هم دارای ورودی DNS و هم ورودی آدرس IP است یا خیر.
اکنون که تمام فایلهای TLS/SSL مورد نیاز StrongSwan را تولید کردیم، آنها را به دایرکتوری /etc/ipsec.d/ منتقل کنید:
sudo cp -r ~/pki/* /etc/ipsec.d/
مرحله ۴ — پیکربندی StrongSwan
StrongSwan یک فایل پیکربندی پیشفرض با چند نمونه دارد، اما ما باید بیشتر تنظیمات را خودمان انجام دهیم. ابتدا فایل پیشفرض را برای مرجع پشتیبانگیری کنید:
sudo mv /etc/ipsec.conf{,.original}
یک فایل پیکربندی جدید و خالی ایجاد و باز کنید (در اینجا از nano استفاده میکنیم):
sudo nano /etc/ipsec.conf
نکته: هنگام کار با VPN های IPSec، قراردادها سمت چپ (left) به سیستم محلی (سرور) و سمت راست (right) به کلاینتهای ریموت (موبایل و کامپیوترها) اشاره دارد.
ابتدا به StrongSwan میگوییم که وضعیت دیمون را برای دیباگ لاگ کند و اتصالات تکراری را مجاز کند:
/etc/ipsec.conf
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
سپس یک بخش پیکربندی برای VPN خود ایجاد میکنیم و به StrongSwan میگوییم که تونلهای IKEv2 ایجاد کند:
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
تنظیمات تشخیص قطعی همتا (Dead-peer detection) را برای پاکسازی اتصالات معلق اضافه کنید:
dpdaction=clear
dpddelay=300s
rekey=no
اکنون پارامترهای IPSec سمت «چپ» (سرور) را پیکربندی میکنیم:
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
(نکته: هنگام پیکربندی leftid، اگر از دامنه استفاده میکنید علامت @ را قرار دهید (مثلاً @vpn.example.com). اگر از IP استفاده میکنید، علامت @ را حذف کنید و فقط IP را بنویسید).
سپس پارامترهای سمت «راست» (کلاینت) را پیکربندی میکنیم:
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
در نهایت، تنظیمات مربوط به درخواست اعتبار از کلاینت و الگوریتمهای رمزنگاری (Cipher Suites) را اضافه کنید:
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
فایل نهایی باید به شکل زیر باشد. پس از تایید صحت خطوط، فایل را ذخیره کرده و ببندید:
/etc/ipsec.conf
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@server_domain_or_IP
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!
مرحله ۵ — پیکربندی احراز هویت VPN
سرور VPN ما اکنون برای پذیرش اتصالات کلاینت پیکربندی شده است، اما هنوز هیچ اعتبارنامهای (Credentials) تعریف نکردهایم. باید یک فایل به نام ipsec.secrets را پیکربندی کنیم:
فایل را باز کنید:
sudo nano /etc/ipsec.secrets
ابتدا به StrongSwan میگوییم کلید خصوصی سرور کجاست:
: RSA "server-key.pem"
سپس، اعتبارنامههای کاربر را تعریف کنید (نام کاربری و رمز عبور دلخواه خود را وارد کنید):
your_username : EAP "your_password"
فایل را ذخیره کرده و ببندید. سپس سرویس VPN را ریاستارت کنید تا تنظیمات اعمال شوند:
sudo systemctl restart strongswan-starter
مرحله ۶ — پیکربندی فایروال و IP Forwarding
با تکمیل پیکربندی StrongSwan، باید فایروال را تنظیم کنیم تا ترافیک VPN را عبور داده و فوروارد کند.
اگر راهنمای راهاندازی اولیه را دنبال کرده باشید، فایروال UFW شما فعال است. ابتدا ترافیک SSH را مجاز کنید:
sudo ufw allow OpenSSH
سپس قوانینی برای باز کردن پورتهای استاندارد IPSec (500 و 4500 UDP) اضافه کنید:
sudo ufw allow 500,4500/udp
اکنون باید رابط شبکه عمومی (Public Interface) سرور خود را پیدا کنید:
ip route show default
رابط عمومی شما در خروجی بعد از کلمه dev قرار دارد (مثلاً eth0).
سپس فایل /etc/ufw/before.rules را باز کنید تا قوانین مسیریابی سطح پایین (NAT) را اضافه کنید:
sudo nano /etc/ufw/before.rules
نزدیک به بالای فایل (قبل از خط *filter)، بلوک زیر را اضافه کنید. دقت کنید که eth0 را با نام رابط شبکه خود جایگزین کنید:
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
سپس، پس از تعاریف *filter و زنجیرهها، بلوک زیر را برای عبور ترافیک ESP اضافه کنید:
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
فایل را ذخیره و ببندید.
اکنون پارامترهای کرنل شبکه را برای فعال کردن فورواردینگ (IP Forwarding) ویرایش کنید. فایل /etc/ufw/sysctl.conf را باز کنید:
sudo nano /etc/ufw/sysctl.conf
خطوط زیر را به انتهای فایل اضافه کنید:
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
فایل را ذخیره کنید. سپس فایروال را غیرفعال و مجدداً فعال کنید تا این تنظیمات اعمال شوند:
sudo ufw disable
sudo ufw enable
مرحله ۷ — تست اتصال به VPN
برای اتصال، ابتدا باید گواهی CA که ساختهاید را روی دستگاه کلاینت خود نصب کنید. محتویات فایل گواهی را مشاهده کنید:
cat /etc/ipsec.d/cacerts/ca-cert.pem
خروجی را (شامل خطوط -----BEGIN CERTIFICATE----- و -----END CERTIFICATE-----) در یک فایل با نام ca-cert.pem روی کامپیوتر خود ذخیره کنید.
اتصال از ویندوز:
- کلیدهای
WINDOWS+Rرا فشار دهید،mmc.exeرا تایپ کنید و کنسول مدیریت را باز کنید. - از منوی File به
Add or Remove Snap-inبروید،Certificatesرا انتخاب کرده و Add را بزنید. Computer Accountرا انتخاب کرده وLocal Computerرا تایید کنید.- در بخش
Trusted Root Certification Authorities، گواهیca-cert.pemرا Import کنید. - به
Network and Sharing Centerبروید،Set up a new connection or networkرا زده وConnect to a workplaceرا انتخاب کنید. - آدرس IP یا دامنه سرور را وارد کرده و متصل شوید. نام کاربری و رمز عبوری که در مرحله ۵ ساختید را وارد کنید.
اتصال از مکاواس (macOS):
- روی فایل گواهی دابلکلیک کنید تا در
Keychain Accessباز شود. - روی گواهی وارد شده دابلکلیک کرده و بخش
IP Security (IPSec)را رویAlways Trustتنظیم کنید. - به
System Preferences > Networkبروید و با کلیک روی علامت+یک اتصال VPN از نوعIKEv2بسازید. - آدرس سرور و نام کاربری/رمز عبور خود را وارد و متصل شوید.
اتصال از اوبونتو:
StrongSwan را روی کلاینت نصب کنید:
sudo apt update
sudo apt install strongswan libcharon-extra-plugins
گواهی CA را کپی کنید:
sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts
فایل /etc/ipsec.secrets را ویرایش کرده و نام کاربری و رمز عبور خود را وارد کنید:
your_username : EAP "your_password"
فایل /etc/ipsec.conf را ویرایش کنید:
config setup
conn ikev2-rw
right=server_domain_or_IP
rightid=server_domain_or_IP
rightsubnet=0.0.0.0/0
rightauth=pubkey
leftsourceip=%config
leftid=username
leftauth=eap-mschapv2
eap_identity=%identity
auto=start
برای اتصال دستور sudo systemctl start strongswan-starter را اجرا کنید.
اتصال از iOS و اندروید:
فایل گواهی را برای خود ایمیل کنید، روی آن ضربه زده و نصب کنید. سپس در تنظیمات VPN دستگاه خود، یک اتصال از نوع IKEv2 ایجاد کرده و آدرس سرور به همراه نام کاربری و رمز عبور را وارد کنید. در اندروید میتوانید از اپلیکیشن StrongSwan استفاده کنید.
رفع مشکلات اتصال
اگر قادر به اتصال به VPN نیستید، نام سرور یا آدرس IP استفاده شده را بررسی کنید. آدرس سرور باید با Common Name (CN) که هنگام ایجاد گواهی تنظیم کردید مطابقت داشته باشد. اگر از IP استفاده میکنید، مطمئن شوید هنگام ساخت گواهی از هر دو فلگ --san @IP_address و --san IP_address استفاده کردهاید.
همچنین بررسی کنید که مقدار leftid در فایل /etc/ipsec.conf اگر از دامنه استفاده میکنید دارای علامت @ باشد و اگر از IP استفاده میکنید بدون @ باشد.
نتیجهگیری
در این آموزش، شما یک سرور VPN با استفاده از پروتکل IKEv2 و نرمافزار StrongSwan ساختید. اکنون میتوانید مطمئن باشید که فعالیتهای آنلاین شما، فارغ از اینکه کجا هستید و با چه دستگاهی به اینترنت متصل میشوید، امن و رمزنگاری شده باقی خواهد ماند.
از همراهی شما با پارمین کلود سپاسگزاریم.




