OpenVPN تي SMB تنظيم جي ريموٽ ڪم جي تنظيم

مسئلو جي ترتيب

آرٽيڪل اوپن سورس پراڊڪٽس تي ملازمن لاءِ ريموٽ رسائي جي تنظيم کي بيان ڪري ٿو ۽ مڪمل طور تي خودمختيار نظام ٺاهڻ لاءِ ٻنهي کي استعمال ڪري سگهجي ٿو، ۽ توسيع لاءِ مفيد ٿيندو جڏهن موجوده تجارتي نظام ۾ لائسنس جي گهٽتائي هجي يا ان جي ڪارڪردگي ڪافي نه هجي.

آرٽيڪل جو مقصد هڪ تنظيم کي ريموٽ رسائي فراهم ڪرڻ لاءِ مڪمل نظام لاڳو ڪرڻ آهي ، جيڪو “10 منٽن ۾ اوپن وي پي اين کي انسٽال ڪرڻ” کان ٿورو وڌيڪ آهي.

نتيجي طور، اسان هڪ سسٽم حاصل ڪنداسين جنهن ۾ سرٽيفڪيٽ ۽ (اختياري طور تي) ڪارپوريٽ فعال ڊائريڪٽري استعمال ڪيو ويندو صارفين جي تصديق ڪرڻ لاء. اهو. اسان کي ٻن تصديق جي عنصرن سان هڪ سسٽم حاصل ڪنداسين - مون وٽ ڇا آهي (سرٽيفڪيٽ) ۽ جيڪو مان ڄاڻان ٿو (پاسورڊ).

هڪ نشاني جيڪا صارف کي ڳنڍڻ جي اجازت ڏني وئي آهي انهن جي رڪنيت آهي myVPNUsr گروپ ۾. سرٽيفڪيٽ اختيار آف لائن استعمال ڪيو ويندو.

حل کي لاڳو ڪرڻ جي قيمت صرف ننڍڙو هارڊويئر وسيلن ۽ سسٽم جي منتظم جي ڪم جو 1 ڪلاڪ آهي.

اسان هڪ ورچوئل مشين استعمال ڪنداسين OpenVPN ۽ Easy-RSA ورزن 3 سان CetntOS 7 تي، جنهن کي مختص ڪيو ويو آهي 100 وي سي پي يو ۽ 4 GiB رام في 4 ڪنيڪشن.

مثال طور، اسان جي تنظيم جو نيٽ ورڪ 172.16.0.0/16 آهي، جنهن ۾ ايڊريس 172.16.19.123 سان VPN سرور سيڪشن 172.16.19.0/24، DNS سرورز 172.16.16.16 ۽ 172.16.17.17 ۽ 172.16.20.0. .23/XNUMX مختص ڪيو ويو آهي VPN گراهڪن لاءِ.

ٻاهران ڳنڍڻ لاءِ، بندرگاهه 1194/udp ذريعي هڪ ڪنيڪشن استعمال ڪيو ويندو آهي، ۽ اسان جي سرور لاءِ DNS ۾ هڪ A-record gw.abc.ru ٺاهيو ويو آهي.

SELinux کي بند ڪرڻ جي سختي سان سفارش نه ڪئي وئي آهي! OpenVPN سيڪيورٽي پاليسين کي غير فعال ڪرڻ کان سواء ڪم ڪري ٿو.

Contents

  1. OS ۽ ايپليڪيشن سافٽ ويئر جي انسٽاليشن
  2. Cryptography ترتيب ڏيڻ
  3. OpenVPN ترتيب ڏيڻ
  4. AD جي تصديق
  5. شروعاتي ۽ تشخيص
  6. سرٽيفڪيٽ جو مسئلو ۽ منسوخي
  7. نيٽورڪ ترتيب
  8. ايندڙ ڇا آهي

OS ۽ ايپليڪيشن سافٽ ويئر جي انسٽاليشن

اسان استعمال ڪريون ٿا CentOS 7.8.2003 تقسيم. اسان کي او ايس کي گھٽ ۾ گھٽ ترتيب ۾ انسٽال ڪرڻ جي ضرورت آھي. اهو استعمال ڪرڻ آسان آهي ڪيڪٽاڳ ۾ نصب ٿيل OS تصوير ۽ ٻين ذريعن کي ڪلون ڪرڻ.

انسٽاليشن کان پوء، نيٽ ورڪ انٽرفيس تي هڪ ايڊريس تفويض ڪرڻ (ٽاسڪ 172.16.19.123 جي شرطن جي مطابق)، اسان او ايس کي اپڊيٽ ڪريون ٿا:

$ sudo yum update -y && reboot

اسان کي پڻ پڪ ڪرڻ جي ضرورت آهي ته وقت جي هم وقت سازي اسان جي مشين تي ڪئي وئي آهي.
ايپليڪيشن سافٽ ويئر انسٽال ڪرڻ لاءِ، توھان کي گھربل آھي Openvpn، openvpn-auth-ldap، easy-rsa ۽ vim پيڪيجز بنيادي ايڊيٽر طور (توھان کي EPEL مخزن جي ضرورت پوندي).

$ sudo yum install epel-release
$ sudo yum install openvpn openvpn-auth-ldap easy-rsa vim

اهو هڪ مجازي مشين لاء مهمان ايجنٽ انسٽال ڪرڻ لاء مفيد آهي:

$ sudo yum install open-vm-tools

VMware ESXi ميزبانن لاءِ، يا oVirt لاءِ

$ sudo yum install ovirt-guest-agent

Cryptography ترتيب ڏيڻ

آسان-rsa ڊاريڪٽري ڏانھن وڃو:

$ cd /usr/share/easy-rsa/3/

هڪ متغير فائل ٺاهيو:

$ sudo vim vars

هيٺ ڏنل مواد:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="MyRegion"
export KEY_CITY="MyCity"
export KEY_ORG="ABC LLC"
export KEY_EMAIL="[email protected]"
export KEY_CN="allUsers"
export KEY_OU="allUsers"
export KEY_NAME="gw.abc.ru"
export KEY_ALTNAMES="abc-openvpn-server"
export EASYRSA_CERT_EXPIRE=3652

مشروط تنظيم ABC LLC جا پيرا ميٽر هتي بيان ڪيا ويا آهن؛ توهان انهن کي درست ڪري سگهو ٿا حقيقي وارن ڏانهن يا انهن کي مثال مان ڇڏي ڏيو. پيرا ميٽرز ۾ سڀ کان اهم شيء آخري لائن آهي، جيڪو ڏينهن ۾ سرٽيفڪيٽ جي صحيح مدت کي طئي ڪري ٿو. مثال استعمال ڪري ٿو قدر 10 سال (365*10+2 ليپ سال). صارف سرٽيفڪيٽ جاري ٿيڻ کان اڳ ھن قدر کي ترتيب ڏيڻ جي ضرورت پوندي.

اڳيون، اسان هڪ خودمختيار سرٽيفڪيشن اٿارٽي ترتيب ڏيون ٿا.

سيٽ اپ ۾ متغير برآمد ڪرڻ، CA جي شروعات ڪرڻ، CA روٽ ڪي ۽ سرٽيفڪيٽ جاري ڪرڻ، Diffie-Hellman ڪي، TLS ڪي، ۽ سرور ڪي ۽ سرٽيفڪيٽ شامل آهن. CA چاٻي کي احتياط سان محفوظ ڪيو وڃي ۽ ڳجهو رکيو وڃي! سڀ سوالن جا پيرا ميٽر ڊفالٽ طور ڇڏي سگھجن ٿا.

cd /usr/share/easy-rsa/3/
. ./vars
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req myvpngw nopass
./easyrsa sign-req server myvpngw
./easyrsa gen-crl
openvpn --genkey --secret pki/ta.key

هي cryptographic ميڪانيزم کي ترتيب ڏيڻ جو بنيادي حصو مڪمل ڪري ٿو.

OpenVPN ترتيب ڏيڻ

OpenVPN ڊاريڪٽري ڏانھن وڃو، سروس ڊاريڪٽري ٺاھيو ۽ ھڪڙي لنڪ شامل ڪريو easy-rsa:

cd /etc/openvpn/
mkdir /var/log/openvpn/ /etc/openvpn/ccd /usr/share/easy-rsa/3/client
ln -s /usr/share/easy-rsa/3/pki/ /etc/openvpn/

مکيه OpenVPN ٺاھ جوڙ فائل ٺاھيو:

$ sudo vim server.conf

هيٺين مواد

port 1194
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/myvpngw.crt
key /etc/openvpn/pki/private/myvpngw.key
crl-verify /etc/openvpn/pki/crl.pem
dh /etc/openvpn/pki/dh.pem
server 172.16.20.0 255.255.254.0
ifconfig-pool-persist ipp.txt
push "route 172.16.0.0 255.255.255.0"
push "route 172.17.0.0 255.255.255.0"
client-config-dir ccd
push "dhcp-option DNS 172.16.16.16"
push "dhcp-option DNS 172.16.17.17"
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append  /var/log/openvpn/openvpn.log
verb 3
explicit-exit-notify 1
username-as-common-name
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-ldap.so /etc/openvpn/ldap.conf

پيراگراف تي ڪجهه نوٽس:

  • جيڪڏهن سرٽيفڪيٽ جاري ڪرڻ وقت هڪ مختلف نالو بيان ڪيو ويو آهي، ان کي ظاهر ڪريو؛
  • پتا جي تلاء کي بيان ڪريو توهان جي ڪمن جي مطابق *؛
  • ٿي سگهي ٿو هڪ يا وڌيڪ رستا ۽ DNS سرور؛
  • AD** ۾ تصديق کي لاڳو ڪرڻ لاءِ آخري 2 لائينون گهربل آھن.

*مثال ۾ چونڊيل پتي جي حد 127 ڪلائنٽ کي هڪ ئي وقت ڳنڍڻ جي اجازت ڏيندو، ڇاڪاڻ ته /23 نيٽ ورڪ چونڊيو ويو آهي، ۽ OpenVPN /30 ماسڪ استعمال ڪندي هر ڪلائنٽ لاءِ سب نيٽ ٺاهي ٿو.
جيڪڏهن خاص طور تي ضروري هجي ته، بندرگاهن ۽ پروٽوڪول کي تبديل ڪري سگهجي ٿو، جڏهن ته، اهو ذهن ۾ رکڻ گهرجي ته پورٽ نمبر تبديل ڪرڻ سان SELinux کي ترتيب ڏيڻ جي ضرورت پوندي، ۽ tcp پروٽوڪول کي استعمال ڪندي اوور هيڊ وڌائيندو، ڇاڪاڻ ته TCP پيڪٽ جي ترسيل ڪنٽرول اڳ ۾ ئي سرنگ ۾ ڍڪيل پيڪيٽس جي سطح تي ڪيو ويو آهي.

**جيڪڏهن AD ۾ تصديق جي ضرورت نه آهي، انهن تي تبصرو ڪريو، ايندڙ سيڪشن کي ڇڏي ڏيو، ۽ ٽيمپليٽ ۾ auth-user-pass لائن کي هٽايو.

AD جي تصديق

ٻئي عنصر کي سپورٽ ڪرڻ لاءِ، اسان AD ۾ اڪائونٽ جي تصديق استعمال ڪنداسين.

اسان کي ڊومين ۾ هڪ اڪائونٽ جي ضرورت آهي هڪ عام صارف ۽ هڪ گروپ جي حقن سان، رڪنيت جنهن ۾ ڳنڍڻ جي صلاحيت جو تعين ڪندو.

ٺاھ جوڙ فائيل ٺاھيو:

/etc/openvpn/ldap.conf

هيٺين مواد

<LDAP>
        URL             "ldap://ldap.abc.ru"
        BindDN          "CN=bindUsr,CN=Users,DC=abc,DC=ru"
        Password        b1ndP@SS
        Timeout         15
        TLSEnable       no
        FollowReferrals yes
</LDAP>
<Authorization>
        BaseDN          "OU=allUsr,DC=abc,DC=ru"
        SearchFilter    "(sAMAccountName=%u)"
        RequireGroup    true
        <Group>
                BaseDN          "OU=myGrp,DC=abc,DC=ru"
                SearchFilter    "(cn=myVPNUsr)"
                MemberAttribute "member"
        </Group>
</Authorization>

مکيه سيٽنگون:

  • URL "ldap://ldap.abc.ru" - ڊومين ڪنٽرولر ايڊريس؛
  • BindDN “CN=bindUsr,CN=Users,DC=abc,DC=ru” - LDAP کي پابند ڪرڻ لاءِ معياري نالو (UZ - bindUsr abc.ru/Users ڪنٽينر ۾)؛
  • پاسورڊ b1ndP@SS — پابند ڪرڻ لاءِ يوزر پاسورڊ؛
  • BaseDN “OU=allUsr,DC=abc,DC=ru” — رستو جنهن کان صارف جي ڳولا شروع ڪرڻ لاءِ؛
  • BaseDN “OU=myGrp,DC=abc,DC=ru” – اجازت ڏيڻ واري گروپ جو ڪنٽينر (گروپ myVPNUsr ڪنٽينر abc.rumyGrp ۾)؛
  • ڳولا فلٽر "(cn=myVPNUsr)" اجازت ڏيڻ واري گروپ جو نالو آهي.

شروعاتي ۽ تشخيص

ھاڻي اسان ڪوشش ڪري سگھون ٿا چالو ڪرڻ ۽ اسان جي سرور کي شروع ڪريو:

$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]

شروعاتي جاچ:

systemctl status [email protected]
journalctl -xe
cat /var/log/messages
cat /var/log/openvpn/*log

سرٽيفڪيٽ جو مسئلو ۽ منسوخي

ڇاڪاڻ ته سرٽيفڪيٽن کان علاوه، توهان کي چابيون ۽ ٻيون سيٽنگون گهرجن؛ اهو تمام آسان آهي ته هي سڀ هڪ پروفائل فائل ۾ لپي. اها فائل پوءِ صارف ڏانهن منتقل ڪئي وئي آهي ۽ پروفائل درآمد ڪئي وئي آهي OpenVPN ڪلائنٽ تي. هن کي ڪرڻ لاء، اسان هڪ سيٽنگ ٽيمپليٽ ۽ هڪ اسڪرپٽ ٺاهينداسين جيڪو پروفائل ٺاهي ٿو.

توھان کي پروفائل ۾ روٽ سرٽيفڪيٽ (ca.crt) ۽ TLS ڪي (ta.key) فائلن جو مواد شامل ڪرڻ جي ضرورت آھي.

صارف سرٽيفڪيٽ جاري ڪرڻ کان اڳ سرٽيفڪيٽن لاءِ گهربل صحيح مدت مقرر ڪرڻ نه وساريو parameters فائل ۾. توهان کي ان کي تمام ڊگهو نه ڪرڻ گهرجي؛ مان سفارش ڪريان ٿو ته پاڻ کي وڌ ۾ وڌ 180 ڏينهن تائين محدود ڪريو.

vim /usr/share/easy-rsa/3/vars

...
export EASYRSA_CERT_EXPIRE=180

vim /usr/share/easy-rsa/3/client/template.ovpn

client
dev tun
proto udp
remote gw.abc.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-CBC
verb 3
auth-user-pass

<ca>
-----BEGIN CERTIFICATE-----
PUT YOUR CA CERT (ca.crt) HERE
-----END CERTIFICATE-----
</ca>

key-direction 1
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
PUT YOUR TA KEY (ta.key) HERE
-----END OpenVPN Static key V1-----
</tls-auth>

نوٽ:

  • پودا پنهنجي... مواد ۾ تبديل ڪريو پنهنجي سرٽيفڪيٽ؛
  • ريموٽ هدايت ۾، توهان جي گيٽ وي جو نالو/پتا بيان ڪريو؛
  • auth-user-pass directive اضافي خارجي تصديق لاءِ استعمال ڪيو ويندو آهي.

هوم ڊاريڪٽري ۾ (يا ٻي آسان جڳهه) اسان هڪ اسڪرپٽ ٺاهي هڪ سرٽيفڪيٽ جي درخواست ڪرڻ ۽ پروفائل ٺاهڻ لاءِ:

vim ~/make.profile.sh

#!/bin/bash

if [ -z "$1" ] ; then
 echo Missing mandatory client name. Usage: $0 vpn-username
 exit 1
fi

#Set variables
basepath=/usr/share/easy-rsa/3
clntpath=$basepath/client
privpath=$basepath/pki/private
certpath=$basepath/pki/issued
profile=$clntpath/$1.ovpn

#Get current year and lowercase client name
year=`date +%F`
client=${1,,}
echo Processing $year year cert for user/device $client

cd $basepath

if [  -f client/$client* ]; then
    echo "*** ERROR! ***"
    echo "Certificate $client already issued!"
    echo "*** ERROR! ***"
    exit 1
fi

. ./vars
./easyrsa --batch --req-cn=$client gen-req $client nopass
./easyrsa --batch sign-req client $client

#Make profile
cp $clntpath/template.ovpn $profile

echo "<key>" >> $profile
cat $privpath/$1.key >> $profile
echo "</key>" >> $profile

echo -e "n" >> $profile
openssl x509 -in $certpath/$1.crt -out $basepath/$1.crt

echo "<cert>" >> $profile
cat $basepath/$1.crt >> $profile
echo "</cert>" >> $profile
echo -e "n" >> $profile

#remove tmp file
rm -f $basepath/$1.crt

echo Complete. See $profile file.

cd ~

فائل کي قابل عمل بڻائڻ:

chmod a+x ~/make.profile.sh

۽ اسان اسان جي پهرين سند جاري ڪري سگهون ٿا.

~/make.profile.sh my-first-user

راء

سرٽيفڪيٽ جي سمجھوتي جي صورت ۾ (نقصان، چوري)، هن سرٽيفڪيٽ کي رد ڪرڻ ضروري آهي:

cd /usr/share/easy-rsa/3/
./easyrsa revoke my-first-user
./easyrsa gen-crl

ڏسو جاري ڪيل ۽ رد ٿيل سرٽيفڪيٽ

جاري ڪيل ۽ رد ٿيل سرٽيفڪيٽن کي ڏسڻ لاءِ، بس ڏسو انڊيڪس فائل:

cd /usr/share/easy-rsa/3/
cat pki/index.txt

وضاحتون:

  • پهرين لائن آهي سرور سرٽيفڪيٽ؛
  • پهريون ڪردار
    • V (درست) - صحيح؛
    • آر (رد ٿيل) - ياد ڪيو ويو.

نيٽورڪ ترتيب

آخري قدم آهن ٽرانسميشن نيٽ ورڪ کي ترتيب ڏيڻ - روٽنگ ۽ فائر والز.

مقامي فائر وال ۾ ڪنيڪشن جي اجازت ڏيو:

$ sudo firewall-cmd --add-service=openvpn
$ sudo firewall-cmd --add-service=openvpn --permanent

اڳيون، IP ٽرئفڪ روٽنگ کي فعال ڪريو:

$ sudo sysctl net.ipv4.ip_forward=1
$ sudo echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/50-sysctl.conf

ڪارپوريٽ ماحول ۾، ذيلي نيٽ ورڪ ٿيڻ جو امڪان آهي ۽ اسان کي روٽر کي ٻڌائڻ جي ضرورت آهي ته اسان جي وي پي اين ڪلائنٽ لاءِ مقرر ڪيل پيڪيٽ ڪيئن موڪليا وڃن. ڪمانڊ لائن تي اسان ڪمانڊ کي طريقي سان عمل ڪريون ٿا (استعمال ٿيل سامان تي منحصر):

# ip route 172.16.20.0 255.255.254.0 172.16.19.123

۽ ترتيب محفوظ ڪريو.

ان کان علاوه، بارڊر روٽر انٽرفيس تي جتي ٻاهرين ايڊريس gw.abc.ru ڏني وئي آهي، اهو ضروري آهي ته udp/1194 پيڪٽس جي گذرڻ جي اجازت ڏني وڃي.

صورت ۾ تنظيم کي سخت حفاظتي ضابطا آهن، هڪ فائر وال پڻ اسان جي وي پي اين سرور تي ترتيب ڏيڻ گهرجي. منهنجي خيال ۾، iptables FORWARD زنجيرن کي ترتيب ڏيڻ سان سڀ کان وڏي لچڪ فراهم ڪئي وئي آهي، جيتوڻيڪ انهن کي ترتيب ڏيڻ گهٽ آسان آهي. ان کي ترتيب ڏيڻ بابت ٿورو وڌيڪ. هن کي ڪرڻ لاء، "سڌي قاعدن" کي استعمال ڪرڻ تمام آسان آهي - سڌو ضابطو، فائل ۾ ذخيرو ٿيل /etc/firewalld/direct.xml. ضابطن جي موجوده تشڪيل هن ريت ملي سگهي ٿي:

$ sudo firewall-cmd --direct --get-all-rule

فائل تبديل ڪرڻ کان اڳ، ان جي بيڪ اپ ڪاپي ٺاهيو:

cp /etc/firewalld/direct.xml /etc/firewalld/direct.xml.`date +%F.%T`.bak

فائل جا تقريباً مواد هي آهن:

<?xml version="1.0" encoding="utf-8"?>
<direct>
 <!--Common Remote Services-->
  <!--DNS-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o ens192 -p udp --dport 53 -j ACCEPT</rule>
  <!--web-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.200 --dport 80 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p tcp -d 172.16.19.201 --dport 443 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--Some Other Systems-->
    <rule priority="0" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -p udp -d 172.16.19.100 --dport 7000 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT</rule>
  <!--just logging-->
    <rule priority="1" table="filter" ipv="ipv4" chain="FORWARD">-i tun0 -o eth0 -j LOG --log-prefix 'forward_fw '</rule>
</direct>

وضاحت

بنيادي طور تي اهي باقاعده iptables ضابطا آهن، فائر والڊ جي اچڻ کان پوءِ مختلف طرح سان پيڪيج ٿيل آهن.

ڊفالٽ سيٽنگن سان منزل جو انٽرفيس tun0 آهي، ۽ سرنگ لاءِ خارجي انٽرفيس مختلف ٿي سگهي ٿو، مثال طور، ens192، استعمال ٿيل پليٽ فارم تي منحصر آهي.

آخري لڪير آهي لاگنگ ڪرڻ لاءِ ڊاپ ٿيل پيڪٽس. ڪم ڪرڻ لاءِ لاگنگ ڪرڻ لاءِ، توهان کي فائر والڊ ترتيب ۾ ڊيبگ سطح کي تبديل ڪرڻ جي ضرورت آهي:

vim /etc/sysconfig/firewalld
FIREWALLD_ARGS=--debug=2

سيٽنگون لاڳو ڪرڻ عام فائر والڊ حڪم آهي سيٽنگون ٻيهر پڙهڻ لاءِ:

$ sudo firewall-cmd --reload

توھان ڏسي سگھو ٿا ھيٺ ڏنل پيڪيٽ ھن طرح:

grep forward_fw /var/log/messages

ايندڙ ڇا آهي

هي سيٽ اپ مڪمل ڪري ٿو!

باقي اهو آهي ته ڪلائنٽ سافٽ ويئر انسٽال ڪرڻ لاءِ ڪلائنٽ سائڊ تي، پروفائيل درآمد ڪريو ۽ ڳنڍيو. ونڊوز آپريٽنگ سسٽم لاء، تقسيم کٽ تي واقع آهي ڊولپر ويب سائيٽ.

آخرڪار، اسان اسان جي نئين سرور کي مانيٽرنگ ۽ آرڪائيونگ سسٽم سان ڳنڍيندا آهيون، ۽ باقاعده اپڊيٽ کي انسٽال ڪرڻ نه وساريو.

مستحڪم ڪنيڪشن!

جو ذريعو: www.habr.com

تبصرو شامل ڪريو