این آموزش گام به گام نحوه نصب و راه‌اندازی یک سرور OpenVPN امن روی سیستم‌عامل Ubuntu یا Debian را شرح می‌دهد.

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

قبل از شروع، باید موارد زیر را آماده داشته باشید:

  • سرور لینوکس (اوبونتو یا دبیان).
  • دسترسی ریشه (Root Access) به سرور.
  • آدرس IP سرور – آدرس‌های IPv4 و IPv6 خود را پیدا کنید.

برای مشاهده آدرس IP سیستم، می‌توانید از دستور زیر استفاده کنید:

ip addr show dev eth0

توجه: در دستور بالا، eth0 نام واسط شبکه (Interface) است که ممکن است در سیستم لینوکس شما متفاوت باشد.

راه‌اندازی و پیکربندی سرور OpenVPN

ابتدا، بسته‌های اصلی OpenVPN، IPTables، OpenSSL و CA Certificates را نصب می‌کنیم:

apt-get install openvpn iptables openssl ca-certificates -y

دانلود و راه‌اندازی Easy-RSA

پس از نصب، نیاز است تا ابزار Easy-RSA را دانلود کنید. این ابزار برای مدیریت زیرساخت کلید عمومی (PKI) استفاده می‌شود:

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

ایجاد PKI و گواهینامه‌ها

پس از دانلود 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 را تولید کرده و سپس پارامترهای DH (Diffie-Hellman) را با استفاده از گروه از پیش تعریف شده ffdhe2048 ایجاد کنید:

openvpn --genkey --secret /etc/openvpn/ta.key

نکته درباره گروه‌های DHE: گروه‌های DHE تعریف شده توسط IETF (RFC 7919) توصیه می‌شوند زیرا در مقایسه با گروه‌های تولید شده تصادفی، در برابر حملات مقاوم‌تر هستند.

echo '-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEA//////////+t+FRYortKmq/cViAnPTzx2LnFg84tNpWp4TZBFGQz
+8yTnc4kmz75fS/jY2MMddj2gbICrsRhetPfHtXV/WVhJDP1H18GbtCFY2VVPe0a
87VXE15/V8k1mE8McODmi3fipona8+/och3xWKE2rec1MKzKT0g6eXq8CrGCsyT7
YdEIqUuyyOP7uWratcDX9GgdT0Kj3jlN9K5W7edjcrsZCwenyO4KbXCeAvzhzffi
7MA0BM0oNC9hkXL+nOmFg/+OTxIy7vKBg8P+OxtMb61zO7X8vC7CIAXFjvGDfRaD
ssbzSibBsu/6iGtCOGEoXJf//////////wIBAg==
-----END DH PARAMETERS-----' > /etc/openvpn/dh.pem

ایجاد فایل پیکربندی سرور

وقت آن است که فایل پیکربندی اصلی سرور OpenVPN را بسازید.

تنظیمات اولیه سرور

فایل پیکربندی را با ویرایشگر nano باز کنید:

nano /etc/openvpn/server.conf

تنظیمات زیر را به فایل اضافه کنید. ممکن است بخواهید پورت (port) یا پروتکل (proto) را تغییر دهید:

  • port: پیش‌فرض 1194 است. پورت 443 برای جلوگیری از سانسور ایده‌آل است.
  • proto: پیش‌فرض udp است. پروتکل UDP عملکرد بهتری دارد، اما TCP قابل اعتمادتر است.
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                                       # آدرس IPv4 سرور خود را اینجا قرار دهید
ifconfig-pool-persist /etc/openvpn/ipp.txt
push "redirect-gateway def1 bypass-dhcp"

server-ipv6 2a01:4f8:c2c:5fc7:80::/112                      # آدرس IPv6 سرور خود را اینجا قرار دهید
tun-ipv6
push tun-ipv6
ifconfig-ipv6 2a01:4f8:c2c:5fc7::1 2a01:4f8:c2c:5fc7::2     # آدرس IPv6 سرور خود را اینجا قرار دهید
push "route-ipv6 2a01:4f8:c2c:5fc7:2::/64"                  # آدرس IPv6 سرور خود را اینجا قرار دهید
push "route-ipv6 2000::/3"

پیکربندی DNS

باید یک ارائه دهنده DNS انتخاب کنید و آن را به انتهای فایل server.conf اضافه کنید.

گزینه‌های DNS:

ارائه دهنده IPv4 اصلی IPv4 جایگزین IPv6 اصلی IPv6 جایگزین
Cloudflare 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001
Google 8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844
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 انتخابی) به انتهای آن اضافه کنید:

nano /etc/openvpn/server.conf

 

push "dhcp-option DNS SELECTED-DNS-PROVIDER"
push "dhcp-option DNS SELECTED-DNS-PROVIDER"
# برای IPv6 هم تکرار شود
push "dhcp-option DNS SELECTED-IPV6-DNS-PROVIDER"
push "dhcp-option DNS SELECTED-IPV6-DNS-PROVIDER"

ادامه پیکربندی سرور

تنظیمات نهایی را به انتهای فایل server.conf اضافه کنید:

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

افزودن قوانین فایروال (Firewall Rules)

برای عبور ترافیک VPN، باید قوانین فایروال را اعمال کنید.

استفاده از IPTables

اگر از IPTables استفاده می‌کنید، دستورات زیر را وارد کنید:

iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
# توجه: اگر از پروتکل tcp استفاده می‌کنید، -p udp را به -p tcp و --dport 1194 را به --dport 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
# توجه: اگر از پروتکل tcp استفاده می‌کنید، -p udp را به -p tcp و --dport 1194 را به --dport 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

استفاده از Firewalld 

اگر از Firewalld استفاده می‌کنید:

# ما از --add-service=openvpn استفاده نمی‌کنیم چون فقط با پورت و پروتکل پیش‌فرض کار می‌کند
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
# تنظیم NAT برای ساب‌نت VPN (SERVER_IP را با آدرس IP سرور خود جایگزین کنید)
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

فعال‌سازی Packet Forwarding

بسیاری از سرویس‌های VPS، انتقال بسته (Packet Forwarding) را غیرفعال دارند. برای فعال‌سازی، فایل /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

ایجاد فایل پیکربندی کلاینت (Client Configuration)

برای اتصال کلاینت‌ها، نیاز به یک فایل پیکربندی پایه دارید.

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

نکته: آدرس IP و پورت در خط remote را با مشخصات سرور خود جایگزین کنید.

اسکریپت مدیریت کاربران 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
1) 
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
;;
2)
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
;;
3)
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 openvpn-user-manager.sh

استفاده از اسکریپت مدیریت کاربران

bash openvpn-user-manager.sh

خروجی شبیه به این خواهد بود:

OpenVPN is installed.

What do you want to do?
1) Add a new user
2) Remove an existing user
3) Exit
Select an option [1-3]:

با انتخاب گزینه ۱ و وارد کردن نام دلخواه، فایل پیکربندی کامل کلاینت (CLIENT.ovpn) شامل تمامی گواهینامه‌های لازم در پوشه خانگی شما ایجاد خواهد شد که می‌توانید آن را به کاربر ارسال کنید.

توجه نهایی: اگر پس از اتمام مراحل نمی‌توانید به سرور VPN متصل شوید، VPS خود را راه‌اندازی مجدد (Restart) کنید.

flet.ai گفت:
دیدگاه شما منتظر بررسی است. این یک پیش‌نمایش است؛ دیدگاه شما بعد از تأیید قابل نمایش خواهد شد.
flet.ai – The Ultimate AI Tools!
yy777live گفت:
دیدگاه شما منتظر بررسی است. این یک پیش‌نمایش است؛ دیدگاه شما بعد از تأیید قابل نمایش خواهد شد.
YY777live seems to be streaming 24/7 wow. Definitely caught my eye. Might try chatting with some live dealers tonight. Gonna chill here for a bit and enjoy yy777live
bg666gamelogin گفت:
دیدگاه شما منتظر بررسی است. این یک پیش‌نمایش است؛ دیدگاه شما بعد از تأیید قابل نمایش خواهد شد.
Is it just the name or does bg666gamelogin bring you crazy luck? Hoping for a bit of fortune, anyone had decent wins? I’ll check it out for myself! See for yourself: bg666gamelogin
byu777 گفت:
دیدگاه شما منتظر بررسی است. این یک پیش‌نمایش است؛ دیدگاه شما بعد از تأیید قابل نمایش خواهد شد.
Solid analysis! Understanding variance is key to long-term success. Building a community like the one at byu777 app definitely adds to the fun & responsible gaming experience. Great post!