မင်္ဂလာပါ။ ဒီနေ့မှာတော့ ကျွန်တော် အချိန်တော်တော်များများပေးပြီး တည်ဆောက်ဖြေရှင်းခဲ့ရတဲ့ VPN ပြဿနာတစ်ခုနဲ့ ပတ်သက်ပြီး Achievement တစ်ခုအနေနဲ့ ပြန်လည်မျှဝေပေးချင်ပါတယ်။
ကျွန်တော့်ရဲ့ လက်ရှိ Project Source Code တွေကိုတော့ hhkscripts/vpn GitHub Repository မှာ ဝင်ရောက်လေ့လာနိုင်ပါတယ်။

လက်ရှိအချိန်မှာ အဓိကကြုံတွေ့နေရတဲ့ အခက်အခဲကတော့ အစိုးရကနေ OpenVPN ရဲ့ Default Port တွေကို ပိတ် (Ban) ထားတဲ့အတွက် သာမန်အတိုင်း ချိတ်ဆက်လို့ မရတော့တာပဲ ဖြစ်ပါတယ်။ ဒီပြဿနာကို ဖြေရှင်းဖို့အတွက် ကျွန်တော်က Server တစ်ခုကနေ Custom Port တစ်ခုကို အရင်ဆုံး ဖန်တီးရယူခဲ့ပါတယ်။ Default port တွေအစား မိမိဖန်တီးထားတဲ့ သီးသန့် Port တွေကို ပြောင်းလဲအသုံးပြုမှသာ ပိတ်ဆို့မှုတွေကို ကျော်လွှားနိုင်မှာ ဖြစ်လို့ပါ။
Routing နှင့် IP Tables များကို စနစ်တကျ စီမံခြင်း
Network အပိုင်းမှာလည်း ရိုးရိုးရှင်းရှင်းလေး ချိတ်ဆက်လိုက်ရုံတင် မဟုတ်ဘဲ စနစ်တကျဖြစ်အောင် Routing တွေနဲ့ IPTables တွေကို သေချာ Configure လုပ်ထားပါတယ်။
ကျွန်တော့်ရဲ့ Raspberry Pi (Host) ရဲ့ ကိုယ်ပိုင် Traffic တွေ၊ Docker Service တွေနဲ့ Local Management တွေကတော့ ပုံမှန်အတိုင်း eth0 ကနေပဲ သွားစေပါတယ်။ ဒါပေမယ့် Hotspot ကနေ ချိတ်ဆက်လာတဲ့ Client တွေရဲ့ Traffic အားလုံးကိုတော့ သီးသန့်ခွဲထုတ်ပြီး (Split Routing) tun0 (VPN) ကနေ သွားအောင် လုပ်ဆောင်ထားပါတယ်။ မလိုအပ်ဘဲ Default Route ကြီးတစ်ခုလုံး ပြောင်းမသွားအောင် IP Routing Table (table 100) တွေနဲ့ သေချာထိန်းချုပ်ထားတာကြောင့် စနစ်ကြီးတစ်ခုလုံးက ပိုမိုတည်ငြိမ်ပါတယ်။
Binance Through Myanmar ISP (စမတ်ကျကျ လမ်းကြောင်းခွဲခြင်း)
ဒီ Project မှာ အသုံးဝင်ဆုံးနဲ့ စိတ်အဝင်စားဆုံး အပိုင်းတစ်ခုကတော့ Binance Through Myanmar ISP စနစ်ပဲ ဖြစ်ပါတယ်။ Binance P2P သုံးတဲ့အခါ VPN Exit IP တွေကြောင့် အကောင့်တွေ ပိတ်ခံရတာမျိုး ကြုံတွေ့ရတတ်ပါတယ်။
ဒါကို ဖြေရှင်းဖို့အတွက် Hotspot Client တွေက Binance ကို လှမ်းခေါ်တဲ့အခါ AdGuard Home ရဲ့ DNS caching စနစ်ကနေတစ်ဆင့် Binance ရဲ့ IP တွေကို local_bypass_domains ဆိုတဲ့ ipset ထဲကို အလိုအလျောက် ပေါင်းထည့်ပေးပါတယ်။ IPTables နဲ့ Policy Routing ကနေ အဲဒီ ipset ထဲက သွားမယ့် Traffic တွေကိုပဲ ဗီဒီယိုပြောင်းပြီး VPN ထဲမလွှတ်တော့ဘဲ မြန်မာနိုင်ငံ ISP ရဲ့ ပုံမှန် Ethernet (eth0) လမ်းကြောင်းအတိုင်း တိုက်ရိုက်ထွက်စေပါတယ်။ ဒါကြောင့် Binance သုံးတဲ့အခါ VPN ပိတ်စရာမလိုဘဲ မြန်မာ IP နဲ့ တိုက်ရိုက် အဆင်ပြေပြေ အသုံးပြုနိုင်မှာ ဖြစ်ပါတယ်။
VPN over another VPN စနစ် (Client VPN Through GoodWifi)
ဒီ Project ရဲ့ နောက်ထပ် စိတ်ဝင်စားဖို့ကောင်းတဲ့ အားသာချက်တစ်ခုကတော့ “Client VPN Through GoodWifi” လို့ခေါ်တဲ့ VPN ပေါ်ကနေ နောက်ထပ် VPN တစ်ခု ထပ်ချိတ်လို့ရတဲ့ စနစ် (VPN over another VPN) ပဲ ဖြစ်ပါတယ်။
ဆိုလိုတာက ကျွန်တော့်ရဲ့ စနစ်က ပထမ VPN အလွှာ (Layer 1) အနေနဲ့ အလုပ်လုပ်ပေးပြီး၊ အသုံးပြုသူတွေအနေနဲ့ ကိုယ့်ဖုန်း ဒါမှမဟုတ် ကွန်ပျူတာကနေ နောက်ထပ် မိမိကြိုက်နှစ်သက်ရာ VPN (Layer 2) တစ်ခုကို ထပ်ဆင့်ကျော်ပြီး လွတ်လွတ်လပ်လပ် သုံးနိုင်အောင် ဖန်တီးပေးထားပါတယ်။ Connection တည်ငြိမ်ဖို့အတွက် MTU ပြဿနာမတက်အောင် mssfix 1200 ကိုလည်း စနစ်တကျ ထည့်သွင်းစဉ်းစားပေးထားပါတယ်။
Docker Workloads များဖြင့် အလုပ်လုပ်ခြင်း
စနစ်တစ်ခုလုံးကို ပေါ့ပါးပြီး စီမံရလွယ်ကူအောင် Docker နှင့် Docker Compose ကို အသုံးပြုပြီး တည်ဆောက်ထားပါတယ်။ ကြော်ငြာတွေ ပိတ်ပေးမယ့် DNS စနစ်အတွက် adguardhome Container ကို၎င်း၊ အဝေးကနေ စောင့်ကြည့်ထိန်းချုပ်မယ့် Telegram Bot အတွက် mpxraspberrypibot Container ကို၎င်း Docker workspace ထဲမှာ သီးသန့် အသီးသီး ခွဲခြားမောင်းနှင်ထားတာကြောင့် Host OS ရဲ့ Network ကို မရှုပ်ထွေးစေဘဲ ကောင်းမွန်စွာ အလုပ်လုပ်နိုင်ပါတယ်။
Shell Aliases များဖြင့် နေ့စဉ်အသုံးပြုရ လွယ်ကူစေခြင်း
စနစ်ကို စတင်တပ်ဆင်တဲ့အခါ setup.sh ကနေ .bashrc ထဲကို နေ့စဉ်သုံး commands တွေအတွက် short aliases တွေပါ တစ်ခါတည်း သတ်မှတ်ပေးသွားမှာ ဖြစ်ပါတယ်:
hotspot- Hotspot Manager ရဲ့ CLI ကို ခေါ်ယူအသုံးပြုရန်hs- လက်ရှိ Hotspot, VPN နဲ့ ဝန်ဆောင်မှုတွေရဲ့ အခြေအနေကို ပုံစံကျကျ ချက်ချင်းကြည့်ရှုရန် (--status)hf- စနစ်မှာ တစ်ခုခုလွဲချော်နေရင် အလိုအလျောက် ပြန်ပြင်ပေးမယ့် Auto-Fix လမ်းကြောင်းကို အသုံးပြုရန် (--fix)
Telegram Bot ဖြင့် အလွယ်တကူ ထိန်းချုပ်ခြင်း
နေရာမရွေး အလွယ်တကူ လှမ်းပြီး ထိန်းချုပ်လို့ရအောင် Telegram Bot လေးတစ်ခုကိုပါ ချိတ်ဆက်ရေးသားထားပါတယ်။ ကိုယ့်ရဲ့ ဖုန်းထဲကနေပဲဖြစ်ဖြစ် VPN ရဲ့ Status တွေကို အချိန်မရွေး ကြည့်တာ၊ ချိတ်ဆက်ထားတဲ့ Client အရေအတွက်ကို စစ်ဆေးတာတွေကို အလွယ်တကူ လုပ်ဆောင်နိုင်ပါတယ်။
Install, Uninstall နှင့် Restart လုပ်ဆောင်ချက်များ
သုံးစွဲရတာ ပိုမိုအဆင်ပြေစေဖို့အတွက် စနစ်ကို တစ်ခါတည်း အလွယ်တကူ စတင်တပ်ဆင်ဖို့ setup.sh နဲ့ မလိုအပ်တော့တဲ့အခါ စနစ်တကျ ပြန်လည်ဖြုတ်ချဖို့ uninstall.sh ဆိုတဲ့ Script လေးတွေကိုပါ တစ်ပါတည်း ရေးသားထည့်သွင်းပေးထားပါတယ်။
ဒါ့အပြင် အကြောင်းအမျိုးမျိုးကြောင့် အခက်အခဲဖြစ်လာရင် အလွယ်တကူ ဖြေရှင်းနိုင်ဖို့ Auto-fix လုပ်ပေးတဲ့ စနစ်တွေနဲ့ Services တွေကို ချက်ချင်း Restart ပြန်ချပေးနိုင်တဲ့ လုပ်ဆောင်ချက် (Commands) တွေကိုပါ အပြည့်အစုံ ထည့်သွင်းပေးထားပါတယ်။
ဒီ Project လေးကနေတစ်ဆင့် Network Routing သဘောတရားတွေ၊ Linux IPTables တွေနဲ့ Telegram Bot Integration အကြောင်းတွေကို ပိုမိုနားလည်ခဲ့ရပြီး လက်တွေ့အသုံးချနိုင်တဲ့ အရာတစ်ခုကို ကိုယ်တိုင် ဖန်တီးနိုင်ခဲ့တဲ့အတွက် ကျွန်တော့်အတွက်တော့ တကယ့်ကို ကျေနပ်စရာကောင်းတဲ့ Achievement တစ်ခုပဲ ဖြစ်ပါတယ်။