OpenVPN یک پروژه متن باز است که توسط جیمز یونان ساخته شده و در سال ۲۰۰۲ منتشر شد. OpenVPN با استفاده از پروتکل های امنیتی سفارشی، امنیت بالایی را با استفاده از اتصالات نقطه به نقطه یا سایت به سایت ارائه می دهد. ما را همراهی کنید تا به شما نحوه نصب OpenVPN در اوبونتو یا دبیان با پشتیبانی IPv6 را آموزش دهیم.
سرور با سیستم عامل لینوکس:
دسترسی روت
آدرس IP: آدرس های IPv4 و IPv6 خود را پیدا کنید.
ip addr show dev eth0 | grep "inet" | awk '{ print $2 }'
خروجی باید شبیه به این باشد:
root@ubuntu-2gb-nbg1-1:~# ip addr show dev eth0 | grep "inet" | awk '{ print $2 }' ۱۱۶٫۲۰۳٫۱۸۰٫۲۲۲/۳۲
IPv4 ما ۱۱۶٫۲۰۳٫۱۸۰٫۲۲۲ است و دارای / ۳۲ subnet mask است.
#IPv6 ip addr show dev eth0 | grep "inet6 " | awk '{ print $2 }'
خروجی باید شبیه به این باشد:
root@ubuntu-2gb-nbg1-1:~# ip addr show dev eth0 | grep "inet6" | awk '{ print $2 }' ۲a01:4f8:c2c:5fc7::1/64 fe80::9400:ff:fe27:10db/64
IPv6 ما ۲a01: 4f8: c2c: 5fc7 :: 1 است و دارای / ۶۴ subnet mask است.
دوم IPv6 fe80 :: 9400: ff: fe27: 10db آدرس (mac (RFC 4291.
نصب بسته های گواهی 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 را ایجاد کنیم.
تنظیماتی که ممکن است تغییر دهید:
توجه: بهتر است پورت را تغییر دهید زیرا می توان پورت OpenVPN 1194 را مسدود کرد. علاوه بر این، بندر ۴۴۳ برای جلوگیری از سانسور ایده آل است زیرا ترافیک OpenVPN با ترافیک منظم SSL یکسان است.
توجه: پروتکل 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:
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
Quad9 DNS:
IPV4: Primary DNS: 9.9.9.9 Alternative DNS: 149.112.112.112 IPV6 Primary DNS: 2620:fe::fe Alternative DNS: 2620:fe::9
بعد از انتخاب ارائه دهنده DNS، آنها را در انتهای پرونده اضافه کنید.
توجه: شما باید هر دو سرور DNS و (IPv4 و IPv6) را اضافه کنید، اولین سرور اصلی DNS و دوم سرور جایگزین DNS است.
nano /etc/openvpn/server.conf
push "dhcp-option DNS SELECTED-DNS-PROVIDER" push "dhcp-option DNS SELECTED-DNS-PROVIDER"
پس از اتمام کار با قسمت 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
# 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 غیرفعال کرده اند. برای فعال کردن ارسال IPv4 باید /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.
برای اینکه یک کاربر جدید اضافه کنیم ، قصد داریم یک اسکریپت جدید ایجاد کنیم. این اسکریپت ۲ گزینه دارد:
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 را مجدداً راه اندازی کنید. اگر پس از راه اندازی مجدد مشکل وجود دارد، مرحله ۱٫۳ را دنبال کنید.
اسکریپت را اجرا کنید:
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 را در اوبونتو یا دبیان نصب کنید.
امیدواریم از این مقاله بهره لازم را برده و برای شما مفید بوده باشد. نظرات خود را با ما به اشتراک بگذارید.
ما را در شتابان هاست دنبال کنید.