ভার্চুয়াল প্রাইভেট নেটওয়ার্ক (VPN) সমাধান তৈরি করার জন্য Android ডেভেলপারদের API প্রদান করে। এই নির্দেশিকাটি পড়ার পরে, আপনি Android-পরিচালিত ডিভাইসের জন্য কীভাবে নিজের VPN ক্লায়েন্ট ডেভেলপ ও পরীক্ষা করতে হয় তা জানতে পারবেন।
এক নজরে
VPN, নেটওয়ার্কে ফিজিক্যালি কানেক্ট করা নেই এমন ডিভাইসকে নিরাপদে নেটওয়ার্ক অ্যাক্সেস করতে দেয়।
Android-এ একটি বিল্ট-ইন (PPTP এবং L2TP/IPSec) VPN ক্লায়েন্ট থাকে, যেটিকে কখনও কখনও লিগ্যাসি VPN বলা হয়। Android 4.0 (API লেভেল ১৪) API চালু করেছে যাতে অ্যাপ ডেভেলপাররা তাদের নিজস্ব VPN সমাধান প্রদান করতে পারে। আপনি নিজের VPN সলিউশনকে একটি অ্যাপে প্যাকেজ করেন যা লোকজন ডিভাইসে ইনস্টল করেন। ডেভেলপাররা সাধারণত নিম্নলিখিত কারণগুলির মধ্যে কোনও একটির জন্য VPN অ্যাপ তৈরি করেন:
- বিল্ট-ইন ক্লায়েন্ট কাজ করে না এমন VPN প্রোটোকল অফার করতে।
- জটিল কনফিগারেশন ছাড়াই লোকজনকে VPN পরিষেবায় কানেক্ট করতে সাহায্য করা।
এই নির্দেশিকার বাকি অংশে কীভাবে VPN অ্যাপ (এর মধ্যে সবসময় চালু থাকা ও অ্যাপ-পিছু VPN অন্তর্ভুক্ত) ডেভেলপ করতে হয় তা ব্যাখ্যা করা হয়েছে এবং এতে বিল্ট-ইন VPN ক্লায়েন্ট সম্পর্কে বলা নেই।
ব্যবহারকারীর অভিজ্ঞতা
Android, আপনার VPN সলিউশন কনফিগার, শুরু ও বন্ধ করতে সাহায্য করার জন্য একটি ইউজার ইন্টারফেস (UI) প্রদান করে। এছাড়াও, সিস্টেম UI, ডিভাইস ব্যবহারকারী ব্যক্তিকে চালু থাকা VPN কানেকশন সম্পর্কে সচেতন করে। VPN কানেকশনের জন্য Android নিম্নলিখিত UI কম্পোনেন্ট দেখায়:
- কোনও VPN অ্যাপ প্রথমবার চালু হওয়ার আগে, সিস্টেম একটি কানেকশন অনুরোধ ডায়ালগ দেখায়। এই ডায়ালগটি ডিভাইস ব্যবহারকারী ব্যক্তিকে প্রম্পট করে যাতে তিনি VPN-কে বিশ্বাস করেন এবং অনুরোধ গ্রহণ করেন।
- VPN সেটিংস স্ক্রিন (সেটিংস > নেটওয়ার্ক ও ইন্টারনেট > VPN) সেইসব VPN অ্যাপ দেখায় যেখানে কোনও ব্যক্তি কানেকশন অনুরোধ গ্রহণ করেছেন। সিস্টেম বিকল্প কনফিগার করতে বা VPN ভুলে যেতে একটি বোতাম আছে।
- কানেকশন অ্যাক্টিভ থাকলে, 'দ্রুত সেটিংস' ট্রেতে একটি তথ্য প্যানেল দেখানো হয়। লেবেলে ট্যাপ করলে, আরও তথ্য ও সেটিংসের লিঙ্ক সহ একটি ডায়ালগ দেখানো হয়।
- স্ট্যাটাস বারে একটি VPN (কী) আইকন থাকে যা কানেকশন চালু আছে কিনা তা দেখায়।
এছাড়াও, আপনার অ্যাপকে একটি UI প্রদান করতে হবে যাতে ডিভাইস ব্যবহারকারী ব্যক্তি আপনার পরিষেবার বিকল্পগুলি কনফিগার করতে পারেন। যেমন, আপনার সমাধানের জন্য অ্যাকাউন্ট যাচাইকরণ সেটিংস ক্যাপচার করার প্রয়োজন হতে পারে। অ্যাপে নিম্নলিখিত UI দেখাতে হবে:
- ম্যানুয়ালি কানেকশন চালু ও বন্ধ করার কন্ট্রোল। সব সময় চালু থাকা VPN প্রয়োজন হলে কানেক্ট করতে পারে, তবে প্রথমবার আপনার VPN ব্যবহার করার সময় লোকজনকে কানেকশন কনফিগার করার অনুমতি দিন।
- পরিষেবা চালু থাকলে বাতিল করা যাবে না এমন বিজ্ঞপ্তি। বিজ্ঞপ্তিতে কানেকশন স্ট্যাটাস দেখানো হতে পারে অথবা নেটওয়ার্ক স্ট্যাটিস্টিক্সের মতো আরও তথ্য দেওয়া হতে পারে। বিজ্ঞপ্তিতে ট্যাপ করলে আপনার অ্যাপটি ফোরগ্রাউন্ডে চলে আসে। পরিষেবা ইনঅ্যাক্টিভ হয়ে গেলে বিজ্ঞপ্তি সরিয়ে দিন।
ভিপিএন পরিষেবা
আপনার অ্যাপ কোনও ব্যবহারকারীর (বা অফিস
প্রোফাইল) সিস্টেম নেটওয়ার্কিংকে VPN গেটওয়ের সাথে কানেক্ট করে। প্রত্যেক ব্যবহারকারী (বা অফিস প্রোফাইল) আলাদা আলাদা VPN অ্যাপ চালাতে পারেন। আপনি একটি VPN পরিষেবা তৈরি করেন যা সিস্টেম আপনার VPN চালু ও বন্ধ করতে এবং কানেকশনের স্ট্যাটাস ট্র্যাক করতে ব্যবহার করে। আপনার VPN পরিষেবা
VpnService থেকে ইনহেরিট করে।
এছাড়াও, এই পরিষেবা VPN গেটওয়ে কানেকশন ও সেগুলির লোকাল ডিভাইস ইন্টারফেসের জন্য
কন্টেনার হিসেবে কাজ করে। আপনার পরিষেবা ইনস্ট্যান্স নতুন লোকাল ইন্টারফেস তৈরি করতে
VpnService.Builder পদ্ধতি কল করে।
VpnService কীভাবে Android
নেটওয়ার্কিংকে VPN গেটওয়ের সাথে কানেক্ট করেVPN গেটওয়ের সাথে ডিভাইস কানেক্ট করতে আপনার অ্যাপ নিম্নলিখিত ডেটা ট্রান্সফার করে:
- লোকাল ইন্টারফেসের ফাইল ডেসক্রিপটর থেকে আউটগোয়িং IP প্যাকেট পড়ে, সেগুলি এনক্রিপ্ট করে এবং VPN গেটওয়েতে পাঠায়।
- ইনকামিং প্যাকেট (ভিপিএন গেটওয়ে থেকে পাওয়া ও ডিক্রিপ্ট করা) লোকাল ইন্টারফেসের ফাইল ডেসক্রিপটরে লেখে।
প্রতিটি ব্যবহারকারী বা প্রোফাইলের জন্য শুধুমাত্র একটি অ্যাক্টিভ পরিষেবা থাকে। নতুন পরিষেবা শুরু করলে, আগে থেকে চালু থাকা পরিষেবা অটোমেটিক বন্ধ হয়ে যায়।
পরিষেবা যোগ করুন
আপনার অ্যাপে VPN পরিষেবা যোগ করতে, VpnService থেকে ইনহেরিট করে একটি Android পরিষেবা তৈরি করুন। আপনার অ্যাপের ম্যানিফেস্ট ফাইলে VPN পরিষেবা ঘোষণা করুন
এবং নিম্নলিখিত বিষয়গুলি যোগ করুন:
BIND_VPN_SERVICEঅনুমতি দিয়ে পরিষেবা সুরক্ষিত করুন যাতে শুধুমাত্র সিস্টেম আপনার পরিষেবার সাথে বাইন্ড করতে পারে।"android.net.VpnService"ইনটেন্ট ফিল্টারের মাধ্যমে পরিষেবাটি বিজ্ঞাপন করুন যাতে সিস্টেম আপনার পরিষেবা খুঁজে পেতে পারে।
আপনার অ্যাপ ম্যানিফেস্ট ফাইলে কীভাবে পরিষেবা ঘোষণা করতে পারেন তা এই উদাহরণে দেখানো হয়েছে:
<service android:name=".MyVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
</service>
এখন আপনার অ্যাপ পরিষেবা ঘোষণা করে, সিস্টেম অটোমেটিক শুরু করতে পারে এবং প্রয়োজন হলে আপনার অ্যাপের VPN পরিষেবা বন্ধ করতে পারে। যেমন, সবসময়-চালু VPN চালু থাকলে, সিস্টেম আপনার পরিষেবা কন্ট্রোল করে।
একটি পরিষেবা তৈরি করুন
ব্যবহারকারীর বর্তমান VPN পরিষেবা হিসেবে অ্যাপকে প্রস্তুত করতে, VpnService.prepare() কল করুন। ডিভাইস ব্যবহারকারী ব্যক্তি যদি আপনার অ্যাপকে আগে থেকে অনুমতি না দিয়ে থাকেন, তাহলে পদ্ধতিটি একটি অ্যাক্টিভিটি ইনটেন্ট রিটার্ন করে।
অনুমতি চায় এমন সিস্টেম অ্যাক্টিভিটি শুরু করতে আপনি এই ইনটেন্ট ব্যবহার করেন। সিস্টেম
ক্যামেরা বা পরিচিতি অ্যাক্সেসের মতো অন্যান্য অনুমতির ডায়ালগের মতো একটি ডায়ালগ দেখায়।
আপনার অ্যাপ আগেই তৈরি করা হয়ে থাকলে, মেথডটি
null রিটার্ন করে।
শুধুমাত্র একটি অ্যাপই বর্তমান প্রস্তুত VPN পরিষেবা হতে পারে। সবসময় কল করুন
VpnService.prepare() কারণ আপনার অ্যাপ শেষবার মেথড কল করার পর থেকে কোনও ব্যক্তি VPN পরিষেবা হিসেবে অন্য কোনও
অ্যাপ সেট করে থাকতে পারেন। আরও জানতে, পরিষেবার লাইফসাইকেল বিভাগ দেখুন।
পরিষেবা কানেক্ট করুন
পরিষেবা চালু হয়ে গেলে, আপনি নতুন লোকাল ইন্টারফেস তৈরি করতে পারবেন যা VPN গেটওয়ের সাথে কানেক্ট করা থাকে। অনুমতির জন্য অনুরোধ করতে এবং VPN গেটওয়েতে আপনার পরিষেবার সাথে কানেক্ট করতে, আপনাকে নিম্নলিখিত ক্রম অনুযায়ী ধাপগুলি সম্পূর্ণ করতে হবে:
- অনুমতি চাইতে
VpnService.prepare()নম্বরে কল করুন (প্রয়োজন হলে)। - সিস্টেম VPN-এর বাইরে আপনার অ্যাপের টানেল সকেট রাখতে
এবং সার্কুলার কানেকশন এড়াতে
VpnService.protect()কল করুন। - আপনার অ্যাপের টানেল
সকেটকে VPN গেটওয়ের সাথে কানেক্ট করতে
DatagramSocket.connect()নম্বরে কল করুন। - VPN ট্রাফিকের জন্য ডিভাইসে নতুন লোকাল
TUN ইন্টারফেস কনফিগার করতে
VpnService.Builderমেথড কল করুন। VpnService.Builder.establish()কল করুন যাতে সিস্টেম স্থানীয় TUN ইন্টারফেস সেট-আপ করে এবং ইন্টারফেসের মাধ্যমে ট্রাফিক রাউট করা শুরু করে।
হ্যান্ডশেকিংয়ের সময় VPN গেটওয়ে সাধারণত স্থানীয় TUN ইন্টারফেসের জন্য সেটিংস সাজেস্ট করে। আপনার অ্যাপ VpnService.Builder পদ্ধতি কল করে যাতে
নিম্নলিখিত স্যাম্পেলে দেখানো পরিষেবা কনফিগার করা যায়:
Kotlin
// Configure a new interface from our VpnService instance. This must be done // from inside a VpnService. val builder = Builder() // Create a local TUN interface using predetermined addresses. In your app, // you typically use values returned from the VPN gateway during handshaking. val localTunnel = builder .addAddress("192.168.2.2", 24) .addRoute("0.0.0.0", 0) .addDnsServer("192.168.1.1") .establish()
জাভা
// Configure a new interface from our VpnService instance. This must be done // from inside a VpnService. VpnService.Builder builder = new VpnService.Builder(); // Create a local TUN interface using predetermined addresses. In your app, // you typically use values returned from the VPN gateway during handshaking. ParcelFileDescriptor localTunnel = builder .addAddress("192.168.2.2", 24) .addRoute("0.0.0.0", 0) .addDnsServer("192.168.1.1") .establish();
অ্যাপ-প্রতি VPN বিভাগে দেওয়া উদাহরণে আরও বিকল্প সহ IPv6 কনফিগারেশন দেখানো হয়েছে। নতুন ইন্টারফেস তৈরি করার আগে আপনাকে নিম্নলিখিত VpnService.Builder ভ্যালু
যোগ করতে হবে:
addAddress()- সিস্টেম লোকাল TUN ইন্টারফেস অ্যাড্রেস হিসেবে অ্যাসাইন করে এমন সাবনেট মাস্কের সাথে কমপক্ষে একটি IPv4 বা IPv6 অ্যাড্রেস যোগ করুন। হ্যান্ডশেকিংয়ের সময় আপনার অ্যাপ সাধারণত VPN গেটওয়ে থেকে IP অ্যাড্রেস ও সাবনেট মাস্ক পায়।
addRoute()- আপনি যদি চান যে সিস্টেম VPN ইন্টারফেসের মাধ্যমে ট্রাফিক পাঠাক, তাহলে অন্তত একটি রুট যোগ করুন। গন্তব্যের ঠিকানা অনুযায়ী রুট ফিল্টার করা হয়। সব ট্রাফিক গ্রহণ করতে,
0.0.0.0/0বা::/0-এর মতো ওপেন রুট সেট করুন।
establish() পদ্ধতি একটি
ParcelFileDescriptor ইনস্ট্যান্স রিটার্ন করে যা আপনার অ্যাপ ইন্টারফেসের বাফারে এবং থেকে প্যাকেট পড়তে এবং লিখতে ব্যবহার করে। আপনার অ্যাপ প্রস্তুত না থাকলে বা কেউ অনুমতি প্রত্যাহার করলে
establish()
পদ্ধতি null রিটার্ন করে।
পরিষেবার লাইফসাইকেল
আপনার অ্যাপের উচিত সিস্টেমের বেছে নেওয়া VPN এবং যেকোনও অ্যাক্টিভ কানেকশনের স্ট্যাটাস ট্র্যাক করা। ডিভাইস ব্যবহারকারী ব্যক্তিকে যেকোনও পরিবর্তন সম্পর্কে অবগত রাখতে আপনার অ্যাপের ইউজার ইন্টারফেস (UI) আপডেট করুন।
পরিষেবা শুরু করা
নিচের এই পদ্ধতিগুলি অনুসরণ করে আপনার VPN পরিষেবা চালু করা যেতে পারে:
- আপনার অ্যাপ পরিষেবা শুরু করে—সাধারণত কোনও ব্যক্তি কানেক্ট বোতামে ট্যাপ করার কারণে।
- সবসময়-চালু VPN চালু থাকার কারণে সিস্টেম পরিষেবা চালু করে।
আপনার অ্যাপ startService()-এ ইনটেন্ট পাস করার মাধ্যমে VPN পরিষেবা চালু করে। আরও জানতে, পরিষেবা
শুরু করা নিবন্ধটি পড়ুন।
সিস্টেমটি ব্যাকগ্রাউন্ডে আপনার পরিষেবা শুরু করে
onStartCommand() কল করার মাধ্যমে। তবে, Android 8.0 (API লেভেল ২৬) বা তার পরবর্তী যেকোনও ভার্সনে
ব্যাকগ্রাউন্ড অ্যাপের উপর বিধিনিষেধ আরোপ করে। আপনি এইসব
API লেভেলে কাজ করলে, আপনাকে
Service.startForeground() কল করে আপনার পরিষেবাকে ফোরগ্রাউন্ডে নিয়ে যেতে হবে। আরও জানতে, ফোরগ্রাউন্ডে
কোনও পরিষেবা রান করা নিবন্ধটি পড়ুন।
পরিষেবা বন্ধ করা
ডিভাইস ব্যবহারকারী কোনও ব্যক্তি আপনার অ্যাপের UI ব্যবহার করে আপনার পরিষেবা বন্ধ করতে পারবেন। শুধু কানেকশন বন্ধ করার পরিবর্তে পরিষেবা বন্ধ করুন। এছাড়াও, সিস্টেম চালু থাকা কানেকশন বন্ধ করে দেয়, যদি ডিভাইস ব্যবহারকারী সেটিংস অ্যাপের VPN স্ক্রিনে নিম্নলিখিত কাজগুলি করেন:
- VPN অ্যাপ ডিসকানেক্ট করে বা মুছে দেয়
- অ্যাক্টিভ কানেকশনের জন্য সবসময়-চালু VPN বন্ধ করে দেয়
সিস্টেম আপনার পরিষেবার onRevoke() মেথড কল করে, তবে এই কল
মূল থ্রেডে নাও হতে পারে। সিস্টেম এই পদ্ধতিতে কল করলে, একটি
বিকল্প নেটওয়ার্ক ইন্টারফেস আগে থেকেই ট্রাফিক রাউটিং করছে। আপনি নিম্নলিখিত রিসোর্স
নিরাপদে সরিয়ে দিতে পারেন:
-
DatagramSocket.close()কল করে VPN গেটওয়ের সাথে সুরক্ষিত টানেল সকেট বন্ধ করুন। -
ParcelFileDescriptor.close()কল করে পার্সেল ফাইল ডেসক্রিপ্টর বন্ধ করুন (আপনাকে এটি ড্রেন করতে হবে না)।
VPN সব সময় চালু রাখুন
ডিভাইস বুট করার সময় Android VPN পরিষেবা চালু করতে পারে এবং ডিভাইস চালু থাকা কালীন এটি চালু রাখতে পারে। এই ফিচারকে সবসময়-চালু VPN বলা হয় এবং এটি Android 7.0 (API লেভেল ২৪) বা তার পরবর্তী যেকোনও ভার্সনে উপলভ্য। Android পরিষেবার লাইফসাইকেল ম্যানেজ করলেও, VPN-গেটওয়ে কানেকশনের জন্য আপনার VPN পরিষেবাই দায়ী। এছাড়াও, 'সবসময় চালু থাকা VPN' সেইসব কানেকশন ব্লক করতে পারে যেগুলি VPN ব্যবহার করে না।
ব্যবহারকারীর অভিজ্ঞতা
Android 8.0 বা তার পরবর্তী যেকোনও ভার্সনে, ডিভাইস ব্যবহারকারী ব্যক্তিকে সবসময় চালু থাকা VPN সম্পর্কে সচেতন করতে, সিস্টেম নিম্নলিখিত ডায়ালগ দেখায়:
- 'সবসময়-চালু VPN' কানেকশন ডিসকানেক্ট হয়ে গেলে বা কানেক্ট করতে না পারলে, লোকজন একটি বাতিল করা যায় না এমন বিজ্ঞপ্তি দেখতে পান। বিজ্ঞপ্তিতে ট্যাপ করলে একটি ডায়ালগ দেখা যায় যা আরও ব্যাখ্যা করে। VPN আবার কানেক্ট হলে বা কেউ সবসময়-চালু VPN বিকল্প বন্ধ করে দিলে বিজ্ঞপ্তিটি আর দেখা যায় না।
- সবসময়-চালু VPN, কোনও ডিভাইস ব্যবহারকারীকে VPN ব্যবহার করে না এমন যেকোনও নেটওয়ার্ক কানেকশন ব্লক করার অনুমতি দেয়। এই বিকল্প চালু করার সময়, VPN কানেক্ট হওয়ার আগে ইন্টারনেট কানেকশন নেই বলে সেটিংস অ্যাপ লোকজনকে সতর্ক করে। Settings অ্যাপ, ডিভাইস ব্যবহারকারী ব্যক্তিকে চালিয়ে যেতে বা বাতিল করতে প্রম্পট করে।
যেহেতু সিস্টেম (কোনও ব্যক্তি নয়) সবসময় চালু থাকা কানেকশন শুরু ও বন্ধ করে, তাই আপনাকে অ্যাপের আচরণ ও ইউজার ইন্টারফেস মানিয়ে নিতে হবে:
- কানেকশন ডিসকানেক্ট করে এমন যেকোনও UI বন্ধ করুন কারণ সিস্টেম ও সেটিংস অ্যাপ কানেকশন নিয়ন্ত্রণ করে।
- প্রতিটি অ্যাপ শুরু করার মধ্যে যেকোনও কনফিগারেশন সেভ করুন এবং লেটেস্ট সেটিংসের সাথে একটি কানেকশন কনফিগার করুন। যেহেতু সিস্টেম আপনার অ্যাপকে চাহিদা অনুযায়ী চালু করে, তাই যে ব্যক্তি ডিভাইস ব্যবহার করছেন তিনি সবসময় কানেকশন কনফিগার করতে নাও চাইতে পারেন।
এছাড়াও, আপনি কানেকশন কনফিগার করতে ম্যানেজ করা কনফিগারেশন ব্যবহার করতে পারবেন। ম্যানেজ করা কনফিগারেশন, আইটি অ্যাডমিনকে আপনার VPN রিমোটলি কনফিগার করতে সাহায্য করে।
সবসময় চালু থাকা শনাক্ত করুন
সিস্টেম আপনার VPN পরিষেবা চালু করেছে কিনা তা কনফার্ম করার জন্য Android-এ API অন্তর্ভুক্ত নেই। কিন্তু, আপনার অ্যাপ চালু করা কোনও পরিষেবা ইনস্ট্যান্স ফ্ল্যাগ করলে, আপনি ধরে নিতে পারেন যে সিস্টেম সবসময়-চালু VPN-এর জন্য ফ্ল্যাগ না করা পরিষেবা চালু করেছে। এখানে একটি উদাহরণ দেওয়া হল:
- VPN পরিষেবা শুরু করতে
Intentইনস্ট্যান্স তৈরি করুন। - ইনটেন্টে অতিরিক্ত কিছু যোগ করে VPN পরিষেবা ফ্ল্যাগ করুন।
- পরিষেবার
onStartCommand()পদ্ধতিতে,intentআর্গুমেন্টের অতিরিক্ত বিকল্পে ফ্ল্যাগ খুঁজুন।
ব্লক করা কানেকশন
ডিভাইস ব্যবহারকারী ব্যক্তি (বা আইটি অ্যাডমিন) সব ট্রাফিককে VPN ব্যবহার করতে বাধ্য করতে পারেন। VPN ব্যবহার করে না এমন যেকোনও নেটওয়ার্ক ট্রাফিক সিস্টেম ব্লক করে দেয়। ডিভাইস ব্যবহারকারী ব্যক্তি সেটিংসের VPN বিকল্প প্যানেলে VPN ছাড়া কানেকশন ব্লক করুন সুইচ খুঁজে পাবেন।
সবসময় চালু থাকা থেকে অপ্ট-আউট করুন
আপনার অ্যাপ যদি বর্তমানে সবসময়-চালু VPN সাপোর্ট না করে, তাহলে আপনি (Android 8.1 বা তার পরবর্তী ভার্সনে)
SERVICE_META_DATA_SUPPORTS_ALWAYS_ON
পরিষেবার মেটাডেটা false-এ সেট করে অপ্ট-আউট করতে পারবেন। নিম্নলিখিত অ্যাপ ম্যানিফেস্টের উদাহরণ থেকে বোঝা যায় যে কীভাবে
মেটাডেটা এলিমেন্ট যোগ করতে হয়:
<service android:name=".MyVpnService"
android:permission="android.permission.BIND_VPN_SERVICE">
<intent-filter>
<action android:name="android.net.VpnService"/>
</intent-filter>
<meta-data android:name="android.net.VpnService.SUPPORTS_ALWAYS_ON"
android:value=false/>
</service>
আপনার অ্যাপ সবসময়-চালু VPN থেকে বেরিয়ে এলে, সিস্টেম সেটিংসে বিকল্প UI কন্ট্রোল বন্ধ করে দেয়।
অ্যাপ প্রতি VPN
কোন ইনস্টল করা অ্যাপকে VPN কানেকশনের মাধ্যমে ট্রাফিক পাঠানোর অনুমতি দেওয়া হবে তা VPN অ্যাপ ফিল্টার করতে পারে। আপনি অনুমোদিত তালিকা অথবা অননুমোদিত তালিকা তৈরি করতে পারবেন, কিন্তু দুটিই নয়। আপনি যদি অনুমোদিত বা অননুমোদিত তালিকা তৈরি না করেন, তাহলে সিস্টেম VPN-এর মাধ্যমে সমস্ত নেটওয়ার্ক ট্রাফিক পাঠায়।
কানেকশন তৈরি হওয়ার আগেই আপনার VPN অ্যাপকে তালিকা সেট করতে হবে। আপনাকে তালিকা পরিবর্তন করতে হলে, নতুন VPN কানেকশন তৈরি করুন। কোনও অ্যাপ তালিকায় যোগ করার সময় সেটি ডিভাইসে ইনস্টল করা থাকতে হবে।
Kotlin
// The apps that will have access to the VPN. val appPackages = arrayOf( "com.android.chrome", "com.google.android.youtube", "com.example.a.missing.app") // Loop through the app packages in the array and confirm that the app is // installed before adding the app to the allowed list. val builder = Builder() for (appPackage in appPackages) { try { packageManager.getPackageInfo(appPackage, 0) builder.addAllowedApplication(appPackage) } catch (e: PackageManager.NameNotFoundException) { // The app isn't installed. } } // Complete the VPN interface config. val localTunnel = builder .addAddress("2001:db8::1", 64) .addRoute("::", 0) .establish()
জাভা
// The apps that will have access to the VPN. String[] appPackages = { "com.android.chrome", "com.google.android.youtube", "com.example.a.missing.app"}; // Loop through the app packages in the array and confirm that the app is // installed before adding the app to the allowed list. VpnService.Builder builder = new VpnService.Builder(); PackageManager packageManager = getPackageManager(); for (String appPackage: appPackages) { try { packageManager.getPackageInfo(appPackage, 0); builder.addAllowedApplication(appPackage); } catch (PackageManager.NameNotFoundException e) { // The app isn't installed. } } // Complete the VPN interface config. ParcelFileDescriptor localTunnel = builder .addAddress("2001:db8::1", 64) .addRoute("::", 0) .establish();
অনুমোদিত অ্যাপ
অনুমোদিত তালিকায় কোনও অ্যাপ যোগ করতে, VpnService.Builder.addAllowedApplication()-এ কল করুন। তালিকায়
এক বা একাধিক অ্যাপ থাকলে, শুধু তালিকায় থাকা অ্যাপগুলিই VPN ব্যবহার করে।
অন্যান্য সব অ্যাপ (যেগুলি তালিকায় নেই) সিস্টেম নেটওয়ার্ক এমনভাবে ব্যবহার করে যেন VPN
চালু নেই। অনুমোদিত তালিকা খালি থাকলে, সব অ্যাপ VPN ব্যবহার করে।
অনুমতি না দেওয়া অ্যাপ
অনুমতি নেই এমন তালিকায় কোনও অ্যাপ যোগ করতে, VpnService.Builder.addDisallowedApplication() কল করুন।
অনুমতি না দেওয়া অ্যাপ সিস্টেম নেটওয়ার্কিং এমনভাবে ব্যবহার করে যেন VPN চলছে না—অন্য সব
অ্যাপ VPN ব্যবহার করে।
VPN বাইপাস করুন
আপনার VPN, অ্যাপকে VPN বাইপাস করতে এবং নিজস্ব নেটওয়ার্ক বেছে নিতে অনুমতি দিতে পারে। VPN বাইপাস করতে, VPN ইন্টারফেস সেট-আপ করার সময় VpnService.Builder.allowBypass()-এ কল করুন।
আপনার VPN পরিষেবা চালু করার পরে আপনি এই মান পরিবর্তন করতে পারবেন না। কোনও অ্যাপ যদি তার প্রসেস বা সকেটকে নির্দিষ্ট কোনও নেটওয়ার্কের সাথে বাইন্ড না করে, তাহলে অ্যাপের নেটওয়ার্ক ট্রাফিক VPN-এর মাধ্যমে চলতে থাকে।
কোনও নির্দিষ্ট নেটওয়ার্কের সাথে যুক্ত অ্যাপের কানেকশন থাকে না যখন কেউ
VPN-এর মাধ্যমে যায় না এমন ট্রাফিক ব্লক করে। নির্দিষ্ট
নেটওয়ার্কের মাধ্যমে ট্রাফিক পাঠানোর জন্য, সকেট কানেক্ট করার আগে অ্যাপ
ConnectivityManager.bindProcessToNetwork() বা
Network.bindSocket()-এর মতো মেথড কল করে।
নমুনা কোড
Android ওপেন সোর্স প্রজেক্টে ToyVPN নামে একটি স্যাম্পেল অ্যাপ অন্তর্ভুক্ত আছে। এই অ্যাপে দেখানো হয়েছে কীভাবে VPN পরিষেবা সেট-আপ ও কানেক্ট করতে হয়।