در این آموزش قصد داریم به بررسی نحوه نصب نرم افزار openvpn server روی لینوکس centos بپردازیم. توصیه ما نصب این نرم افزار روی centos5 است اما در خلال آموزش در قسمت هایی که برای centos6 متفاوت است، توضیحات مربوط به آنرا نیز درج می نماییم.
ابتدا باید چک کنیم که درایور tun/tap که از الزامات openvpn است، روی سیستم فعال است یا خیر. دستور زیر را اجرا می کنیم:
1
|
cat /dev/net/tun
|
اگر درایور فوق فعال باشد، پیام زیر را دریافت خواهیم کرد. (معمولا بصورت پیشفرض فعال است)
1
|
cat: /dev/net/tun: File descriptor in bad state
|
حالا پکیج های پایه مورد نیاز را با وارد کردن دستور زیر نصب می نماییم:
1
|
yum install gcc make rpm-build autoconf.noarch zlib-devel pam-devel openssl-devel -y
|
حالا پکیج LZO RPM را دانلود کرده و ریپوزیتوری RPMForge رو نصب و کانفیگ می کنیم :
1
|
wget http://openvpn.net/release/lzo-1.08-4.rf.src.rpm
|
برای Centos5 :
نسخه ۳۲ بیتی:
1
|
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
|
نسخه ۶۴ بیتی:
1
|
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
|
برای Centos6 :
نسخه ۳۲ بیتی:
1
|
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
|
نسخه ۶۴ بیتی:
1
|
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
|
پکیج های rpm دانلود شده را Build می کنیم:
1
|
rpmbuild --rebuild lzo-1.08-4.rf.src.rpm
|
1
|
rpm -Uvh lzo-*.rpm
|
1
|
rpm -Uvh rpmforge-release*
|
حالا نوبت به نصب openvpn می رسه. با دستور زیر این کار رو انجام میدیم:
1
|
yum install openvpn -y
|
پوشه easy-rsa را به مسیر /etc/openvpn/ منتقل می کنیم:
1
|
cp -R /usr/share/doc/openvpn-2.2.2/easy-rsa/ /etc/openvpn/
|
** لطفا توجه فرمایید که اگر با وارد کردن دستور فوق، اروری مثل ارور قرمز رنگ زیر را دریافت کردید، بدین معنی است که پوشه easy-rsa وجود ندارد (در openvpn 2.3.1 بصورت پیشفرض وجود ندارد) . دراین صورت مراحل زیر را برای دانلود آن دنبال کیند.
cannot stat `/usr/share/doc/openvpn-2.2.2/easy-rsa/’: No such file or directory
easy-rsa را با دستور زیر دانلود کنید:
1
|
wget https://github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
|
با دستور زیر آنرا از حالت فشرده خارج کنید:
1
|
tar -zxvf easy-rsa-2.2.0_master.tar.gz
|
پوشه easy-rsa را توسط دستور زیر به دایرکتوری openvpn کپی کنید:
1
|
cp -R easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/
|
حالا فایل های certificate را می سازیم:
توجه فرمایید که در Centos6 قبل از انجام دستورات مربوط به ساخت certificate باید تغییرات کوچکی را اعمال کنیم:
برای این منظور فایل /etc/openvpn/easy-rsa/2.0/vars را با ویرایشگر متن مثل nano یا vi بازکنید:
1
|
nano /etc/openvpn/easy-rsa/2.0/vars
|
و متن زیر را از داخل فایل پیدا کنید:
1
|
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
|
و آنرا به متن زیر تغییر دهید:
1
|
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
|
و فایل را save کنید. (برای save کردن فایل در ویرایشگر nano دکمه های ctrl+X را می زنیم و در مقابل سوال پرسیده شده y را تایپ کرده Enter می زنید)
حالا فایل های certificate را می سازیم (هر خط از دستورات را جداگانه اجرا کنید):
1
2
3
4
5
|
cd /etc/openvpn/easy-rsa/2.0
chmod 755 *
source ./vars
./vars
./clean-all
|
فایل CA را می سازیم:
1
|
./build-ca
|
موارد زیر را یکی یکی از شما میپرسد که میتوانید همه را بدون وارد کردن چیزی Enter بزنید»
1
2
3
4
5
6
7
|
<span style="color: #ff0000;">Country Name:
State or Province Name:
City:
Org Name:
Org Unit Name:
Common Name:
Email Address:</span>
|
کلید سرور (server key) را می سازیم:
1
|
./build-key-server server
|
مثل مرحله قبل چند مورد بصورت ذیل پرسیده می شود که میتوانید همه را با زدن Enter رد کنید و فقط دو مورد آخر که سوالی است را باید y را تایپ کنید و Enter بزنید»
1
2
3
4
5
|
<span style="color: #ff0000;">Common Name:</span>
<span style="color: #ff0000;">A challenge password:</span>
<span style="color: #ff0000;">Optional company name:</span>
<span style="color: #ff0000;">sign the certificate:</span><strong><span style="color: #3366ff;"> y</span></strong>
<span style="color: #ff0000;">1 out of 1 certificate requests:</span><span style="color: #3366ff;"><strong> y</strong></span>
|
حالا فایل Diffie Hellman را می سازیم. این دستور معمولا زمان بر است بنابراین تا زمانی که کار تمام شود صبر کنید:
1
|
./build-dh
|
فایل کانفیگ openvpn را می سازیم:
1
|
touch /etc/openvpn/server.conf
|
فایل کانفیگ ساخته شده را باز می کنیم و موارد ذیل را در آن کپی می کنیم و آنرا save می کنیم:
توجه فرمایید که این قسمت از مهمترین قسمت های کانفیگ openvpn است و مشکل بیشتر دوستان نیز در همین قسمت است. چیزی که سرور شما را از سایر سرور ها متمایز می کند، نوع ترکیب بندی توابع و دستورات مختلف در این فایل در سمت سرور و همچنین چینش مناسب دستورات مکمل آنها در سمت کلاینت است. چنانچه در این خصوص با ابهامی مواجه شدید با ما تماس بگیرید.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
port 1194 #- port
proto udp #- protocol
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3
|
قبل از استارت کردن openvpn باید از خاموش بودن Selinux اطمینان حاصل کنیم. جهت اطلاعات بیشتر در این مورد به پست راهنمای غیرفعال کردن selinux مراجعه نمایید
سرویس openvpn را استارت می کنیم:
1
|
service openvpn restart
|
اگر هنگام استارت کردن openvpn با ارور “failed” مواجه شدید، و در /var/log/messages ارور زیر را داشتید؛
1
|
PLUGIN_INIT: could not load plugin shared object /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so: /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so: cannot open shared object file: No such file or directory
|
بدین دلیل است که آخرین نسخه Openvpn فایل openvpn-auth-pam.so را شامل نمی شود و باید آنرا جداگانه دانلود نمایید.
برای نسخه های ۳۲ بیت با دستور زیر :
1
|
wget http://safesrv.net/public/dl/openvpn-auth-pam.zip
|
و برای نسخه های ۶۴ بیت با دستور زیر دانلود نمایید:
1
|
wget http://safesrv.net/public/openvpn-auth-pam.zip
|
فایل را از حالت فشرده خارج کنید:
1
|
unzip openvpn-auth-pam.zip
|
آنرا به دایرکتوری Openvpn منتقل کنید:
1
|
mv openvpn-auth-pam.so /etc/openvpn/openvpn-auth-pam.so
|
سپس سطر مربوط به پلاگین pam را از فایل کانفیگ openvpn حذف نموده و بجای آن سطر زیر را جایگزین کنید:
1
|
plugin /etc/openvpn/openvpn-auth-pam.so /etc/pam.d/login
|
سرویس openvpn را restart کنید. مشکل باید حل شده باشد:
1
|
service openvpn restart
|
چنانچه هنوز هم سرویس استارت نمی شود، خطای ثبت شده را از /var/log/messages مشاهده نمایید و برای رفع آن اقدام کنید. معمولا خطاها در این مرحله به پلاگین های موجود در فایل کانفیگ مربوط می شوند
توجه: برای stop کردن سرویس openvpn میتوانید از دستور زیر استفاده کنید:
1
|
killall -9 openvpn
|
حالا باید IP forwarding را فعال کنیم. بدین منظور فایل /etc/sysctl.conf را باز نموده و مقدار net.ipv4.ip_forward را برابر با ۱ قرار میدهیم:
1
|
net.ipv4.ip_forward = 1
|
و آنرا Save می کنیم.
و برای اعمال تغییرات دستور زیر را اجرا می کنیم:
1
|
sysctl -p
|
Nat کردن اینترنت:
اگر بخواهید کاربرانی که به openvpn متصل می شوند به اینترنت هم دسترسی داشته باشند، باید اینترنت را nat کنیم . برای این کار بصورت زیر عمل می کنیم:
اگر روی vps دارید تنظیمات رو انجام میدید، لازمه توجه کنید که دستور زیر برای Nat کردن اینترنت در مجازی ساز های xen و KVM و اکثر مجازی سازهای دارای کرنل اختصاصی جواب میدهد اما برای vps های مجازی سازی شده با OpenVZ باید از دستور دیگری استفاده نمایید که در ادامه بررسی می کنیم:
1
|
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
|
دستور مناسب برای OpenVZ (بجای ۱۰٫۱۰٫۱۰٫۱۰، آدرس آیپی سرورتان را وارد کنید) :
1
|
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to-source 10.10.10.10
|
و
1
|
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 10.10.10.10
|
اگر روی این سرور فایروالی نظیر CSF دارید باید پورت openvpn را روی آن باز کنید. ما با فرض وجود فایروال CSF و ست بودن پورت openvpn روی پورت ۱۱۹۴، تنظیمات لازم را بررسی می کنیم:
توضیح: بهتر است بجای اجرای مستقیم دستورات زیر، آنها را در فایل /etc/csf/csfpre.sh اضافه نمایید
توجه: بجای ۱۰٫۱۰٫۱۰٫۱۰ آدرس آیپی سرور خودتان را وارد کنید
1
2
3
4
5
|
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -j SNAT --to-source 10.10.10.10
|
اگر rule های بالا (بخصوص در سرور های دارای cpanel) باعث بروز مشکل برای شما شد، آنها را حذف نموده و بجای آنها از دستورات زیر استفاده نمایید:
1
2
3
|
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
|
در پایان برای ذخیره سازی تغییرات دستور زیر را اجرا می کنیم:
1
|
service iptables save
|
تنظیمات سمت Client:
در سمت کاربر نیاز است یک فایل client.ovpn ساخته و محتوای زیر را در آن وارد نماییم. این فایل را بهمراه سایر فایل های certificate ایجاد شده به پوشه کانفیگ openvpn در کامپیوتر کاربر منتقل می کنیم:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
client
dev tun
proto udp
remote 10.10.10.10 1194 # - Your server IP and OpenVPN Port
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
reneg-sec 0
verb 3
|
مجددا لازم به ذکر است که:
* بجای ۱۰٫۱۰٫۱۰٫۱۰ آدرس آیپی سرور خود را وارد نمایید
* تنظیماتی که در سمت کلاینتر وارد می کنید باید با تنظیمات سرور متناسب باشد
برای اینکه openvpn در هر بار restart شدن سیستم بصورت خودکار اجرا شود، دستور زیر را اجرا می کنیم:
1
|
chkconfig openvpn on
|
ساخت و حذف اکانت:
برای ساختن یک اکانت از دستور زیر استفاده می کنیم:
1
2
|
useradd username -s /bin/false
passwd username
|
برای حذف یک اکانت از دستور زیر استفاده می کنیم:
1
|
userdel username
|
سخن پایانی:
در صورتی که قصد راه اندازی سرور برای مقاصد تجاری دارید لازم است موارد زیر را در نظر بگیرید:
* برای اتصال openvpn به radius server ها (نظیر IBS) بجای پلاگین pam باید از پلاگین radiusplugin استفاده کنید که در پست بعدی به آن می پردازیم.
* برای دستیابی به سرعت مناسب باید از پورت های دیگری غیر از پورت پیشفرض openvpn استفاده نمایید.
* برای دسیابی به کیفیت مناسب باید همزمان هم روی پروتکل tcp و هم روی پروتکل udp سرویس را راه اندازی نمایید
* برای ایجاد قابلبت اتصال روی موبایل، لازم است اولا از برخی توابع خاص در فایل کانفیگ استفاده نمایید و ثانیا در سمت کاربر، محتویات فایل های certificate را با فایل کانفیگ Openvpn ادغام نمایید
در صورتی که هرگونی سوال یا ابهامی در این خصوص دارید میتوانید با ما در تماس باشید