سرور 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
گزینه دیگر، اجرای فرمان 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
مجوزهای نصب با استفاده از فرمان 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 است:
نمونه عملکرد سرور 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 # <--- دریافت وضعیت سرور
گام ۴) وصلکردن یک سرور OpenVPN با استفاده کلاینت iOS، اندروید، لینوکس یا ویندوز
بر روی سرور میتوانید فایلی با نام ~/linuxDesktop.ovpn پیدا کنید. تنها کاری که باید انجام دهید این است که این فایل را با استفاده از فرمان scp به روی دسکتاپ محلیتان کپی کنید:
{vivek@deb10:~ }$ scp vivek@:~/linuxDesktop.ovpn .
و یا:
{vivek@deb10:~ }$ scp root@:~/linuxDesktop.ovpn .
سپس این فایل را در اختیار کلاینت OpenVPN قرار دهید تا برای اتصال استفاده کند:
تنظیمات کلاینت 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
آیا تنظیمات فایروال بهدرستی بر روی سرور شما انجام شدهاند؟ برای پاسخ به این موضوع و تأیید تنظیمات NAT سرور از فرمانهای iptables و sysctl کمک بگیرید:
{vivek@deb10:~ }$ sudo iptables -t nat -L -n -v {vivek@deb10:~ }$ sysctl net.ipv4.ip_forward
در صورتی که قوانین از /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 در حال اجرا نبود، آن را دوباره راهاندازی کنید:
{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 و صفحه اسکریپت آن مراجعه نمایید.