OpenVPN یک پروژه متن باز است که توسط جیمز یونان ساخته شده و در سال ۲۰۰۲ منتشر شد. OpenVPN با استفاده از پروتکل های امنیتی سفارشی، امنیت بالایی را با استفاده از اتصالات نقطه به نقطه یا سایت به سایت ارائه می دهد. ما را همراهی کنید تا به شما نحوه نصب OpenVPN در اوبونتو یا دبیان با پشتیبانی IPv6 را آموزش دهیم.
آدرس IPv4:
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 }'
116.203.180.222/34
IPv4 ما 116.203.180.222 است و دارای / ۳۲ subnet mask است.
آدرس IPv6:
#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 }'
2a01:4f8:c2c:5fc7::1/64
fe80::9400:ff:fe27:10db/64
مرحله ۱ – نصب و پیکربندی:
مرحله ۱.۱ نصب:
نصب بسته های گواهی 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 را ایجاد کنیم.
تنظیماتی که ممکن است تغییر دهید:
پورت: ۱۱۹۴ (پیش فرض) یا ۴۴۳
proto: udp (پیش فرض) یا tcp
توجه: بهتر است پورت را تغییر دهید زیرا می توان پورت 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 استفاده کنید
Cloudflare DNS
Google DNS
Quad9 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}'
خروجی باید شبیه به این باشد
5.200.200.200
217.218.127.127
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
حال باید قوانین فایروال را اضافه کنیم. اگر از 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 غیرفعال کرده اند. برای فعال کردن ارسال 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
مرحله ۲ – مشتری OpenVPN ایجاد کنید:
برای اینکه یک کاربر جدید اضافه کنیم ، قصد داریم یک اسکریپت جدید ایجاد کنیم. این اسکریپت ۲ گزینه دارد:
1- کاربر جدیدی اضافه کنید
2- کاربر موجود را حذف کنید
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 را در اوبونتو یا دبیان نصب کنید.
امیدواریم از این مقاله بهره لازم را برده و برای شما مفید بوده باشد.