Android, ডেভেলপারদের ভার্চুয়াল প্রাইভেট নেটওয়ার্ক (VPN) সলিউশন তৈরি করার জন্য API প্রদান করে। এই নির্দেশিকা পড়ার পরে, আপনি Android-চালিত ডিভাইসের জন্য নিজের VPN ক্লায়েন্ট কীভাবে ডেভেলপ ও টেস্ট করবেন তা জানতে পারবেন।
এক নজরে
VPN-এর মাধ্যমে এমন ডিভাইসও নেটওয়ার্ক নিরাপদে অ্যাক্সেস করতে পারে যা ফিজিক্যালি নেটওয়ার্কের সাথে কানেক্ট করা নেই।
Android-এ একটি বিল্ট-ইন (PPTP এবং L2TP/IPSec) VPN ক্লায়েন্ট থাকে, যেটিকে কখনও কখনও লিগ্যাসি VPN বলা হয়। Android 4.0 (API লেভেল ১৪) API চালু করেছে যাতে অ্যাপ ডেভেলপাররা তাদের নিজস্ব VPN সমাধান প্রদান করতে পারেন। আপনি নিজের VPN সলিউশনকে এমন একটি অ্যাপে প্যাকেজ করেন যা লোকজন ডিভাইসে ইনস্টল করেন। ডেভেলপাররা সাধারণত নিম্নলিখিত কারণে VPN অ্যাপ তৈরি করেন:
- বিল্ট-ইন ক্লায়েন্টে কাজ করে না এমন VPN প্রোটোকল অফার করতে।
- জটিল কনফিগারেশন ছাড়াই VPN পরিষেবার সাথে কানেক্ট করতে লোকজনকে সাহায্য করা।
এই গাইডের বাকি অংশে ভিপিএন অ্যাপ (সবসময় চালু এবং প্রতি-অ্যাপ ভিপিএন সহ) কীভাবে ডেভেলপ করতে হয় তা ব্যাখ্যা করা হয়েছে এবং এতে বিল্ট-ইন ভিপিএন ক্লায়েন্ট কভার করা হয়নি।
ব্যবহারকারীর অভিজ্ঞতা
Android একটি ইউজার ইন্টারফেস (UI) প্রদান করে যা কাউকে আপনার VPN সমাধান কনফিগার, শুরু এবং বন্ধ করতে সাহায্য করে। এছাড়াও, সিস্টেম UI, ডিভাইস ব্যবহারকারী ব্যক্তিকে চালু থাকা VPN কানেকশন সম্পর্কে সচেতন করে। Android, VPN কানেকশনের জন্য নিম্নলিখিত 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 গেটওয়ে থেকে পাওয়া ও ডিক্রিপ্ট করা) লোকাল ইন্টারফেসের ফাইল ডেসক্রিপটরে লেখে।
প্রতিটি ব্যবহারকারী বা প্রোফাইলের জন্য শুধুমাত্র একটি অ্যাক্টিভ পরিষেবা থাকে। নতুন পরিষেবা শুরু করলে, আগে থেকে চালু থাকা পরিষেবা অটোমেটিক বন্ধ হয়ে যায়।
পরিষেবা যোগ করুন
আপনার অ্যাপে 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 পদ্ধতি কল করে একটি পরিষেবা কনফিগার করে,
যেমনটি নিম্নলিখিত স্যাম্পেলে দেখানো হয়েছে:
// 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()
অ্যাপ-প্রতি VPN বিভাগে দেওয়া উদাহরণে আরও বিকল্প সহ IPv6 কনফিগারেশন
দেখানো হয়েছে। নতুন ইন্টারফেস তৈরি করার আগে আপনাকে নিম্নলিখিত VpnService.Builder ভ্যালু
যোগ করতে হবে:
addAddress()- সাবনেট মাস্কের সাথে অন্তত একটি IPv4 বা IPv6 অ্যাড্রেস যোগ করুন যা সিস্টেম স্থানীয় TUN ইন্টারফেস অ্যাড্রেস হিসেবে অ্যাসাইন করে। হ্যান্ডশেকিংয়ের সময় আপনার অ্যাপ সাধারণত 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 কানেক্ট করার আগে ইন্টারনেট কানেকশন না থাকলে, সেটিংস অ্যাপ লোকজনকে সতর্ক করে। সেটিংস অ্যাপ, ডিভাইস ব্যবহারকারী ব্যক্তিকে চালিয়ে যেতে বা বাতিল করতে প্রম্পট করে।
যেহেতু সিস্টেম (কোনও ব্যক্তি নয়) সবসময় চালু থাকা কানেকশন শুরু ও বন্ধ করে, তাই আপনাকে অ্যাপের আচরণ ও ইউজার ইন্টারফেস মানিয়ে নিতে হবে:
- কানেকশন ডিসকানেক্ট করে এমন যেকোনও 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 কানেকশন তৈরি করুন। আপনি কোনও অ্যাপ তালিকায় যোগ করার সময় সেটি ডিভাইসে ইনস্টল করা থাকতে হবে।
// 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()
অনুমোদিত অ্যাপ
অনুমোদিত তালিকায় কোনও অ্যাপ যোগ করতে,
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 পরিষেবা সেট-আপ ও কানেক্ট করতে হয়।