Calm Hill My Random Thoughts

Shadowsocks with V2Ray Plugin

ကိုယ့်နိုင်ငံကြီးရဲ့ အခြေအနေကလည်း တနေ့ထက်တနေ့ ပိုပြီးဆိုးလာတော့ ကျော်ဖို့ခွဖို့အတွက် VPN တွေလိုလာတယ်။ ပါလီမန်ခေတ် ပြည်တော်သာစီမံကိန်း လုပ်စဉ်က လူတယောက် အိမ်တလုံး ကားတစီး ပိုင်ရမယ် ဆိုတဲ့ Slogan မျိုး သွားသတိရလို့ အခုခေတ်ကတော့ လူတယောက် VPN Server တလုံး အနည်းဆုံးပိုင်ရမယ် ဆိုတာမျိုး ဖြစ်နေပြီထင်ပါတယ်။ ကိုယ့်ဟာကိုယ် မိသားစုသုံးဖို့ VPN လေးတလုံး Install လုပ်ရင်း အသုံးလိုတဲ့လူရှိရင် သုံးလို့ရအောင်လို့ Setup လုပ်တဲ့အဆင့်ဆင့်ကို ရေးထားပေးပါတယ်။

လူတိုင်းတော့ လိုက်လုပ်ဖို့ အဆင်ပြေမှာ မဟုတ်ပေမယ့် သာမန်အဆင့် System administration လုပ်ဖူးတယ်ဆိုရင် လုပ်လို့ရပါတယ် ခက်ခက်ခဲခဲလည်း မဟုတ်ပါဘူး။ အရင် ဘန်းကျော်ခေတ်က OpenVPN သုံးခဲ့ပေမယ့် အခုတော့ Transport Layer ပြောင်းချင်လို့ရယ် TLS ထည့်လို့ရအောင်နဲ့ လိုအပ်တဲ့အခါ Proxy ထပ်ထည့်လို့ရအောင် Shadowsocks ကို V2Ray Plugin သုံးပြီးတော့ Ubuntu 20.04 တင်ထားတဲ့ VPS တလုံးပေါ်မှာ Setup လုပ်ထားတာပါ။

Shadowsocks

ပထမဆုံးအဆင့် အနေနဲ့ Shadowsocks ကို Install လုပ်ဖို့လိုမယ် သူ့ Document မှာတော့ Official repo ကို သုံးဖို့အတွက် အကြံမပေးဘူးဆိုပေမယ့် Version ယှဉ်ကြည့်တော့လည်း သိပ်မကွာတာရယ်နဲ့ အလုပ်ရှုပ်မခံပါဘူး Official repo ထဲမှာပါတာပဲ apt နဲ့ Install လုပ်ပါတယ်။ အသေးစိတ်သိချင်ရင်တော့ https://github.com/shadowsocks/shadowsocks-libev မှာဖတ်ကြည့်ပါ။

sudo apt install shadowsocks-libev

Shadowsocks ပဲ သုံးမယ်ဆိုရင် ဒီအဆင့်မှာတင် ရပ်လို့ရပြီ ဘာမှမလိုတော့ဘူး Shadowsocks Service အတွက် Config က/etc/shadowsocks-libev/config.json မှာရှိတယ် လိုချင်တဲ့ Port တွေ Password တွေ Configure လုပ်ပြီး Service ကို Start လုပ်ပြီးသုံးလို့ရပြီ။

Shadowsocks ကလည်း Implementation က အမျိုးမျိုးရှိတယ် ဒီမှာက C နဲ့ ပြန်ရေးထားတဲ့ shadowsocks-libev သုံးထားတာ တခြားဟာတွေ သုံးချင်ရင်လည်း သုံးလို့ရပါလိမ့်မယ် အားတဲ့အခါမှ Python, Rust စသည်ဖြင့် အခြားသော Implementation တွေနဲ့ Performance ဘယ်လောက်ကွာလဲ စမ်းကြည့်ပါဦးမယ်။ စိတ်ဝင်စားရင် https://github.com/shadowsocks/ မှာသွားကြည့်ပြီး တခြားဟာတွေနဲ့ စမ်းကြည့်လို့ရပါတယ်။

V2Ray Plugin

Shadowsocks အတွက် V2Ray Plugin ကို Install လုပ်ဖို့ဆိုရင်ကျ Official repo မှာ မရှိတဲ့အတွက် ကိုယ်တိုင် Build လုပ်ရင်လုပ် မဟုတ်ရင် Build လုပ်ပြီးသားကို ယူသုံးဖို့လိုပါတယ်။ ကိုယ်တိုင် Build လုပ်လည်း အတူတူပဲ ရမှာဖြစ်တဲ့အတွက် Build လုပ်ပြီးသားပဲ ယူသုံးပါတယ်။ နောက်ဆုံး Release ကိုသိချင်ရင် https://github.com/shadowsocks/v2ray-plugin/releases မှာကြည့်ပြီး ကိုယ်သုံးမယ့် Platform နဲ့ Archiecture အပေါ်မူတည်ပြီး Download လုပ်ရမယ့် URL ကိုကြည့်ပါ။ ဒီမှာတော့ Linux, AMD64 ကို Version 1.3.1 ကိုသုံးထားတယ်။

wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz
tar xf v2ray-plugin-linux-amd64-v1.3.1.tar.gz
sudo mv v2ray-plugin_linux_amd64 /usr/local/bin/v2ray-plugin

Shadowsocks Config

Shadowsocks ရယ် V2Ray Plugin ရယ် Install လုပ်ပြီးသွားရင် Config နည်းနည်းပြင်ပြီး Shadowsocks ကို Service အနေနဲ့ စလို့ရပြီ။ shadowsocks-libev ကို Official repo ကနေ Install လုပ်ထားရင် systemd service files တွေက ပါလာပြီးသားဖြစ်တဲ့အတွက် Daemon တကူးတက လုပ်ဖို့အလိုဘူး ယူသုံးယုံပါပဲ။ Default အနေနဲ့ပါလာတဲ့ /lib/systemd/system/shadowsocks-libev.service သုံးတဲ့ Config file /etc/shadowsocks-libev/config.json မှာလိုအပ်တာတွေ ပြင်ပေးဖို့လိုမယ် နမူနာအနေနဲ့ အောက်မှာပြထားတယ်။

{
  "server":"127.0.0.1",
  "server_port":8000,
  "password":"STRONG_PASSWORD",
  "timeout":300,
  "method":"aes-256-gcm",
  "plugin":"v2ray-plugin",
  "plugin_opts":"server;loglevel=none"
}

အကျဉ်းချုပ်ရှင်းပြရရင် Port 8000 မှာ Run မယ် Local ကနေပဲ Access လုပ်လို့ရစေချင်လို့ 127.0.0.1 ကိုသုံးထားတယ် v2ray-plugin သုံးမယ် STRONG_PASSWORD မှာတော့ ကိုယ့်ဟာကိုယ် တခုခုအစားထိုးပေါ့။ Config အသေးစိတ် ဘာတွေထပ်ထည့်လို့ရလဲ သိချင်ရင်တော့ Documentation ကိုဖတ်ကြည့်ဖို့ပဲ အကြံပေးပါတယ်။ Config ကိုပြင်လို့ပြီးရင် shadowsocks-libev ကို Enable လုပ်ပြီး Start လုပ်လို့ရပြီ။

sudo systemctl enable shadowsocks-libev
sudo systemctl start shadowsocks-libev
sudo systemctl status shadowsocks-libev

Multiple Services တွေ Run ချင်တယ်ဆိုရင် /etc/shadowsocks-libev/ မှာ ကိုယ် Run ချင်တဲ့ Service အတွက် Config ကို ကြိုက်တဲ့နာမည်ပေး ဥပမာဆိုရင် /etc/shadowsocks-libev/svr1.json လို့ သိမ်းထားတယ်ဆိုရင် Service ကို Enable လုပ်ပုံနည်းနည်းကွာမယ် ကျန်တာကအတူတူပဲ အောက်မှာ နမူနာပြထားသလို Enable လုပ်ပြီး Start လုပ်လို့ရပြီ။

sudo systemctl enable shadowsocks-libev-server@svr1
sudo systemctl start shadowsocks-libev-server@svr1
sudo systemctl status shadowsocks-libev-server@svr1

Domain Setup

နောက်အဆင့်တွေအတွက် အရင်ဆုံးအနေနဲ့ Domain တခုခုလိုပါလိမ့်မယ်။ ကိုယ်အမြဲသုံးနေတဲ့ Personal Website တို့ Email တို့သုံးနေတဲ့ Domain ကိုတော့မသုံးပါနဲ့ပဲ အကြံပေးပါတယ်။ အခုခေတ်မှာ Domain တွေက ဈေးလည်းသိပ်မရှိပါဘူး .xyz လိုဟာဆိုရင် Porkbun, Namecheap တို့မှာဆိုရင် WHOIS privacy protection ပါပြီးသားတောင် 1$ အောက်နဲ့ ဝယ်လို့ရနိုင်ပါတယ်။ Auto-renew ပိတ်ထား နောက်နှစ်ကျတော့ နောက်ထပ်တခု ပြောင်းဝယ်ပေါ့။ Domain တခုရပြီဆိုရင် Sub-domain တခုလုပ်ပြီး A Record ကနေ ကိုယ့် VPS ရဲ့ IP Address ကို Point လုပ်ထားရင်ရပြီ။

Nginx and Certbot

Domain လည်းရပြီ SSL Certificate လည်းရှိတယ်ဆိုရင် တကယ်တမ်းက Shadowsocks config မှာ V2Ray Plugin အတွက် hostname စသည်ဖြင့် parameters တွေထပ်ထည့်ပြီး Public အနေနဲ့ ကြိုက်တဲ့ Port မှာ Run လို့ရပါတယ်။ ဒါပေမယ့် Domain ထပ်ထည့်ချင်တာတို့ တခြားဟာတွေ အလွယ်တကူ ချဲ့လို့လွယ်အောင် Nginx ကို Reverse proxy အနေနဲ့သုံးထားတယ်။ SSL Certificate အတွက်ကတော့ Certbot သုံးပြီး အလကားရတာပဲ သုံးလိုက်ပါတယ် ကိုယ့်ဟာကိုယ်သုံးမှာ အစိုးရလေလံမှမဟုတ်တာ ဝယ်စရာလည်း လိုအပ်တယ် မထင်ပါဘူး။ Nginx နဲ့ Certbot ကို အောက်မှာပြထားသလို Install လုပ်လို့ရပါတယ်။

sudo apt install nginx certbot python3-certbot-nginx

Nginx ကို Install လုပ်ပြီးရင် ကိုယ်သုံးမယ့် Domain အတွက် Config တခုလုပ်ပေးရမယ် /etc/nginx/sites-enabled/ အောက်မှာ your.domain.whatever ဆိုပြီး File တခုရေးပြီး အောက်မှာ နမူနာပြထားတဲ့ Config ကိုသုံးလို့ရတယ်။ မှတ်ရလွယ်အောင် Domain နာမည်ပေးထားနေကျဖြစ်နေလို့ your.domain.whatever လို့ပေးထားတာ File နာမည်က ကြိုက်တာပေးလို့ ရပါတယ်။ Config ကလည်း ဘာမှထွေထွေ ထူးထူးမပါပါဘူး Shadowsocks က Port 8000 မှာ Run မယ်လို့ အပေါ်မှာပြောခဲ့လို့ 127.0.0.1:8000 သုံးထားတာ တခြားဟာသုံးရင် ပြောင်းသုံးပေါ့။

upstream local_ssv2r{ server 127.0.0.1:8000; }
server {
   listen 80;
   server_name your.domain.whatever;

   location / {
     proxy_pass  http://local_ssv2r;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection upgrade;
     proxy_set_header Host $http_host;
  }
}

သုံးမယ့် Domain အတွက် Config File ရရင် အောက်မှာပြထားသလို Enable လုပ်ပြီးရင် တဆင့်ပြီးပါပြီ http နဲ့ဆိုရင် သုံးလို့ရနေပါပြီ။

sudo ln -s /etc/nginx/sites-available/your.domain.whatever /etc/nginx/sites-enabled/your.domain.whatever
sudo systemctl restart nginx

နောက်တဆင့်အနေနဲ့ ကိုယ့် Domain အတွက် Certbot နဲ့ SSL Certificates တွေ Request လုပ်ဖို့လိုမယ် အင်မတန်ခက်ခဲတယ် မထင်ပါနဲ့ အောက်မှပြထားတဲ့ Command ဆိုရင်ရပြီ။ သူ့ Menu မှာမေးလာမယ့် ဘယ် Domain အတွက် Request လုပ်ချင်တာလဲ မှန်အောင်ရွေးပါ နောက်ဆုံးအဆင့်မှာ http တွေကို https အနေနဲ့ Redirect လုပ်ချင်လားမေးတဲ့နေရာမှာ Redirect လုပ်ဖို့ရွေးပါ။ အခုနောက်ပိုင်း Certbot က Idiot-proof အတော်ဖြစ်ပါတယ် Renew လည်း ကိုယ်တိုင်လုပ်စရာ မလိုတော့ပါဘူး သူ့ဟာသူလုပ်ပါတယ်။

sudo certbot --nginx
sudo systemctl restart nginx

Clients

Shadowsocks နဲ့ V2Ray Plugin ကလည်း Run နေပြီ ကိုယ့်ရဲ့ Domain ကလည်း SSL နဲ့ Nginx မှာ Configure လုပ်ပြီးသွားရင် အောက်မှာပြထားသလို Config မျိုးနဲ့ Shadowsocks ကို V2Ray Plugin နဲ့ Support လုပ်တဲ့ Client App တွေနဲ့ သုံးလို့ရပါပြီ။

[
  {
    "server": "your.domain.whatever",
    "server_port": 443,
    "password": "STRONG_PASSWORD",
    "method": "aes-256-gcm",
    "plugin": "v2ray-plugin",
    "plugin_opts": "host=your.domain.whatever;tls",
    "remarks": "",
    "route": "all",
    "remote_dns": "dns.google",
    "ipv6": true,
    "metered": false,
    "proxy_apps": {
      "enabled": false
    },
    "udpdns": false
  }
]

Android မှာဆိုရင် Shadowsocks App ရယ် V2ray Plugin ရယ် Install လုပ်ပြီးရင် သုံးလို့ရတယ်။ iOS မှာဆိုရင် Shadowrocket နဲ့ အဆင်ပြေတယ် Shadowrocket က Free တော့မဟုတ်ပါဘူး $2.99 တော့ပေးရတယ် တခြားဟာတွေလည်း ရတာရှိပါလိမ့်မယ် တွေ့ရင်ထပ်ပြောထားမယ်။ Computer တွေပေါ်က Command line သုံးမယ်ဆိုရင်တော့ ပြဿနာမရှိပါဘူး GUI တွေနဲ့က ကိုယ်လည်းသုံးတော့မသိဘူး ရှာဖွေကြည့်ပါရှိပါလိမ့်မယ်။

Other

တခုသတိထားရမှာက Shadowsocks ဆိုပေမယ့် V2Ray ပါနေတဲ့အတွက် Outline လို Client တွေနဲ့ အလုပ်မလုပ်ပါဘူး Shadowsocks ပဲ လိုချင်ရင်တော့ ဒီလောက် အလုပ်ရှုပ်မခံပါနဲ့ Outline Server ပဲ Install လုပ်လိုက်ပါ။ အခုရေးထားတာက Installation Setup အတွက်ပဲ လိုအပ်တဲ့လူတွေ သုံးလို့ရအောင်ရယ် ကိုယ်ပြန်လိုချင်ရင် ရှာလို့ရအောင် ရေးထားတာပါ သုံးလို့ရရုံပဲဖြစ်လို့ Usage Monitor တို့ User management တို့ မပါပါဘူး။ အဲဒါအပြင် Installation အပြင်က Infrastructure တွေ IaaS တွေရဲ့ Specific features တွေဖြစ်တဲ့ IP တွေက အရှင်ဖြုတ်တို့ တပ်လို့ရမှာလားတို့ DNS တွေက ဘယ်လိုဟာတွေတို့ စသည်ဖြင့် တခြားဟာတွေက ထည့်မရေးထားပါဘူး။ အခုအချိန်မှာ Install လုပ်နည်းတွေ ရေးပေးရတာကလည်း နှစ်ဘက်သွားဓားလိုပဲ ခွေးလမ်းပြသလို ဖြစ်မှာလည်းရှိတော့ ပြဿနာမရှိတာပဲ ရေးထားပါတယ်။ အနည်းဆုံးတော့ လုပ်နိုင်တဲ့လူတွေ ကိုယ်ဟာကိုယ် သုံးချင်ရင်သုံး ကိုယ့်မိသားစုတွေ ပေးသုံးချင်သုံးနဲ့ သုံးလို့ရရင် အမြတ်ပဲပေါ့။

References

  1. Shadowsocks - https://shadowsocks.org/en/index.html
  2. Shadowsocks Cleints - https://shadowsocks.org/en/download/clients.html
  3. shadowsocks-libev - https://github.com/shadowsocks/shadowsocks-libev
  4. v2ray-plugin - https://github.com/shadowsocks/v2ray-plugin
  5. Shadowsocks-libev with v2ray-plugin installer - https://github.com/M3chD09/shadowsocks-with-v2ray-plugin-install
  6. docker image shadowsocks-libev with v2ray-plugin - https://github.com/hitian/docker-shadowsocks-with-v2ray-plugin