سرور OpenVPN ابزاری است که برای محافظت از سرور لینوکس دبیان 10 در برابر فعالیت‌های خرابکارانه  به کار شما می‌آید. در این مطلب قصد داریم که شما را با نحوه تنظیم OpenVPN  در دبیان 10 آشنا کنیم. به این وسیله می‌توانید امنیت سرورهای خود را در شبکه‌های عمومی وای‌فای افزایش دهید.

OpenVPN یک شبکه مجازی اختصاصی یا SSL VPN کامل است. این شبکه با استفاده از پروتکل SSL/TLS دو یا سه لایه امنیتی ایجاد می‌کند. در همین حال، یک نرم‌افزار متن‌باز محسوب می‌شود و تحت مجوز GNU GPL منتشر شده است. یک VPN امکانی را برای شما فراهم می‌آورد که به یک شبکه غیرایمن مانند شبکه وای‌فای در هتل یا فرودگاه، یک اتصال امن داشته باشید. همچنین VPN برای دسترسی به منابع سرور خانگی یا شرکتی موردنیاز خواهد بود. شما می‌توانید با این ابزار فیلترهایی را که بر اساس منطقه جغرافیایی عمل می‌کنند، دور بزنید و ایمنی و محرمانگی ارتباطات آنلاین خود را افزایش دهید. این مطلب آموزش برای شما راهنمایی قدم به قدم برای تنظیم یک سرور OpenVPN در سرور دبیان لینوکس 10 خواهد بود.

دستورالعمل تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه

مراحل کار به شرح زیر هستند:

گام ۱) سیستم خود را بروزرسانی کنید.

برای این منظور، فرمان apt را به صورت زیر اجرا نمایید:


{vivek@deb10:~ }$ sudo apt update

{vivek@deb10:~ }$ sudo apt upgrade

گام ۲) آدرس IP خود را پیدا کرده و یادداشت کنید.

برای این منظور، از فرمان ip به صورت زیر استفاده کنید:


{vivek@deb10:~ }$ ip a

{vivek@deb10:~ }$ ip a show eth0

کاربرد فرمان ip برای دریافت آدرس IP در لینوکس دبیان 10

کاربرد فرمان ip برای دریافت آدرس IP در لینوکس دبیان 10

 

گزینه دیگر، اجرای فرمان dig یا host برای پیدا کردن آدرس IP عمومی از طریق خط فرمان لینوکس است:


{vivek@deb10:~ }$ dig +short myip.opendns.com @resolver1.opendns.com

و یا:


{vivek@deb10:~ }$ 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 استفاده کنیم:


{vivek@deb10:~ }$ wget https://raw.githubusercontent.com/Angristan/openvpn-install/master/openvpn-install.sh -O debian10-vpn.sh

 

دریافت اسکریپت debian10-vpn.sh برای تنظیم OpenVPN در عرض پنج دقیقه در دبیان 10

دریافت اسکریپت debian10-vpn.sh برای تنظیم OpenVPN در عرض پنج دقیقه در دبیان 10

مجوزهای نصب با استفاده از فرمان chmod


{vivek@deb10:~ }$ chmod +x debian10-vpn.sh

در همین حال، امکان رؤیت اسکریپت با استفاده از یک ویرایشگر متنی مانند vim/vi وجود خواهد داشت:


{vivek@deb10:~ }$ vi debian10-vpn.sh

اجرای debian10-vpn.sh به منظور نصب سرور OpenVPN

حالا فقط این کار را باید انجام دهید:


{vivek@deb10:~ }$ sudo ./debian10-vpn.sh

نمونه عملکرد ابزار AWS EC2/Lightsail هنگامی که سرور ابری به صورت behind NAT است:

تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه

تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه

 

نمونه عملکرد سرور Linode/DO وقتی که سرور ابری دارای آدرس  IPv4 مستقیم عمومی است:

 بخش اول ورودی اسکریپت

بخش اول ورودی اسکریپت

برای جلوگیری از بروز مشکل، همیشه DNS را به صورت 1.1.1.1 یا Google DNS انتخاب کنید؛ چرا که اینها سرورهای DNS بسیار سریعی هستند و از هر جای اینترنت قابل‌دسترسی‌اند. تا اینجا، تمام اسکریپت‌های موردنیاز را دریافت کرده‌ایم. حالا برای تنظیم سرور OpenVPN آماده خواهیم بود. شما می‌توانید در پایان نصب، به صورت زیر یک کلاینت تولید کنید:

بخش دوم ورودی اسکریپت

بخش دوم ورودی اسکریپت

 

نحوه راه‌اندازی، توقف و راه‌اندازی دوباره سرور OpenVPN در دبیان 10


{vivek@deb10:~ }$ sudo systemctl stop openvpn@server # <--- توقف سرور

{vivek@deb10:~ }$ sudo systemctl start openvpn@server # <--- راه‌اندازی سرور

{vivek@deb10:~ }$ sudo systemctl restart openvpn@server # <--- راه‌اندازی دوباره سرور

{vivek@deb10:~ }$ sudo systemctl status openvpn@server # <--- دریافت وضعیت سرور

systemctl status openvpn@server

systemctl status openvpn@server

 

گام ۴) وصل‌کردن یک سرور OpenVPN با استفاده کلاینت iOS، اندروید، لینوکس یا ویندوز

بر روی سرور می‌توانید فایلی با نام ~/linuxDesktop.ovpn پیدا کنید. تنها کاری که باید انجام دهید این است که این فایل را با استفاده از فرمان scp به روی دسکتاپ محلی‌تان کپی کنید:


{vivek@deb10:~ }$ scp vivek@:~/linuxDesktop.ovpn .

و یا:


{vivek@deb10:~ }$ scp root@:~/linuxDesktop.ovpn .

سپس این فایل را در اختیار کلاینت OpenVPN قرار دهید تا برای اتصال استفاده کند:

 

Apple iOS client

Android client

Apple MacOS (OS X) client

Windows 8/10 client

 

تنظیمات کلاینت OpenVPN در لینوکس دسکتاپ

ابتدا باید کلاینت openvpn را برای دسکتاپ خود نصب کنید؛ برای این منظور، فرمان زیر را وارد نمایید:


{vivek@deb10:~ }$ sudo yum install openvpn

و یا از فرمان زیر استفاده کنید:


{vivek@deb10:~ }$ sudo apt install openvpn

سپس فایل linuxDesktop.ovpn را به صورت زیر کپی کنید:


{vivek@deb10:~ }$ sudo cp linuxDesktop.ovpn /etc/openvpn/client/

 


'linuxDesktop.ovpn' -> '/etc/openvpn/client/linuxDesktop.ovpn'

حالا می‌توانید اتصال را از طریق CLI بررسی کنید:


{vivek@deb10:~ }$ 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 به صورت اتوماتیک متصل خواهد شد:


{vivek@deb10:~ }$ sudo systemctl start openvpn@client # <--- start client service

گام ۵) تأیید و آزمایش برقراری ارتباط

پس از اتصال به سرور OpenVPN از طریق دسکتاپ لینوکس، فرمان‌های زیر را اجرا نمایید:


{vivek@deb10:~ }$ ping 10.8.0.1 #Ping to the OpenVPN server gateway

{vivek@deb10:~ }$ ip route #Make sure routing setup working

{vivek@deb10:~ }$ 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 می‌توانید از فرمان زیر استفاده کنید:


{vivek@deb10:~ }$ journalctl --identifier ovpn-server

فایل تاریخچه و خطاهای سرور OpenVPN

فایل تاریخچه و خطاهای سرور OpenVPN

آیا تنظیمات فایروال به‌درستی بر روی سرور شما انجام شده‌اند؟ برای پاسخ به این موضوع و تأیید تنظیمات NAT سرور از فرمان‌های iptables و sysctl کمک بگیرید:


{vivek@deb10:~ }$ sudo iptables -t nat -L -n -v

{vivek@deb10:~ }$ sysctl net.ipv4.ip_forward

تأیید تنظیمات فایروال OpenVPN

تأیید تنظیمات فایروال OpenVPN

 

در صورتی که قوانین از /etc/rc.local وارد نشده‌ بودند، فرمان زیر را اجرا نمایید:


{vivek@deb10:~ }$ sudo sh /etc/rc.local

{vivek@deb10:~ }$ sudo sysctl -w net.ipv4.ip_forward=1

آیا سرور OpenVPN در حال اجراست و پورت باز است؟ برای فهم این موضع می‌توانید از فرمان ss یا netstat و فرمان‌های pidof و ps استفاده کنید:


{vivek@deb10:~ }$ netstat -tulpn | grep :1194 ## 1194 is the openvpn server port ##

{vivek@deb10:~ }$ ss -tulpn | grep :1194 ## 1194 is the openvpn server port ##

{vivek@deb10:~ }$ ps aux | grep openvpn ## is the openvpn server running? ##

{vivek@deb10:~ }$ ps -C openvpn ## is the openvpn server running? ##

{vivek@deb10:~ }$ pidof openvpn ## find the openvpn server PID ##

بررسی اجرای سرور OpenVPN و باز بودن پورت در لینوکس دبیان

بررسی اجرای سرور OpenVPN و باز بودن پورت در لینوکس دبیان

 

 

در صورتی که سرور OpenVPN در حال اجرا نبود، آن را دوباره راه‌اندازی کنید:


{vivek@deb10:~ }$ sudo systemctl restart openvpn@server

جستجوی خطاهای احتمالی:


{vivek@deb10:~ }$ sudo systemctl status openvpn@server

آیا کلاینت لینوکس دسکتاپ می‌تواند به سیستم سرور OpenVPN متصل شود؟ برای این منظور ابتدا باید یک تست ساده انجام دهید تا مطمئن شوید که پورت سرور OpenVPN یا UDP 1194 اتصال را قبول می‌کند یا خیر:


{vivek@deb10:~ }$ nc -vu 1194

Connection to 1194 port [udp/openvpn] succeeded!

اگر چنین اتصالی برقرار نشد، به معنای آن است که فایروال لینوکس دسکتاپ یا روتر، یکی از آنها دسترسی به سرور را محدود می‌کنند. در نتیجه، مطمئن شوید که هم سرور و هم کلاینت دارای پروتکل و پورت یکسانی هستند.

جمع‌بندی

تبریک می‌گوییم! شما موفق شدید که یک سرور OpenVPN را بر روی دبیان لینوکس 10 در فضای ابری راه‌اندازی کنید. در همین حال، می‌توانید برای کسب اطلاعات بیشتر  به وب‌سایت OpenVPN و صفحه اسکریپت آن مراجعه نمایید.