অ্যান্ড্রয়েড ভার্চুয়াল প্রাইভেট নেটওয়ার্ক (ভিপিএন) সমাধান তৈরি করতে বিকাশকারীদের API প্রদান করে। এই নির্দেশিকাটি পড়ার পরে, আপনি Android-চালিত ডিভাইসগুলির জন্য কীভাবে আপনার নিজস্ব VPN ক্লায়েন্ট বিকাশ এবং পরীক্ষা করবেন তা জানতে পারবেন।
ওভারভিউ
VPNগুলি এমন ডিভাইসগুলিকে অনুমতি দেয় যেগুলি শারীরিকভাবে নেটওয়ার্কে নেই নিরাপদে নেটওয়ার্ক অ্যাক্সেস করতে।
অ্যান্ড্রয়েডে একটি অন্তর্নির্মিত (PPTP এবং L2TP/IPSec) VPN ক্লায়েন্ট রয়েছে, যাকে কখনও কখনও লিগ্যাসি VPN বলা হয়। Android 4.0 (API লেভেল 14) APIs চালু করেছে যাতে অ্যাপ ডেভেলপাররা তাদের নিজস্ব VPN সমাধান প্রদান করতে পারে। আপনি আপনার VPN সলিউশনকে একটি অ্যাপে প্যাকেজ করেন যা লোকেরা ডিভাইসে ইনস্টল করে। বিকাশকারীরা সাধারণত নিম্নলিখিত কারণে একটি ভিপিএন অ্যাপ তৈরি করে:
- ভিপিএন প্রোটোকল অফার করতে যা অন্তর্নির্মিত ক্লায়েন্ট সমর্থন করে না।
- জটিল কনফিগারেশন ছাড়াই একটি VPN পরিষেবার সাথে সংযোগ স্থাপনে লোকেদের সাহায্য করতে।
এই গাইডের বাকি অংশটি ব্যাখ্যা করে কিভাবে ভিপিএন অ্যাপস ডেভেলপ করতে হয় ( সর্বদা চালু এবং প্রতি-অ্যাপ ভিপিএন সহ) এবং বিল্ট-ইন ভিপিএন ক্লায়েন্টকে কভার করে না।
ব্যবহারকারীর অভিজ্ঞতা
আপনার VPN সমাধান কনফিগার করতে, শুরু করতে এবং থামাতে কাউকে সাহায্য করতে Android একটি ব্যবহারকারী ইন্টারফেস (UI) প্রদান করে। সিস্টেম UI ডিভাইস ব্যবহারকারী ব্যক্তিকে একটি সক্রিয় VPN সংযোগ সম্পর্কে সচেতন করে তোলে। Android VPN সংযোগের জন্য নিম্নলিখিত UI উপাদানগুলি দেখায়:
- একটি VPN অ্যাপ প্রথমবার সক্রিয় হওয়ার আগে, সিস্টেমটি একটি সংযোগ অনুরোধ ডায়ালগ প্রদর্শন করে। ডায়ালগটি ডিভাইস ব্যবহারকারী ব্যক্তিকে নিশ্চিত করতে অনুরোধ করে যে তারা VPN-এ বিশ্বাস করে এবং অনুরোধটি গ্রহণ করে।
- VPN সেটিংস স্ক্রীন (সেটিংস > নেটওয়ার্ক এবং ইন্টারনেট > VPN) VPN অ্যাপগুলি দেখায় যেখানে একজন ব্যক্তি সংযোগের অনুরোধ গ্রহণ করেছেন। সিস্টেমের বিকল্পগুলি কনফিগার করতে বা ভিপিএন ভুলে যাওয়ার জন্য একটি বোতাম রয়েছে৷
- একটি সংযোগ সক্রিয় হলে দ্রুত সেটিংস ট্রে একটি তথ্য প্যানেল দেখায়৷ লেবেলটি আলতো চাপলে আরও তথ্য সহ একটি ডায়ালগ এবং সেটিংসের একটি লিঙ্ক প্রদর্শন করে৷
- একটি সক্রিয় সংযোগ নির্দেশ করতে স্ট্যাটাস বারে একটি VPN (কী) আইকন রয়েছে৷
আপনার অ্যাপটিকে একটি UI প্রদান করতে হবে যাতে ডিভাইসটি ব্যবহার করা ব্যক্তি আপনার পরিষেবার বিকল্পগুলি কনফিগার করতে পারে৷ উদাহরণস্বরূপ, আপনার সমাধানটি অ্যাকাউন্ট প্রমাণীকরণ সেটিংস ক্যাপচার করতে হতে পারে। অ্যাপগুলিকে নিম্নলিখিত UI দেখাতে হবে:
- ম্যানুয়ালি একটি সংযোগ শুরু এবং বন্ধ করার নিয়ন্ত্রণ। সর্বদা-চালু VPN যখন প্রয়োজন হয় তখন সংযোগ করতে পারে, কিন্তু লোকেরা যখন প্রথমবার আপনার VPN ব্যবহার করে তখন সংযোগটি কনফিগার করার অনুমতি দেয়৷
- পরিষেবাটি সক্রিয় থাকাকালীন একটি অ-বরখাস্তযোগ্য বিজ্ঞপ্তি৷ বিজ্ঞপ্তিটি সংযোগের স্থিতি দেখাতে পারে বা আরও তথ্য প্রদান করতে পারে—যেমন নেটওয়ার্ক পরিসংখ্যান। বিজ্ঞপ্তিতে ট্যাপ করা আপনার অ্যাপটিকে সামনে নিয়ে আসে। পরিষেবাটি নিষ্ক্রিয় হয়ে যাওয়ার পরে বিজ্ঞপ্তিটি সরান।
ভিপিএন পরিষেবা
আপনার অ্যাপটি একজন ব্যবহারকারীর (বা একটি কাজের প্রোফাইল ) সিস্টেম নেটওয়ার্কিংকে একটি VPN গেটওয়েতে সংযুক্ত করে৷ প্রতিটি ব্যবহারকারী (বা কাজের প্রোফাইল) একটি ভিন্ন ভিপিএন অ্যাপ চালাতে পারে। আপনি একটি VPN পরিষেবা তৈরি করুন যা সিস্টেম আপনার VPN শুরু এবং বন্ধ করতে এবং সংযোগের স্থিতি ট্র্যাক করতে ব্যবহার করে। আপনার VPN পরিষেবা VpnService
থেকে উত্তরাধিকারসূত্রে প্রাপ্ত।
পরিষেবাটি ভিপিএন গেটওয়ে সংযোগ এবং তাদের স্থানীয় ডিভাইস ইন্টারফেসের জন্য আপনার ধারক হিসাবেও কাজ করে। একটি নতুন স্থানীয় ইন্টারফেস প্রতিষ্ঠা করতে আপনার পরিষেবার উদাহরণ VpnService.Builder
পদ্ধতিতে কল করুন।
VpnService
Android নেটওয়ার্কিংকে VPN গেটওয়েতে সংযুক্ত করে ডিভাইসটিকে VPN গেটওয়েতে সংযুক্ত করতে আপনার অ্যাপ নিম্নলিখিত ডেটা স্থানান্তর করে:
- স্থানীয় ইন্টারফেসের ফাইল বর্ণনাকারী থেকে বহির্গামী আইপি প্যাকেটগুলি পড়ে, সেগুলিকে এনক্রিপ্ট করে এবং সেগুলিকে ভিপিএন গেটওয়েতে পাঠায়৷
- স্থানীয় ইন্টারফেসের ফাইল বর্ণনাকারীতে ইনকামিং প্যাকেট (ভিপিএন গেটওয়ে থেকে প্রাপ্ত এবং ডিক্রিপ্ট করা) লিখে।
ব্যবহারকারী বা প্রোফাইল প্রতি শুধুমাত্র একটি সক্রিয় পরিষেবা আছে. একটি নতুন পরিষেবা শুরু করা, স্বয়ংক্রিয়ভাবে একটি বিদ্যমান পরিষেবা বন্ধ করে দেয়।
একটি পরিষেবা যোগ করুন
আপনার অ্যাপে একটি VPN পরিষেবা যোগ করতে, VpnService
থেকে উত্তরাধিকারসূত্রে পাওয়া একটি Android পরিষেবা তৈরি করুন৷ নিম্নলিখিত সংযোজনগুলির সাথে আপনার অ্যাপ ম্যানিফেস্ট ফাইলে ভিপিএন পরিষেবা ঘোষণা করুন:
-
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 গেটওয়ের সাথে সংযুক্ত। ভিপিএন গেটওয়েতে অনুমতির অনুরোধ করতে এবং আপনার পরিষেবার সাথে সংযোগ করতে, আপনাকে নিম্নলিখিত ক্রমে পদক্ষেপগুলি সম্পূর্ণ করতে হবে:
- অনুমতি চাওয়ার জন্য
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()
জাভা
// 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()
- একটি সাবনেট মাস্কের সাথে কমপক্ষে একটি IPv4 বা IPv6 ঠিকানা যোগ করুন যা সিস্টেম স্থানীয় TUN ইন্টারফেস ঠিকানা হিসাবে বরাদ্দ করে। আপনার অ্যাপ সাধারণত হ্যান্ডশেক করার সময় একটি VPN গেটওয়ে থেকে IP ঠিকানা এবং সাবনেট মাস্ক গ্রহণ করে।
-
addRoute()
- যদি আপনি সিস্টেমটি VPN ইন্টারফেসের মাধ্যমে ট্রাফিক পাঠাতে চান তাহলে অন্তত একটি রুট যোগ করুন। গন্তব্য ঠিকানা দ্বারা রুট ফিল্টার. সমস্ত ট্রাফিক গ্রহণ করতে, একটি খোলা রুট সেট করুন যেমন
0.0.0.0/0
বা::/0
।
establish()
পদ্ধতিটি একটি ParcelFileDescriptor
উদাহরণ প্রদান করে যা আপনার অ্যাপ ইন্টারফেসের বাফার থেকে প্যাকেট পড়তে এবং লিখতে ব্যবহার করে। আপনার অ্যাপ প্রস্তুত না থাকলে বা কেউ অনুমতি প্রত্যাহার করলে establish()
পদ্ধতিটি null
হয়ে যায়।
সেবা জীবনচক্র
আপনার অ্যাপটিকে সিস্টেমের নির্বাচিত VPN এবং যেকোনো সক্রিয় সংযোগের অবস্থা ট্র্যাক করা উচিত। ডিভাইস ব্যবহারকারী ব্যক্তিকে যেকোনো পরিবর্তন সম্পর্কে সচেতন রাখতে আপনার অ্যাপের ইউজার ইন্টারফেস (UI) আপডেট করুন।
একটি পরিষেবা শুরু করা হচ্ছে
আপনার ভিপিএন পরিষেবা নিম্নলিখিত উপায়ে শুরু করা যেতে পারে:
- আপনার অ্যাপটি পরিষেবা শুরু করে—সাধারণত কারণ একজন ব্যক্তি একটি সংযোগ বোতামে ট্যাপ করেছে৷
- সিস্টেমটি পরিষেবা শুরু করে কারণ সর্বদা চালু ভিপিএন চালু থাকে৷
আপনার অ্যাপ startService()
এর উদ্দেশ্য পাস করে VPN পরিষেবা শুরু করে। আরও জানতে, একটি পরিষেবা শুরু করা পড়ুন।
সিস্টেমটি onStartCommand()
কল করে ব্যাকগ্রাউন্ডে আপনার পরিষেবা শুরু করে। যাইহোক, অ্যান্ড্রয়েড 8.0 (API লেভেল 26) বা উচ্চতর সংস্করণে ব্যাকগ্রাউন্ড অ্যাপগুলিতে সীমাবদ্ধতা রাখে। আপনি যদি এই API স্তরগুলি সমর্থন করেন, তাহলে আপনাকে Service.startForeground()
এ কল করে আপনার পরিষেবাকে অগ্রভাগে স্থানান্তর করতে হবে। আরও জানতে, অগ্রভাগে একটি পরিষেবা চালানো পড়ুন।
একটি পরিষেবা বন্ধ করা
ডিভাইস ব্যবহারকারী একজন ব্যক্তি আপনার অ্যাপের UI ব্যবহার করে আপনার পরিষেবা বন্ধ করতে পারেন। সংযোগ বন্ধ করার পরিবর্তে পরিষেবাটি বন্ধ করুন। ডিভাইসটি ব্যবহারকারী ব্যক্তি সেটিংস অ্যাপের VPN স্ক্রিনে নিম্নলিখিতগুলি করলে সিস্টেমটি একটি সক্রিয় সংযোগ বন্ধ করে দেয়:
- VPN অ্যাপ সংযোগ বিচ্ছিন্ন করে বা ভুলে যায়
- একটি সক্রিয় সংযোগের জন্য সর্বদা-অন ভিপিএন বন্ধ করে
সিস্টেমটি আপনার পরিষেবার onRevoke()
পদ্ধতিতে কল করে কিন্তু এই কলটি মূল থ্রেডে নাও হতে পারে। যখন সিস্টেমটি এই পদ্ধতিটিকে কল করে, তখন একটি বিকল্প নেটওয়ার্ক ইন্টারফেস ইতিমধ্যেই ট্র্যাফিক রাউটিং করছে৷ আপনি নিম্নলিখিত সংস্থানগুলি নিরাপদে নিষ্পত্তি করতে পারেন:
-
DatagramSocket.close()
কল করে VPN গেটওয়েতে সুরক্ষিত টানেল সকেট বন্ধ করুন। -
ParcelFileDescriptor.close()
কল করে পার্সেল ফাইল বর্ণনাকারী বন্ধ করুন (আপনার এটি নিষ্কাশন করার দরকার নেই)।
সর্বদা-চালু VPN
ডিভাইস বুট হলে Android একটি VPN পরিষেবা শুরু করতে পারে এবং ডিভাইস চালু থাকা অবস্থায় এটি চালু রাখতে পারে। এই বৈশিষ্ট্যটিকে সর্বদা-অন ভিপিএন বলা হয় এবং এটি Android 7.0 (API স্তর 24) বা উচ্চতর সংস্করণে উপলব্ধ৷ অ্যান্ড্রয়েড পরিষেবার জীবনচক্র বজায় রাখার সময়, এটি আপনার ভিপিএন পরিষেবা যা ভিপিএন-গেটওয়ে সংযোগের জন্য দায়ী৷ সর্বদা-চালু VPN এমন সংযোগগুলিকেও ব্লক করতে পারে যা VPN ব্যবহার করে না৷
ব্যবহারকারীর অভিজ্ঞতা
অ্যান্ড্রয়েড 8.0 বা উচ্চতর সংস্করণে, ডিভাইস ব্যবহারকারী ব্যক্তিকে সর্বদা চালু থাকা VPN সম্পর্কে সচেতন করতে সিস্টেমটি নিম্নলিখিত ডায়ালগগুলি দেখায়:
- যখন সর্বদা-চালু VPN সংযোগগুলি সংযোগ বিচ্ছিন্ন হয় বা সংযোগ করতে পারে না, লোকেরা একটি অ-খারিজ বিজ্ঞপ্তি দেখতে পায়৷ বিজ্ঞপ্তিটি আলতো চাপলে একটি ডায়ালগ দেখায় যা আরও ব্যাখ্যা করে৷ VPN পুনরায় সংযোগ করলে বা কেউ সর্বদা-চালু VPN বিকল্পটি বন্ধ করলে বিজ্ঞপ্তিটি অদৃশ্য হয়ে যায়।
- সর্বদা-চালু VPN একটি ডিভাইস ব্যবহারকারী ব্যক্তিকে VPN ব্যবহার করে না এমন কোনো নেটওয়ার্ক সংযোগ ব্লক করতে দেয়। এই বিকল্পটি চালু করার সময়, সেটিংস অ্যাপ লোকেদের সতর্ক করে যে VPN সংযোগ করার আগে তাদের ইন্টারনেট সংযোগ নেই। সেটিংস অ্যাপটি ডিভাইস ব্যবহারকারী ব্যক্তিকে চালিয়ে যেতে বা বাতিল করতে অনুরোধ করে।
যেহেতু সিস্টেম (এবং একজন ব্যক্তি নয়) একটি সর্বদা চালু সংযোগ শুরু করে এবং বন্ধ করে, আপনাকে আপনার অ্যাপের আচরণ এবং ব্যবহারকারীর ইন্টারফেসকে মানিয়ে নিতে হবে:
- সংযোগ বিচ্ছিন্ন করে এমন যেকোনো UI অক্ষম করুন কারণ সিস্টেম এবং সেটিংস অ্যাপ সংযোগ নিয়ন্ত্রণ করে।
- প্রতিটি অ্যাপ স্টার্টের মধ্যে যেকোনো কনফিগার সংরক্ষণ করুন এবং সর্বশেষ সেটিংসের সাথে একটি সংযোগ কনফিগার করুন। যেহেতু সিস্টেমটি চাহিদা অনুযায়ী আপনার অ্যাপ শুরু করে, তাই ডিভাইস ব্যবহারকারী ব্যক্তি সর্বদা একটি সংযোগ কনফিগার করতে নাও পারেন।
আপনি একটি সংযোগ কনফিগার করতে পরিচালিত কনফিগারেশন ব্যবহার করতে পারেন। পরিচালিত কনফিগারেশনগুলি একজন IT অ্যাডমিনকে আপনার VPN দূরবর্তীভাবে কনফিগার করতে সাহায্য করে।
সর্বদা-চালু সনাক্ত করুন
সিস্টেম আপনার VPN পরিষেবা শুরু করেছে কিনা তা নিশ্চিত করার জন্য Android এ API গুলি অন্তর্ভুক্ত করে না৷ কিন্তু, যখন আপনার অ্যাপ কোনো পরিষেবার দৃষ্টান্তগুলিকে ফ্ল্যাগ করে তা শুরু হয়, আপনি ধরে নিতে পারেন যে সিস্টেমটি সর্বদা-চালু VPN-এর জন্য আনফ্ল্যাগ করা পরিষেবাগুলি শুরু করেছে৷ এখানে একটি উদাহরণ:
- ভিপিএন পরিষেবা শুরু করার জন্য একটি
Intent
উদাহরণ তৈরি করুন। - অভিপ্রায়ে একটি অতিরিক্ত রেখে VPN পরিষেবাটিকে ফ্ল্যাগ করুন৷
- পরিষেবার
onStartCommand()
পদ্ধতিতে,intent
আর্গুমেন্টের অতিরিক্তগুলিতে পতাকাটি সন্ধান করুন।
অবরুদ্ধ সংযোগ
ডিভাইস ব্যবহারকারী একজন ব্যক্তি (বা একজন আইটি অ্যাডমিন) সমস্ত ট্রাফিককে VPN ব্যবহার করতে বাধ্য করতে পারেন। সিস্টেমটি যেকোন নেটওয়ার্ক ট্র্যাফিককে ব্লক করে যা VPN ব্যবহার করে না। ডিভাইস ব্যবহারকারী লোকেরা সেটিংসে VPN বিকল্প প্যানেলে VPN সুইচ ছাড়াই ব্লক সংযোগগুলি খুঁজে পেতে পারেন।
সর্বদা চালু থেকে অপ্ট আউট করুন
যদি আপনার অ্যাপ্লিকেশানটি বর্তমানে সর্বদা-চালু VPN সমর্থন করতে না পারে, তাহলে আপনি SERVICE_META_DATA_SUPPORTS_ALWAYS_ON
পরিষেবা মেটাডেটা false
সেট করে (Android 8.1 বা উচ্চতর সংস্করণে) অপ্ট আউট করতে পারেন৷ নিম্নলিখিত অ্যাপ ম্যানিফেস্ট উদাহরণ দেখায় কিভাবে মেটাডেটা উপাদান যোগ করতে হয়:
<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 সংযোগ স্থাপন করুন। আপনি একটি তালিকায় যোগ করার সময় ডিভাইসে একটি অ্যাপ ইনস্টল করতে হবে।
কোটলিন
// 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 চলছে না। যখন অনুমোদিত তালিকা খালি থাকে, তখন সমস্ত অ্যাপ ভিপিএন ব্যবহার করে।
অননুমোদিত অ্যাপ
অননুমোদিত তালিকায় একটি অ্যাপ যোগ করতে, VpnService.Builder.addDisallowedApplication()
কল করুন। অননুমোদিত অ্যাপ্লিকেশানগুলি সিস্টেম নেটওয়ার্কিং ব্যবহার করে যেন VPN চলছে না—অন্য সমস্ত অ্যাপ VPN ব্যবহার করে৷
VPN বাইপাস করুন
আপনার VPN অ্যাপগুলিকে VPN বাইপাস করতে এবং তাদের নিজস্ব নেটওয়ার্ক নির্বাচন করার অনুমতি দিতে পারে। VPN বাইপাস করতে, VPN ইন্টারফেস স্থাপন করার সময় VpnService.Builder.allowBypass()
কল করুন। আপনি আপনার VPN পরিষেবা শুরু করার পরে আপনি এই মান পরিবর্তন করতে পারবেন না৷ যদি একটি অ্যাপ তাদের প্রক্রিয়া বা সকেটকে একটি নির্দিষ্ট নেটওয়ার্কে আবদ্ধ না করে, তাহলে অ্যাপের নেটওয়ার্ক ট্রাফিক VPN এর মাধ্যমে চলতে থাকে।
যে অ্যাপগুলি একটি নির্দিষ্ট নেটওয়ার্কের সাথে আবদ্ধ হয় সেগুলির একটি সংযোগ থাকে না যখন কেউ ট্র্যাফিক ব্লক করে যা VPN এর মধ্য দিয়ে যায় না৷ একটি নির্দিষ্ট নেটওয়ার্কের মাধ্যমে ট্র্যাফিক পাঠাতে, সকেট সংযোগ করার আগে অ্যাপ্লিকেশনগুলি ConnectivityManager.bindProcessToNetwork()
বা Network.bindSocket()
এর মতো পদ্ধতিগুলিকে কল করে৷
নমুনা কোড
অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্টে ToyVPN নামে একটি নমুনা অ্যাপ রয়েছে। এই অ্যাপটি দেখায় কিভাবে একটি VPN পরিষেবা সেট আপ এবং সংযোগ করতে হয়।