PPTP VPN Installation

Automatic: 

  1. Copy script using wget https://raw.githubusercontent.com/saaiful/PPTP-VPN/master/install.sh
  2. Run using sudo bash install.sh
  3. Script will ask for username and password for VPN, set them correctly
  4. Connect the VPN and Enjoy 🙂

https://github.com/saaiful/PPTP-VPN

Manual:

Install PPTP using the following command:

sudo apt-get install pptpd

Edit PPTP Configuration Using the following command:

sudo nano /etc/pptpd.conf

add the following lines

localip 10.0.0.1
remoteip 10.0.0.100-200

Edit PPTP Option to add DNS Server using the following command:

sudo nano /etc/ppp/pptpd-options

Add the following lines to add google public DNS

ms-dns 8.8.8.8
ms-dns 8.8.4.4

Add VPN User by Editing ‘chap-secrets’ using the following command:

sudo nano/etc/ppp/chap-secrets

Formate: username * password *

[username] [service] [password] [ip]

Example:

saiful * 12345678 *

Restart PPTP Service using the following command:

service pptpd restart

You need to enable IP forwarding on your PPTP server in order to make you VPN work (This will allow you to forward packets between public IP and private IPs that you setup with PPTP).Enable IP forwarding by using the following command

sudo nano /etc/sysctl.conf

Set`net.ipv4.ip_forward = 1` in the config file. Run the following command to make changes active

sudo sysctl -p

Apply NAT rule for “iptables” using the following commands:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE && iptables-save
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I INPUT -s 10.0.0.0/8 -i ppp0 -j ACCEPT
iptables --append FORWARD --in-interface eth0 -j ACCEPT

Now all you need is testing your VPN using any PPTP VPN Client.

সফটওয়্যার ডিজাইন প্যাটার্ন-১

সফটওয়্যার ডিজাইন প্যাটার্ন হচ্ছে এক ধরনের সমাধান যা বারবার বিভিন্ন সফটওয়্যার ডিজাইনের ক্ষেত্রে ব্যবহার করা যায়। যদিও এটা কোন সোর্সকোড/কম্পাইল্ড বাইনারি না। এটা মূলত কিভাবে কোন সমস্যার সমাধান কিভাবে করা যায় তার একটা বর্ননা , যা অনেক যায়গায় ব্যবহার করা যায়। ডিজাইন প্যাটার্নগুলো মূলত সফটওয়্যার/সিস্টেম ডিজাইনে প্রচলিত সমস্যাগুলো সমাধানের এক ধরনের স্বীকৃতি পদ্ধতি এবং এদেরকে ‘বেস্ট প্যাকটিস‘ বলা হয়।

এই পোস্টে মূলত পিএইচপি তে বহুল ব্যবহৃত ডিজাইন প্যাটার্ন গুলো নিয়ে আলোচনা করা হয়েচে।

ফ্যাক্টরি প্যাটার্ন

ফ্যাক্টরি প্যাটার্ন একটি বহুল ব্যবহৃত ডিজাইন প্যাটার্ন। এই প্যাটার্নে মূলত একটি ক্লাস ব্যবহারকারীর প্রয়োজনীয় অবজেক্ট তৈরি করে দেয়। নিচের ফ্যাক্টরি প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

উপরের কোডে একটি ফ্যাক্টরি (ক্লাস) ব্যবহার করা হয়েছে ল্যাপটপ অবজেক্ট তৈরি করার জন্য। ফ্যাক্টরি প্যাটার্ন ব্যবহার করলে বেশ কিছু সুবিদা পাওয়া যায়। মনে করা যায় আপনি আপনার Laptop ক্লাসের নাম পরিবর্তন করে Computer করলেন, এক্ষেত্রে পুরো এপ্লিকেশনে যেসকল যায়গায় আপনি সারাসরি Laptop ক্লাস ব্যবহার করেছেন সবগুলো ক্লাসের নাম পরিবর্তন করতে হবে, কিন্তু যদি আপনি যদি ফ্যাক্টরি প্যাটার্ন ব্যবহার করেন সেক্ষেত্রে শুধুমাত্র ফ্যাক্টরি ক্লাসের ভেতরে Laptop ক্লাসের নাম পরিবর্তন করলেই হবে। ফ্যাক্টরি প্যাটার্ন সর্বদা ব্যবহার করার প্রয়োজন পড়ে না।

factory_method_uml_class_diagram

ফ্যাক্টরি প্যাটার্ন এর আরেকটি পরিমার্জিত রুপ হচ্ছে ফাস্যাড প্যাটার্ন।

সিঙ্গেলটোন প্যাটার্ন

সফটওয়্যার ইঞ্জিনিয়ারিং এ সিঙ্গেলটোন প্যাটার্ন হচ্ছে এমন এক ডিজাইন প্যাটার্ন যা কোন ক্লাস থেকে একাধিক ইন্সট্যান্স তৈরি করতে বাধা দেয়, অর্থাৎ একটি ক্লাসের কেবলমাত্র একটি ইন্সট্যান্স-ই থাকবে।

Singleton Pattern
Fig: Singleton Pattern

সাধারণত ওয়েব অপ্লিকেশন ডিজাইন করার সময় এই ডিজাইন প্যাটার্ন ব্যবহার যুকিযুক্ত মনে হয়। নিচের সিঙ্গেলটোন প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

উপরের কোডে সিঙ্গেলটোন প্যাটার্ন ইমপ্লিমেন্ট করে দেখানো হয়েছে। স্টাটিক getInstance() মেথড দিয়ে Singleton ক্লাসের ইন্সট্যান্স তৈরি করা হয়েছে। Singleton ক্লাসে setName(), showName() নামের দুইটি মেথড আছে। উপরের কোডের শেষের অংশে SingletonChild নামে একটি ক্লাস লেখা হয়েছে যা Singleton ক্লাসকে এক্সটেন্ড করে। উদাহরণের কোডে দেখতে পাবেন $singleton এ Singleton এর ইন্সট্যান্স রাখা হয়েছে। এরপর setName() মেথড দিয়ে name অবজেক্টে 'Saiful' সেট করা হয়েছে এবং showName() মেথড দিয়ে name অবজেক্টের ভ্যালু দেখানো হয়েছে। এরপর $child এ SingletonChild  ইন্সট্যান্স কল করা হয়েছে, যা মূলত পূর্বে তৈরিকৃত Singleton ক্লাসের ইন্সট্যান্স রিটার্ন করেছে, যে কারনে ( $child->showName();setName() মেথড কল করায় পুর্বে সংরক্ষিত name অবজেক্টের ভ্যালু দেখিয়েছে, অর্থাৎ নতুন ইন্সট্যান্স তৈরি হয়ন

…চলবে