لینوکس, مدیریت سرور لینوکس

آموزش نصب OpenVPN در لینوکس اوبونتو (Ubuntu)

آموزش نصب OpenVPN در لینوکس اوبونتو (Ubuntu)

نصب و راه اندازی سرور OpenVPN در لینوکس توزیع اوبونتو (Ubuntu) کار سختی نیست و در این مقاله داتیس نتورک قصد داریم روش نصب OpenVPN در اوبونتو را به شما عزیزان آموزش دهیم، همراه ما باشید.

آموزش نصب OpenVPN در لینوکس اوبونتو (Ubuntu)

OpenVPN با استفاده از پروتکل های امنیتی سفارشی، امنیت بالایی را با استفاده از اتصالات VPN نقطه به نقطه یا سایت به سایت ارائه می دهد.

نصب OpenVPN در اوبونتو یا دبیان

پیشنیاز ها :

  1. سرور لینوکس اوبونتو یا دبیان
  2. دسترسی روت
  3. آدرس 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 را در اوبونتو یا دبیان نصب کنید. در خروجی دستور فوق مشخص است که می توانید کاربر جدید تعریف کنید و یا کاربری را حذف کنید و … ، امیدواریم این اموزش برای شما مفید بوده باشد.

1 نظر در “آموزش نصب OpenVPN در لینوکس اوبونتو (Ubuntu)

  1. علی کریمی گفت:

    سلام وقت بخیر
    شما میتونید برای نصب و راه اندازی سرور این کار رو انجام بدید ؟

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *