سرور OpenVPN ابزاری است که برای محافظت از سرور لینوکس دبیان 10 در برابر فعالیتهای خرابکارانه به کار شما میآید. در این مطلب قصد داریم که شما را با نحوه تنظیم OpenVPN در دبیان 10 آشنا کنیم. به این وسیله میتوانید امنیت سرورهای خود را در شبکههای عمومی وایفای افزایش دهید.
OpenVPN یک شبکه مجازی اختصاصی یا SSL VPN کامل است. این شبکه با استفاده از پروتکل SSL/TLS دو یا سه لایه امنیتی ایجاد میکند. در همین حال، یک نرمافزار متنباز محسوب میشود و تحت مجوز GNU GPL منتشر شده است. یک VPN امکانی را برای شما فراهم میآورد که به یک شبکه غیرایمن مانند شبکه وایفای در هتل یا فرودگاه، یک اتصال امن داشته باشید. همچنین VPN برای دسترسی به منابع سرور خانگی یا شرکتی موردنیاز خواهد بود. شما میتوانید با این ابزار فیلترهایی را که بر اساس منطقه جغرافیایی عمل میکنند، دور بزنید و ایمنی و محرمانگی ارتباطات آنلاین خود را افزایش دهید. این مطلب آموزش برای شما راهنمایی قدم به قدم برای تنظیم یک سرور OpenVPN در سرور دبیان لینوکس 10 خواهد بود.
دستورالعمل تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه
مراحل کار به شرح زیر هستند:
گام ۱) سیستم خود را بروزرسانی کنید.
برای این منظور، فرمان apt را به صورت زیر اجرا نمایید:
{[email protected]:~ }$ sudo apt update {[email protected]:~ }$ sudo apt upgrade
گام ۲) آدرس IP خود را پیدا کرده و یادداشت کنید.
برای این منظور، از فرمان ip به صورت زیر استفاده کنید:
{[email protected]:~ }$ ip a {[email protected]:~ }$ ip a show eth0
کاربرد فرمان ip برای دریافت آدرس IP در لینوکس دبیان 10
گزینه دیگر، اجرای فرمان dig یا host برای پیدا کردن آدرس IP عمومی از طریق خط فرمان لینوکس است:
{[email protected]:~ }$ dig +short myip.opendns.com @resolver1.opendns.com
و یا:
{[email protected]:~ }$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}'
درباره آدرس IP
بسیاری از سرورهای ابری دارای دو نوع آدرس IP هستند:
۱) آدرس IP استاتیک عمومی که مستقیماً به سیستم و باکس شما مرتبط است و ریشه در اینترنت دارد. به عنوان نمونه، درنظر بگیرید که Linode، Digital Ocean و دیگر ابزارهای اینترنتی به شما مستقیماً آدرسهای IP عمومی را نتیجه میدهند.
۲) آدرس IP استاتیک اختصاصی که مستقیماً به سرور شما مرتبط است و سرور شما از طریق در پسزمینه آدرس IP عمومی قرار میگیرد. به عنوان مثال، ابزار AWS EC2/Lightsail به نوعی آدرس IP عمومی NAT در اختیار شما قرار میدهد.
این کدها به صورت اتوماتیک تنظیمات شبکه شما را تشخیص میدهند. تنها کاری که میبایست انجام دهید این است که در مواقع لازم، آدرس IP درست را وارد کنید.
گام ۳) دریافت و اجرای اسکریپت debian10-vpn.sh
در اینجا میخواهیم از فرمان wget استفاده کنیم:
{[email protected]:~ }$ wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh -O debian10-vpn.sh
دریافت اسکریپت debian10-vpn.sh برای تنظیم OpenVPN در عرض پنج دقیقه در دبیان 10
مجوزهای نصب با استفاده از فرمان chmod
{[email protected]:~ }$ chmod +x debian10-vpn.sh
در همین حال، امکان رؤیت اسکریپت با استفاده از یک ویرایشگر متنی مانند vim/vi وجود خواهد داشت:
{[email protected]:~ }$ vi debian10-vpn.sh
اجرای debian10-vpn.sh به منظور نصب سرور OpenVPN
حالا فقط این کار را باید انجام دهید:
{[email protected]:~ }$ sudo ./debian10-vpn.sh
نمونه عملکرد ابزار AWS EC2/Lightsail هنگامی که سرور ابری به صورت behind NAT است:
تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه
نمونه عملکرد سرور Linode/DO وقتی که سرور ابری دارای آدرس IPv4 مستقیم عمومی است:
بخش اول ورودی اسکریپت
برای جلوگیری از بروز مشکل، همیشه DNS را به صورت 1.1.1.1 یا Google DNS انتخاب کنید؛ چرا که اینها سرورهای DNS بسیار سریعی هستند و از هر جای اینترنت قابلدسترسیاند. تا اینجا، تمام اسکریپتهای موردنیاز را دریافت کردهایم. حالا برای تنظیم سرور OpenVPN آماده خواهیم بود. شما میتوانید در پایان نصب، به صورت زیر یک کلاینت تولید کنید:
بخش دوم ورودی اسکریپت
نحوه راهاندازی، توقف و راهاندازی دوباره سرور OpenVPN در دبیان 10
{[email protected]:~ }$ sudo systemctl stop [email protected] # <--- توقف سرور {[email protected]:~ }$ sudo systemctl start [email protected] # <--- راهاندازی سرور {[email protected]:~ }$ sudo systemctl restart [email protected] # <--- راهاندازی دوباره سرور {[email protected]:~ }$ sudo systemctl status [email protected] # <--- دریافت وضعیت سرور
systemctl status [email protected]
گام ۴) وصلکردن یک سرور OpenVPN با استفاده کلاینت iOS، اندروید، لینوکس یا ویندوز
بر روی سرور میتوانید فایلی با نام ~/linuxDesktop.ovpn پیدا کنید. تنها کاری که باید انجام دهید این است که این فایل را با استفاده از فرمان scp به روی دسکتاپ محلیتان کپی کنید:
{[email protected]:~ }$ scp [email protected]:~/linuxDesktop.ovpn .
و یا:
{[email protected]:~ }$ scp [email protected]:~/linuxDesktop.ovpn .
سپس این فایل را در اختیار کلاینت OpenVPN قرار دهید تا برای اتصال استفاده کند:
تنظیمات کلاینت OpenVPN در لینوکس دسکتاپ
ابتدا باید کلاینت openvpn را برای دسکتاپ خود نصب کنید؛ برای این منظور، فرمان زیر را وارد نمایید:
{[email protected]:~ }$ sudo yum install openvpn
و یا از فرمان زیر استفاده کنید:
{[email protected]:~ }$ sudo apt install openvpn
سپس فایل linuxDesktop.ovpn را به صورت زیر کپی کنید:
{[email protected]:~ }$ sudo cp linuxDesktop.ovpn /etc/openvpn/client/
'linuxDesktop.ovpn' -> '/etc/openvpn/client/linuxDesktop.ovpn'
حالا میتوانید اتصال را از طریق CLI بررسی کنید:
{[email protected]:~ }$ sudo openvpn --client --config /etc/openvpn/client/linuxDesktop.ovpn
نمونه خروجی:
Sat Jul 13 21:56:07 2019 Unrecognized option or missing or extra parameter(s) in /etc/openvpn/client/linuxDesktop.ovpn:17: block-outside-dns (2.4.7) Sat Jul 13 21:56:07 2019 OpenVPN 2.4.7 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019 Sat Jul 13 21:56:07 2019 library versions: OpenSSL 1.1.1c FIPS 28 May 2019, LZO 2.08 Sat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key Sat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication Sat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit key Sat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authentication Sat Jul 13 21:56:07 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]172.105.51.63:1194 Sat Jul 13 21:56:07 2019 Socket Buffers: R=[212992->212992] S=[212992->212992] Sat Jul 13 21:56:07 2019 UDP link local: (not bound) Sat Jul 13 21:56:07 2019 UDP link remote: [AF_INET]172.105.51.63:1194 Sat Jul 13 21:56:07 2019 TLS: Initial packet from [AF_INET]172.105.51.63:1194, sid=0efbc848 675b12c1 Sat Jul 13 21:56:07 2019 VERIFY OK: depth=1, CN=cn_46pSC1RkaXtUzj8E Sat Jul 13 21:56:07 2019 VERIFY KU OK Sat Jul 13 21:56:07 2019 Validating certificate extended key usage Sat Jul 13 21:56:07 2019 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication Sat Jul 13 21:56:07 2019 VERIFY EKU OK Sat Jul 13 21:56:07 2019 VERIFY X509NAME OK: CN=server_CfvC2CLjZBl46fYN Sat Jul 13 21:56:07 2019 VERIFY OK: depth=0, CN=server_CfvC2CLjZBl46fYN Sat Jul 13 21:56:07 2019 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 256 bit EC, curve: prime256v1 Sat Jul 13 21:56:07 2019 [server_CfvC2CLjZBl46fYN] Peer Connection Initiated with [AF_INET]172.105.51.63:1194 Sat Jul 13 21:56:08 2019 SENT CONTROL [server_CfvC2CLjZBl46fYN]: 'PUSH_REQUEST' (status=1) Sat Jul 13 21:56:08 2019 PUSH: Received control message: 'PUSH_REPLY,dhcp-option DNS 1.0.0.1,dhcp-option DNS 1.1.1.1,redirect-gateway def1 bypass-dhcp,route-gateway 10.8.0.1,topology subnet,ping 10,ping-restart 120,ifconfig 10.8.0.2 255.255.255.0,peer-id 0,cipher AES-128-GCM' Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: timers and/or timeouts modified Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ifconfig/up options modified Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: route options modified Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: route-related options modified Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: peer-id set Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: adjusting link_mtu to 1624 Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: data channel crypto options modified Sat Jul 13 21:56:08 2019 Outgoing Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit key Sat Jul 13 21:56:08 2019 Incoming Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit key Sat Jul 13 21:56:08 2019 ROUTE_GATEWAY 192.168.1.1/255.255.255.0 IFACE=wlp1s0 HWADDR=b4:6b:fc:32:7a:12 Sat Jul 13 21:56:08 2019 TUN/TAP device tun0 opened Sat Jul 13 21:56:08 2019 TUN/TAP TX queue length set to 100 Sat Jul 13 21:56:08 2019 /sbin/ip link set dev tun0 up mtu 1500 Sat Jul 13 21:56:08 2019 /sbin/ip addr add dev tun0 10.8.0.2/24 broadcast 10.8.0.255 Sat Jul 13 21:56:08 2019 /sbin/ip route add 172.105.51.63/32 via 192.168.1.1 Sat Jul 13 21:56:08 2019 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1 Sat Jul 13 21:56:08 2019 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1 Sat Jul 13 21:56:08 2019 Initialization Sequence Completed
سیستم لینوکس شما هنگام شروع به کار، با استفاده از اسکریپت openvpn به صورت اتوماتیک متصل خواهد شد:
{[email protected]:~ }$ sudo systemctl start [email protected] # <--- start client service
گام ۵) تأیید و آزمایش برقراری ارتباط
پس از اتصال به سرور OpenVPN از طریق دسکتاپ لینوکس، فرمانهای زیر را اجرا نمایید:
{[email protected]:~ }$ ping 10.8.0.1 #Ping to the OpenVPN server gateway {[email protected]:~ }$ ip route #Make sure routing setup working {[email protected]:~ }$ dig TXT +short o-o.myaddr.l.google.com @ns1.google.com #Must return public IP address of OpenVPN server
172.105.51.63
نکاتی در مورد عیبیابی سرور OpenVPN و مشکلات کلاینت
برای بررسی خطاهای سرور OpenVPN میتوانید از فرمان زیر استفاده کنید:
{[email protected]:~ }$ journalctl --identifier ovpn-server
فایل تاریخچه و خطاهای سرور OpenVPN
آیا تنظیمات فایروال بهدرستی بر روی سرور شما انجام شدهاند؟ برای پاسخ به این موضوع و تأیید تنظیمات NAT سرور از فرمانهای iptables و sysctl کمک بگیرید:
{[email protected]:~ }$ sudo iptables -t nat -L -n -v {[email protected]:~ }$ sysctl net.ipv4.ip_forward
تأیید تنظیمات فایروال OpenVPN
در صورتی که قوانین از /etc/rc.local وارد نشده بودند، فرمان زیر را اجرا نمایید:
{[email protected]:~ }$ sudo sh /etc/rc.local {[email protected]:~ }$ sudo sysctl -w net.ipv4.ip_forward=1
آیا سرور OpenVPN در حال اجراست و پورت باز است؟ برای فهم این موضع میتوانید از فرمان ss یا netstat و فرمانهای pidof و ps استفاده کنید:
{[email protected]:~ }$ netstat -tulpn | grep :1194 ## 1194 is the openvpn server port ## {[email protected]:~ }$ ss -tulpn | grep :1194 ## 1194 is the openvpn server port ## {[email protected]:~ }$ ps aux | grep openvpn ## is the openvpn server running? ## {[email protected]:~ }$ ps -C openvpn ## is the openvpn server running? ## {[email protected]:~ }$ pidof openvpn ## find the openvpn server PID ##
بررسی اجرای سرور OpenVPN و باز بودن پورت در لینوکس دبیان
در صورتی که سرور OpenVPN در حال اجرا نبود، آن را دوباره راهاندازی کنید:
{[email protected]:~ }$ sudo systemctl restart [email protected]
جستجوی خطاهای احتمالی:
{[email protected]:~ }$ sudo systemctl status [email protected]
آیا کلاینت لینوکس دسکتاپ میتواند به سیستم سرور OpenVPN متصل شود؟ برای این منظور ابتدا باید یک تست ساده انجام دهید تا مطمئن شوید که پورت سرور OpenVPN یا UDP 1194 اتصال را قبول میکند یا خیر:
{[email protected]:~ }$ nc -vu 1194 Connection to 1194 port [udp/openvpn] succeeded!
اگر چنین اتصالی برقرار نشد، به معنای آن است که فایروال لینوکس دسکتاپ یا روتر، یکی از آنها دسترسی به سرور را محدود میکنند. در نتیجه، مطمئن شوید که هم سرور و هم کلاینت دارای پروتکل و پورت یکسانی هستند.
جمعبندی
تبریک میگوییم! شما موفق شدید که یک سرور OpenVPN را بر روی دبیان لینوکس 10 در فضای ابری راهاندازی کنید. در همین حال، میتوانید برای کسب اطلاعات بیشتر به وبسایت OpenVPN و صفحه اسکریپت آن مراجعه نمایید.