TPROXY packet ကို socket အထိ ခြေရာခံခြင်း
လက်ခံ socket၊ packet mark နှင့် local policy route ကို transparent proxy ပို့ဆောင်မှုလမ်းကြောင်းတစ်ခုအဖြစ် စစ်ဆေးပါ။
အပလီကေးရှင်း ဘာမှမလက်ခံရဘဲ TPROXY ကောင်တာ တက်နိုင်သည်။ စည်းမျဉ်း ကိုက်ညီသော်လည်း local ပို့ဆောင်မှုသည် policy routing နှင့် သင့်လျော်သော လက်ခံ socket အပေါ် မှီခိုနေဆဲဖြစ်သည်။
Linux TPROXY သည် DNAT ကဲ့သို့ ဦးတည်ရာ ပြန်မရေးဘဲ traffic ကို ကြားဖြတ်နိုင်သည်။ ထို့ကြောင့် local မဟုတ်သော ဦးတည်ရာသို့ ပို့သော packet များသည် သင့်လျော်သော local socket သို့ ရောက်ရမည်။
ပို့ဆောင်မှုလမ်းကြောင်းကို လိုက်ပါ
- Traffic သည် ရည်ရွယ်ထားသော interface နှင့် address family ဖြင့် ကြားဖြတ် host သို့ ရောက်သည်။
- ကြားဖြတ်စည်းမျဉ်းနှင့် packet mark သည် local ပို့ဆောင်မှု မူဝါဒကို သတ်မှတ်သည်။
- ကိုက်ညီသော မူဝါဒစည်းမျဉ်းသည် packet များကို local အဖြစ် ပို့ဆောင်သော route ကို ရွေးသည်။
- Proxy သည် လိုအပ်သော socket option ပါသည့် ပံ့ပိုးထားသော transparent listener ကို အသုံးပြုသည်။
Kernel ၏ IPv4 ဥပမာသည် IP_TRANSPARENT အတွက် အပလီကေးရှင်း ပံ့ပိုးမှု လိုအပ်သည်။ တူညီသော port ပေါ်ရှိ သာမန် listener သို့မဟုတ် global nonlocal bind သတ်မှတ်ချက်သည် ထိုပံ့ပိုးမှုကို သက်သေမပြပါ။
| လေ့လာတွေ့ရှိချက် | နောက်ထပ် စစ်ဆေးမှု |
|---|---|
| သက်ဆိုင်သော ingress packet မရှိ | Traffic လမ်းကြောင်းနှင့် input interface |
| Packet များ ရောက်သည်၊ ကြားဖြတ်ကောင်တာ မလှုပ် | Address family၊ chain နှင့် ကိုက်ညီမှု အခြေအနေများ |
| စည်းမျဉ်း ကိုက်ညီသည်၊ local ပို့ဆောင်မှု မအောင်မြင် | Mark နှင့် policy route ရွေးချယ်မှု |
| Socket နားထောင်သည်၊ အပလီကေးရှင်း ဘာမှ မမြင် | Transparent socket စွမ်းရည်နှင့် listener ပိုင်ရှင် |
| တောင်းဆိုမှု စသည်၊ နောက်ပိုင်း တုံ့ပြန်မှုများ မအောင်မြင် | တည်ရှိပြီးသား socket ကိုက်ညီမှုနှင့် ပြန်လမ်းကြောင်းများ |
လေ့လာတွေ့ရှိချက်တိုင်းနှင့်အတူ တင်ထားသော configuration နှင့် network namespace ကို သိမ်းထားပါ။ နောက်ပိုင်း စည်းမျဉ်းတစ်ခုက mark ကို ထပ်ရေးနိုင် သို့မဟုတ် အခြား route ရွေးနိုင်သည်။ Listener သည် container ထဲတွင် လည်ပတ်နေစဉ် host တွင် ကြားဖြတ်လျှင် တရားဝင် host-local route သည် ထို container ထဲသို့ အလိုအလျောက် မပို့ဆောင်ပါ။
နောက်ပိုင်း packet များကို ထည့်သွင်းစဉ်းစားပါ
Kernel ဥပမာတွင် socket ကိုက်ညီမှုနှင့် transparent socket များ၏ packet ကို mark လုပ်သော DIVERT လမ်းကြောင်း ပါဝင်သည်။ ၎င်းကို ချန်လှပ်ပါက ပထမ ကြားဖြတ်မှု အောင်မြင်သော်လည်း နောက်ပိုင်း traffic သည် အခြားလမ်းကြောင်းတွင် ကျန်နိုင်သည်။
အပလီကေးရှင်း ပံ့ပိုးသော transparent mode နှင့် address family တစ်ခုစီအတွက် သက်ဆိုင်သော kernel စာရွက်စာတမ်းကို အသုံးပြုပါ။ IPv4 local-route command သည် IPv6 ကို မသတ်မှတ်ပါ၊ family တစ်ခုရှိ ပံ့ပိုးမှုသည် အခြားတစ်ခု၏ socket အပြုအမူကို သက်သေမပြပါ။
TPROXY သည် SOCKS ညှိနှိုင်းမှုကိုလည်း မထုတ်လုပ်ပါ။ Transparent မှ SOCKS သို့ အစိတ်အပိုင်းသည် ဦးတည်ရာကို ရှာပြီး ၎င်း၏ upstream နှင့် ညှိနှိုင်းရန် လိုအပ်ဆဲဖြစ်သည်။
REDIRECT မှ ကူးပြောင်းခြင်း
လက်ရှိ အပလီကေးရှင်းသည် မူလဦးတည်ရာကို မည်သို့ ရယူသည်ကို မှတ်တမ်းတင်ပါ။ REDIRECT သည် ဦးတည်ရာကို ပြောင်းပြီး သင့်လျော်သော ပြန်လည်ရယူမှု ယန္တရားအပေါ် မှီသည်၊ TPROXY သည် ၎င်း၏ transparent socket နှင့် routing အစီအစဉ် လိုအပ်သည်။ အပလီကေးရှင်းနှင့် ရင်းမြစ်-လိပ်စာ မူဝါဒအလိုက် ရွေးပါ။
ကြားဖြတ်မုဒ် မပြောင်းမီ ကောင်တာများကို ရွေးထားသော route၊ socket စွမ်းရည်နှင့် အပလီကေးရှင်း log တို့နှင့် တွဲပါ။ လိုအပ်သော အထောက်အကူများ ပေးသော ဖြန့်ဖြူးမှုတွင် kernel ပြန်မတည်ဆောက်ဘဲ လွတ်နေသော ပို့ဆောင်မှုအဆင့်က ပိုကောင်းသော အစမှတ် ဖြစ်သည်။