نصب و راه اندازی سرور OpenVPN در لینوکس توزیع اوبونتو (Ubuntu) کار سختی نیست و در این مقاله داتیس نتورک قصد داریم روش نصب OpenVPN در اوبونتو را به شما عزیزان آموزش دهیم، همراه ما باشید.
OpenVPN با استفاده از پروتکل های امنیتی سفارشی، امنیت بالایی را با استفاده از اتصالات VPN نقطه به نقطه یا سایت به سایت ارائه می دهد.
نصب OpenVPN در اوبونتو یا دبیان
پیشنیاز ها :
- سرور لینوکس اوبونتو یا دبیان
- دسترسی روت
- آدرس IP – آدرس های IPv4 و IPv6 خود را پیدا کنید.
برای مشاهده آدرس آی پی سیستم می توانید از دستور زیر استفاده کنید :
ip addr show dev eth0
در دستور بالا eth0 نام اینترفیس مورد نظر است که ممکن است در لینوکس شما متفاوت باشد.
نصب و پیکربندی
دستور زیر را برای نصب بسته های گواهی OpenVPN ،IPTables ،OpenSSL و ca گواهینامه ها وارد می کنیم:
apt-get install openvpn iptables openssl ca-certificates -y
پس از اتمام نصب، ما نیاز به بارگیری easy-rsa داریم.
wget -O ~/easyrsa.tgz https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz 2>/dev/null || curl -Lo ~/easyrsa.tgz https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.6/EasyRSA-unix-v3.0.6.tgz tar xzf ~/easyrsa.tgz -C ~/ mv ~/EasyRSA-v3.0.6/ /etc/openvpn/ mv /etc/openvpn/EasyRSA-v3.0.6/ /etc/openvpn/easy-rsa/ rm -f ~/easyrsa.tgz
بعد از بارگیری easy-rsa، باید PKI ایجاد کنیم و گواهی های CA و سرور / مشتری را تنظیم کنیم.
توجه: گواهینامه ها در مدت ۳۶۵۰ روز (۱۰ سال) منقضی می شوند، می توانید ارزش را تغییر دهید.
توجه: می توانید نام گواهی مشتری (CLIENT) را تغییر دهید، اما از کاراکترهای ویژه استفاده نکنید.
cd /etc/openvpn/easy-rsa/ ./easyrsa init-pki ./easyrsa --batch build-ca nopass EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-server-full server nopass EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full CLIENT nopass EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl
اکنون گواهینامه ها را در پوشه OpenVPN جابجا می کنیم و مجوزهای گروه و مالک آنها را تغییر می دهیم.
cp pki/ca.crt pki/private/ca.key pki/issued/server.crt pki/private/server.key pki/crl.pem /etc/openvpn chown nobody:nogroup /etc/openvpn/crl.pem
بعد از انتقال گواهینامه ها، می خواهیم کلید تأیید اعتبار را با استفاده از (tls (tls-auth تولید کنیم، پس از آن باید پارامترهای DH را ایجاد کنیم و از گروه از پیش تعریف شده ffdhe2048 استفاده خواهیم کرد.
openvpn --genkey --secret /etc/openvpn/ta.key
گروه های تعریف شده DHE توسط Task Force مهندسی اینترنت (IETF) در RFC 7919 توصیه می شود. این گروه ها قرار است در مقابل حملات نسبت به گروه هایی که به طور تصادفی تولید می شوند، مقاوم تر باشند.
echo '-----BEGIN DH PARAMETERS----- MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz +۸yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a ۸۷VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7 YdEIqUuyyOP7uWrat2DX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi ۷MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg== -----END DH PARAMETERS-----' > /etc/openvpn/dh.pem
اکنون زمان آن رسیده است که پیکربندی سرور OpenVPN را ایجاد کنیم
تنظیماتی که ممکن است تغییر دهید:
- پورت: 1194 (پیش فرض) یا 443
- proto: udp (پیش فرض) یا tcp
توجه: بهتر است پورت را تغییر دهید زیرا می توان پورت OpenVPN 1194 را مسدود کرد. علاوه بر این، پورت 443 برای جلوگیری از سانسور ایده آل است.
توجه: پروتکل UDP عملکرد بهتری نسبت به پروتکل TCP دارد، اما چندان قابل اعتماد نیست..
nano /etc/openvpn/server.conf
port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem auth SHA512 tls-auth /etc/openvpn/ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 local 116.203.180.222 #Here you should add the server ipv4 address ifconfig-pool-persist /etc/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" server-ipv6 2a01:4f8:c2c:5fc7:80::/112 #Here you should add the server ipv6 address tun-ipv6 push tun-ipv6 ifconfig-ipv6 2a01:4f8:c2c:5fc7::1 2a01:4f8:c2c:5fc7::2 #Here you should add the server ipv6 address push "route-ipv6 2a01:4f8:c2c:5fc7:2::/64" #Here you should add the server ipv6 address push "route-ipv6 2000::/3"
اکنون نوبت DNS است
شما باید یکی از گزینه های زیر را انتخاب کنید:
- از سیستم پیش فرض DNS استفاده کنید
- Cloudflare DNS
- Google DNS
سیستم DNS :
grep -v '#' /run/systemd/resolve/resolv.conf | grep 'nameserver' | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
خروجی باید شبیه به این باشد:
۲۱۳٫۱۳۳٫۹۸٫۹۸ ۲۱۳٫۱۳۳٫۹۹٫۹۹ ۲۱۳٫۱۳۳٫۱۰۰٫۱۰۰
DNS پیش فرض:
IPV4: Primary DNS: 213.133.98.98 Alternative DNS: 213.133.99.99 Alternative DNS: 213.133.100.100 IPV6 Primary DNS: 2a01:4f8:0:1::add:9898 Alternative DNS: 2a01:4f8:0:1::add:9999 Alternative DNS: 2a01:4f8:0:1::add:1010
Cloudflare DNS:
IPV4: Primary DNS: 1.1.1.1 Alternative DNS: 1.0.0.1 IPV6 Primary DNS: 2606:4700:4700::1111 Alternative DNS: 2606:4700:4700::1001
Google DNS:
IPV4: Primary DNS: 8.8.8.8 Alternative DNS: 8.8.4.4 IPV6 Primary DNS: 2001:4860:4860::8888 Alternative DNS: 2001:4860:4860::8844
بعد از انتخاب ارائه دهنده DNS، آنها را در انتهای پرونده اضافه کنید. برای اینکار باید دستور زیر را وارد کنید :
nano /etc/openvpn/server.conf
سپس تغییرات را اعمال کنید و بعد دستور زیر را بزنید :
push "dhcp-option DNS SELECTED-DNS-PROVIDER" push "dhcp-option DNS SELECTED-DNS-PROVIDER"
DNS اوکی شد.
پس از اتمام کار با قسمت DNS، زمان آن است که به ادامه کانفیگ بپردازیم.
دستور زیر را وارد کنید :
nano /etc/openvpn/server.conf
تغییرات زیر را اعمال کنید :
keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun client-to-client status /etc/openvpn/openvpn-status.log verb 3 crl-verify /etc/openvpn/crl.pem
حال باید قوانین فایروال را اضافه کنیم. اگر از Firewalld استفاده می کنید کدهای زیر را اضافه کنید:
# We are not going to use --add-service=openvpn because that would only work with default port and protocol firewall-cmd --zone=public --add-port=1194/udp firewall-cmd --zone=trusted --add-source=10.8.0.0/24 firewall-cmd --permanent --zone=public --add-port=1194/udp firewall-cmd --permanent --zone=trusted --add-source=10.8.0.0/24 # Set NAT for the VPN subnet firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to SERVER_IP firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to SERVER_IP firewall-cmd --permanent --direct --add-rule ipv6 filter FORWARD_direct 0 -i tun0 -o eth0 -j ACCEPT
اگر از iptables استفاده می کنید کدهای زیر را وارد کنید:
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE #Note: If you use tcp protocol you must change -p udp to -p tcp and --ddport 1194 to --ddport 443 iptables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT iptables -A INPUT -i tun0 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT #Note: If you use tcp protocol you must change -p udp to -p tcp and --ddport 1194 to --ddport 443 ip6tables -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT ip6tables -A INPUT -i tun0 -j ACCEPT ip6tables -A FORWARD -i tun0 -o eth0 -s 2a01:4f8:c2c:5fc7:80::/112 -m state --state NEW -j ACCEPT
iptables را ذخیره کنید:
iptables-save > /etc/iptables.rules ip6tables-save > /etc/ip6tables.rules
حال باید یک فایل پیکربندی client ایجاد کنیم.
nano /etc/openvpn/client.txt
کل پیکربندی را اضافه کنید.
client dev tun proto udp sndbuf 0 rcvbuf 0 tun-mtu 1500 mssfix 1420 remote 116.203.180.222 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server auth SHA512 auth-nocache cipher AES-256-CBC setenv opt block-outside-dns key-direction 1 verb 3
در پایان پیکربندی سرور OpenVPN باید شبیه به این باشد:
نمایش server.conf :
port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt key /etc/openvpn/server.key dh /etc/openvpn/dh.pem auth SHA512 tls-auth /etc/openvpn/ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 local 116.203.180.222 #Here you should add the server ipv4 address ifconfig-pool-persist /etc/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 1.1.1.1" push "dhcp-option DNS 1.0.0.1" #ipv6 support server-ipv6 2a01:4f8:c2c:5fc7:80::/112 #Here you should add the server ipv6 address tun-ipv6 push tun-ipv6 ifconfig-ipv6 2a01:4f8:c2c:5fc7::1 2a01:4f8:c2c:5fc7::2 #Here you should add the server ipv6 address push "route-ipv6 2a01:4f8:c2c:5fc7:2::/64" #Here you should add the server ipv6 address push "route-ipv6 2000::/3" push "dhcp-option DNS 2606:4700:4700::1111" push "dhcp-option DNS 2606:4700:4700::1001" keepalive 10 120 cipher AES-256-CBC user nobody group nogroup persist-key persist-tun client-to-client status /etc/openvpn/openvpn-status.log verb 3 crl-verify /etc/openvpn/crl.pem
برخی از VPS ها packet forwarding IPv4 / IPv6 غیرفعال کرده اند.
برای فعال کردن پکت فرواردینگ باید /etc/sysctl.conf را ویرایش کنید:
nano /etc/sysctl.conf
خطوط زیر را جستجو کنید و از حالت کامنت خارج کنید مشابه کد زیر :
# Uncomment the next line to enable packet forwarding for IPv4 #net.ipv4.ip_forward=1 net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6 #net.ipv6.conf.all.forwarding=1 net.ipv6.conf.all.forwarding=1
سپس دستور زیر را اجرا کنید:
sysctl -p
کاربر OpenVPN ایجاد کنید
برای اینکه یک کاربر جدید اضافه کنیم ، قصد داریم یک اسکریپت جدید ایجاد کنیم. این اسکریپت ۲ گزینه دارد:
کاربر جدیدی اضافه کنید
کاربر موجود را حذف کنید
cd ~ nano openvpn-user-manager.sh
پیکربندی زیر را کپی و جایگذاری کنید:
#!/usr/bin/env bash if readlink /proc/$$/exe | grep -q "dash"; then echo "This script needs to be run with bash, not sh." exit fi if [[ "$EUID" -ne 0 ]]; then echo "Sorry, you need to run this as root" exit fi newclient () { # Generates the custom client.ovpn cp /etc/openvpn/client.txt ~/$1.ovpn echo "<ca>" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/ca.crt >> ~/$1.ovpn echo "</ca>" >> ~/$1.ovpn echo "<cert>" >> ~/$1.ovpn sed -ne '/BEGIN CERTIFICATE/,$ p' /etc/openvpn/easy-rsa/pki/issued/$1.crt >> ~/$1.ovpn echo "</cert>" >> ~/$1.ovpn echo "<key>" >> ~/$1.ovpn cat /etc/openvpn/easy-rsa/pki/private/$1.key >> ~/$1.ovpn echo "</key>" >> ~/$1.ovpn echo "<tls-auth>" >> ~/$1.ovpn sed -ne '/BEGIN OpenVPN Static key/,$ p' /etc/openvpn/ta.key >> ~/$1.ovpn echo "</tls-auth>" >> ~/$1.ovpn } if [[ -e /etc/openvpn/server.conf ]]; then while : do clear echo "" echo "What do you want to do?" echo " 1) Add a new user" echo " 2) Remove an existing user" echo " 3) Exit" read -p "Select an option [1-3]: " option case $option in ۱) echo echo "Please don't use special characters, only clear words." read -p "Client name: " -e CLIENT cd /etc/openvpn/easy-rsa/ EASYRSA_CERT_EXPIRE=3650 ./easyrsa build-client-full $CLIENT nopass newclient "$CLIENT" echo echo "Client $CLIENT added, configuration is available at:" ~/"$CLIENT.ovpn" exit ;; ۲) NUMBEROFCLIENTS=$(tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep -c "^V") if [[ "$NUMBEROFCLIENTS" = '0' ]]; then echo echo "We were not able to find existing clients!" exit fi echo echo "Select the existing client certificate you want to revoke:" tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep "^V" | cut -d '=' -f 2 | nl -s ') ' if [[ "$NUMBEROFCLIENTS" = '1' ]]; then read -p "Select one client [1]: " CLIENTNUMBER else read -p "Select one client [1-$NUMBEROFCLIENTS]: " CLIENTNUMBER fi CLIENT=$(tail -n +2 /etc/openvpn/easy-rsa/pki/index.txt | grep "^V" | cut -d '=' -f 2 | sed -n "$CLIENTNUMBER"p) echo read -p "Do you actually desire to revoke the access of the client? $CLIENT? [y/N]: " -e REVOKE if [[ "$REVOKE" = 'y' || "$REVOKE" = 'Y' ]]; then cd /etc/openvpn/easy-rsa/ ./easyrsa --batch revoke $CLIENT EASYRSA_CRL_DAYS=3650 ./easyrsa gen-crl rm -f pki/reqs/$CLIENT.req rm -f pki/private/$CLIENT.key rm -f pki/issued/$CLIENT.crt rm -f /etc/openvpn/crl.pem cp /etc/openvpn/easy-rsa/pki/crl.pem /etc/openvpn/crl.pem chown nobody:nogroup /etc/openvpn/crl.pem echo echo "Certificate for the client $CLIENT is revoked!" else echo echo "Certificate revocation for client $CLIENT aborted!" fi exit ;; ۳) exit ;; esac done else clear echo "OpenVPN is not installed." echo "Install OpenVPN first" echo "https://community.hetzner.com/tutorials/install-and-configure-openvpn-on-ubuntu-and-debian" fi
ذخیره کنید و سپس با دستور زیر مجوز های مورد نیاز را اعمال کنید:
chmod 755 ~/root/openvpn-user-manager.sh
توجه: اگر نمی توانید به سرور vpn وصل شوید، VPS را مجدداً راه اندازی کنید.
استفاده از مدیر کاربر (OpenVPN (openvpn-user-manager.sh:
اسکریپت را اجرا کنید:
bash openvpn-user-manager.sh
خروجی باید شبیه به این باشد:
OpenVPN is installed. What do you want to do? ۱) Add a new user ۲) Remove an existing user ۳) Exit Select an option [1-3]:
به همین راحتی توانستیم OpenVPN را در اوبونتو یا دبیان نصب کنید. در خروجی دستور فوق مشخص است که می توانید کاربر جدید تعریف کنید و یا کاربری را حذف کنید و … ، امیدواریم این اموزش برای شما مفید بوده باشد.
سلام وقت بخیر
شما میتونید برای نصب و راه اندازی سرور این کار رو انجام بدید ؟