بلاگ/تنظیم سرور OpenVPN در دبیان 10 در پنج دقیقه
به‌روز شده

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

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

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

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

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

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

برای این منظور، فرمان apt را به صورت زیر اجرا نمایید:
php
{vivek@deb10:~ }$ sudo apt update{vivek@deb10:~ }$ sudo apt upgrade

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

برای این منظور، از فرمان ip به صورت زیر استفاده کنید:
php
{vivek@deb10:~ }$ ip a{vivek@deb10:~ }$ ip a show eth0
کاربرد فرمان ip برای دریافت آدرس IP در لینوکس دبیان 10
کاربرد فرمان ip برای دریافت آدرس IP در لینوکس دبیان 10
  گزینه دیگر، اجرای فرمان dig یا host برای پیدا کردن آدرس IP عمومی از طریق خط فرمان لینوکس است:
php
{vivek@deb10:~ }$ dig +short myip.opendns.com @resolver1.opendns.com
و یا:
php
{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 استفاده کنیم:
php
{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
php
{vivek@deb10:~ }$ chmod +x debian10-vpn.sh
در همین حال، امکان رؤیت اسکریپت با استفاده از یک ویرایشگر متنی مانند vim/vi وجود خواهد داشت:
php
{vivek@deb10:~ }$ vi debian10-vpn.sh

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

حالا فقط این کار را باید انجام دهید:
php
{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

php
{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 به روی دسکتاپ محلی‌تان کپی کنید:
php
{vivek@deb10:~ }$ scp vivek@:~/linuxDesktop.ovpn .
و یا:
php
{vivek@deb10:~ }$ scp root@:~/linuxDesktop.ovpn .
سپس این فایل را در اختیار کلاینت OpenVPN قرار دهید تا برای اتصال استفاده کند:   Apple iOS clientAndroid clientApple MacOS (OS X) clientWindows 8/10 client  

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

ابتدا باید کلاینت openvpn را برای دسکتاپ خود نصب کنید؛ برای این منظور، فرمان زیر را وارد نمایید:
php
{vivek@deb10:~ }$ sudo yum install openvpn
و یا از فرمان زیر استفاده کنید:
php
{vivek@deb10:~ }$ sudo apt install openvpn
سپس فایل linuxDesktop.ovpn را به صورت زیر کپی کنید:
php
{vivek@deb10:~ }$ sudo cp linuxDesktop.ovpn /etc/openvpn/client/
 
php
'linuxDesktop.ovpn' -> '/etc/openvpn/client/linuxDesktop.ovpn'
حالا می‌توانید اتصال را از طریق CLI بررسی کنید:
php
{vivek@deb10:~ }$ sudo openvpn --client --config /etc/openvpn/client/linuxDesktop.ovpn
نمونه خروجی:
php
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 2019Sat Jul 13 21:56:07 2019 library versions: OpenSSL 1.1.1c FIPS  28 May 2019, LZO 2.08Sat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit keySat Jul 13 21:56:07 2019 Outgoing Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authenticationSat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Cipher 'AES-256-CTR' initialized with 256 bit keySat Jul 13 21:56:07 2019 Incoming Control Channel Encryption: Using 256 bit message hash 'SHA256' for HMAC authenticationSat Jul 13 21:56:07 2019 TCP/UDP: Preserving recently used remote address: [AF_INET]172.105.51.63:1194Sat 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:1194Sat Jul 13 21:56:07 2019 TLS: Initial packet from [AF_INET]172.105.51.63:1194, sid=0efbc848 675b12c1Sat Jul 13 21:56:07 2019 VERIFY OK: depth=1, CN=cn_46pSC1RkaXtUzj8ESat Jul 13 21:56:07 2019 VERIFY KU OKSat Jul 13 21:56:07 2019 Validating certificate extended key usageSat Jul 13 21:56:07 2019 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server AuthenticationSat Jul 13 21:56:07 2019 VERIFY EKU OKSat Jul 13 21:56:07 2019 VERIFY X509NAME OK: CN=server_CfvC2CLjZBl46fYNSat Jul 13 21:56:07 2019 VERIFY OK: depth=0, CN=server_CfvC2CLjZBl46fYNSat Jul 13 21:56:07 2019 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 256 bit EC, curve: prime256v1Sat Jul 13 21:56:07 2019 [server_CfvC2CLjZBl46fYN] Peer Connection Initiated with [AF_INET]172.105.51.63:1194Sat 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 modifiedSat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ifconfig/up options modifiedSat Jul 13 21:56:08 2019 OPTIONS IMPORT: route options modifiedSat Jul 13 21:56:08 2019 OPTIONS IMPORT: route-related options modifiedSat Jul 13 21:56:08 2019 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modifiedSat Jul 13 21:56:08 2019 OPTIONS IMPORT: peer-id setSat Jul 13 21:56:08 2019 OPTIONS IMPORT: adjusting link_mtu to 1624Sat Jul 13 21:56:08 2019 OPTIONS IMPORT: data channel crypto options modifiedSat Jul 13 21:56:08 2019 Outgoing Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit keySat Jul 13 21:56:08 2019 Incoming Data Channel: Cipher 'AES-128-GCM' initialized with 128 bit keySat Jul 13 21:56:08 2019 ROUTE_GATEWAY 192.168.1.1/255.255.255.0 IFACE=wlp1s0 HWADDR=b4:6b:fc:32:7a:12Sat Jul 13 21:56:08 2019 TUN/TAP device tun0 openedSat Jul 13 21:56:08 2019 TUN/TAP TX queue length set to 100Sat Jul 13 21:56:08 2019 /sbin/ip link set dev tun0 up mtu 1500Sat Jul 13 21:56:08 2019 /sbin/ip addr add dev tun0 10.8.0.2/24 broadcast 10.8.0.255Sat Jul 13 21:56:08 2019 /sbin/ip route add 172.105.51.63/32 via 192.168.1.1Sat Jul 13 21:56:08 2019 /sbin/ip route add 0.0.0.0/1 via 10.8.0.1Sat Jul 13 21:56:08 2019 /sbin/ip route add 128.0.0.0/1 via 10.8.0.1Sat Jul 13 21:56:08 2019 Initialization Sequence Completed
سیستم لینوکس شما هنگام شروع به کار، با استفاده از اسکریپت openvpn به صورت اتوماتیک متصل خواهد شد:
php
{vivek@deb10:~ }$ sudo systemctl start openvpn@client # <--- start client service

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

پس از اتصال به سرور OpenVPN از طریق دسکتاپ لینوکس، فرمان‌های زیر را اجرا نمایید:
php
{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
php
172.105.51.63

نکاتی در مورد عیب‌یابی سرور OpenVPN و مشکلات کلاینت

برای بررسی خطاهای سرور OpenVPN می‌توانید از فرمان زیر استفاده کنید:
php
{vivek@deb10:~ }$ journalctl --identifier ovpn-server
فایل تاریخچه و خطاهای سرور OpenVPN
فایل تاریخچه و خطاهای سرور OpenVPN
آیا تنظیمات فایروال به‌درستی بر روی سرور شما انجام شده‌اند؟ برای پاسخ به این موضوع و تأیید تنظیمات NAT سرور از فرمان‌های iptables و sysctl کمک بگیرید:
php
{vivek@deb10:~ }$ sudo iptables -t nat -L -n -v{vivek@deb10:~ }$ sysctl net.ipv4.ip_forward
تأیید تنظیمات فایروال OpenVPN
تأیید تنظیمات فایروال OpenVPN
  در صورتی که قوانین از /etc/rc.local وارد نشده‌ بودند، فرمان زیر را اجرا نمایید:
php
{vivek@deb10:~ }$ sudo sh /etc/rc.local{vivek@deb10:~ }$ sudo sysctl -w net.ipv4.ip_forward=1
آیا سرور OpenVPN در حال اجراست و پورت باز است؟ برای فهم این موضع می‌توانید از فرمان ss یا netstat و فرمان‌های pidof و ps استفاده کنید:
php
{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 در حال اجرا نبود، آن را دوباره راه‌اندازی کنید:
php
{vivek@deb10:~ }$ sudo systemctl restart openvpn@server
جستجوی خطاهای احتمالی:
php
{vivek@deb10:~ }$ sudo systemctl status openvpn@server
آیا کلاینت لینوکس دسکتاپ می‌تواند به سیستم سرور OpenVPN متصل شود؟ برای این منظور ابتدا باید یک تست ساده انجام دهید تا مطمئن شوید که پورت سرور OpenVPN یا UDP 1194 اتصال را قبول می‌کند یا خیر:
php
{vivek@deb10:~ }$ nc -vu 1194Connection to 1194 port [udp/openvpn] succeeded!
اگر چنین اتصالی برقرار نشد، به معنای آن است که فایروال لینوکس دسکتاپ یا روتر، یکی از آنها دسترسی به سرور را محدود می‌کنند. در نتیجه، مطمئن شوید که هم سرور و هم کلاینت دارای پروتکل و پورت یکسانی هستند.

جمع‌بندی

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