د ټونل له لارې لرې /24 ته رسېدل: NETMAP، DNAT یا روټ؟
ټول پریفکس د NETMAP سره نقشه کړئ، د هر هوسټ لپاره DNAT قواعد اضافه کړئ یا ریښتیني حد روټ کړئ، او د دې پر بنسټ پرېکړه وکړئ چې لرې اړخ څه باید وویني او څوک کولی شي ترافیک پیل کړي.
د ټونل د پای نقطې شاته سبنیټ ته تاسو په درې لارو رسېدلی شئ، او د حقایقو راټولولو یوه دقیقه معمولاً دوه ردوي۔ حقایق دا دي: آیا هلته سرورونه باید کاروونکي توپیر کړي، آیا هلته به څوک کله ستاسو حد ته نښلوي، او څوک کولی شي د لرې اړخ روټر سم کړي۔ دې درېیو ته ځواب ورکړئ او ډیزاین پخپله غوره کېږي۔ پاتې برخه فرض کوي چې تاسو پای نقطه چلوئ او د هغې فایر وال سمولی شئ۔
درې انتخابونه، او هر یو یې په ریښتیا څه بدلوي
د پریفکس نقشه کول، د هر هوسټ لپاره DNAT او روټ شوی پریفکس ټول پاکټونه د همدې دوو حدونو ترمنځ ځای پرځای کوي، خو بېلابېل شیان بدلوي۔ نقشه کول د الیاس یو حد جوړوي او په الوتنه کې پتې په ریاضيکي ډول بیا لیکي۔ د هر هوسټ قواعد هم بیا لیکي، یوازې دا چې هر منزل په لاس نومول کېږي۔ روټ شوی پریفکس هېڅ نه بیا لیکي: پاکټونه ریښتیني پتې ساتي او دواړه پایونه موافق دي چې دا پتې چېرته اوسېږي۔
| What the far side needs | Prefix mapping | Per-host DNAT | Routed prefix |
|---|---|---|---|
| Users visible to its logs | Only without source NAT | Same condition | Yes, unchanged |
| To start a connection toward you | No, alias is local | No, same reason | Yes, both ends route |
| To absorb a new host | Yes, arithmetic only | No, one rule per address | Yes, it simply routes |
| To require no config change | Yes, with source NAT | Yes, same condition | No, it needs a route back |
د وتلو بهیر د لرې اړخ څخه پیل کړئ، چېرته چې محدودیتونه بدلول تر ټولو سخت دي۔ که هلته سرور د کاروونکو پتې په لاګونو کې لیکي، د اجازې لیست سره یې پرتله کوي یا بل سیستم ته یې سپاري، د سرچینې ژباړل د هغې یوازینی پیژندونکی له منځه وړي۔ که لرې اړخ هم باید دننه نښلوي، ژباړل په بشپړ ډول ناشونده ده، ځکه هلته هیڅوک نه پوهېږي چې الیاس شته۔ یوازې هغه وخت چې لرې اړخ یوازې غوښتنو ته ځواب وایي، ارزانه انتخابونه خوندي کېږي۔
د پریفکس جوړې، او ولې اندازې باید سره سمون ولري
NETMAP د nat جدول هدف دی چې د ورته اوږدوالي د پریفکسونو په جوړه کار کوي۔ په داخل کې د هر پتې لپاره جدول نلري: پریفکس لرې کوي، د هوسټ بټونه ساتي او نوي پریفکس ته یې بیا نښلوي، ځکه /24 پر /24 نقشه کېږي او هېڅکله پر /25 نه۔ موقعیت لوری ټاکي: په PREROUTING کې د منزل سمون بیا لیکي چې پاکټ چېرته ځي، او په POSTROUTING کې د سرچینې سمون بیا لیکي چې له کومه راغی۔
په 192.168.2.17 کې هوسټ ستاسو کاروونکو ته د 10.50.1.17 په څېر ښکاري، او وروستی اکتټ سینګار نه دی — دا په دواړو خواوو کې یو شمېر دی۔ سبا په 192.168.2.40 کې هوسټ اضافه کړئ، د هغې الیاس به 10.50.1.40 وي، د سمولو لپاره قاعده نشته۔
کاروونکو ته د الیاس حد لپاره ستاسو بکس ته اشاره کوونکې روټ لاهم اړینه ده، پرته له دې چې الیاس په هغه سبنیټ کې وي چې دوی ورته رسېږي۔ ګیټوې ته د الیاس لپاره روټ ته اړتیا نشته، ځکه د منزل ژباړه په PREROUTING کې، د روټ لټون څخه مخکې ترسره کېږي۔ فوروارډینګ هم باید فعال وي، که نه کرنل د بیا لیکلو وروسته پاکټ غورځوي۔ لاندې درې کمانډونه په br0 کې کاروونکو، په 10.50.1.0/24 کې الیاس او په tun0 کې ټونل سره د Debian سټایل ګیټوې بشپړ تنظیم دی۔
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i br0 -d 10.50.1.0/24 -j NETMAP --to 192.168.2.0/24
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADEځواب باید پخپله د بېرته تګ لاره ومومي
د منزل بیا لیکل یوازې دا ټاکي چې پاکټ چېرته رسول کېږي۔ لرې سرور لاهم باید هغې پتې ته ځواب ووایي چې ورته رسېږي، او دا په دوو لارو برابرېدلی شي۔ سرچینه ژباړئ ترڅو ځوابونه ستاسو بکس ته راستانه شي، یا سرچینه پرېږدئ او لرې اړخ ته د کاروونکو حد لپاره روټ ورکړئ۔
د وتلو په لور masquerade لنډه لاره ده: په POSTROUTING کې یوه قاعده او لرې اړخ ستاسو د ټونل پته ویني، نو خپله روټ ته اړتیا نلري۔ بیه یې دا ده چې هر کاروونکی په یوه پته کې ورکېږي، او د هر کاروونکي لاګونه معنا له لاسه ورکوي۔ سرچینه نه لمس کول هغه معلومات ساتي، خو بیا لرې سایټ باید د کاروونکو حد ځوابونه د ټونل له لارې بېرته ولېږي۔OpenVPN سرور کې دا push شوی push "route 10.50.9.0 255.255.255.0"، او همدارنګه route 192.168.2.0 255.255.255.0 کرښه۔
ګرانه ناکامي د هر یو نیمه کول دي۔ که تاسو د ترافیک یوه برخه masquerade کوئ پداسې حال کې چې لرې اړخ د بل ترافیک لپاره د بېرته تګ روټ هم اخلي، ځوابونه هغه انټرفیس ته رارسي چېرته چې د اړیکې تعقیب ثبت هېڅکله نه دی لیدل شوی۔ کاروونکی هغه غوښتنې لپاره timeout راپور ورکوي چې سرور یې د خدمت شوې په توګه ثبت کړې۔ د یوه بهیر دواړه لوري باید د یوې netfilter انسټنس له لارې تېر شي: یو ګیټوې ژباړي، په لړ کې دوه فایر وال نه۔
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nثبت دواړو لورو ته ولولئ: اصلي tuple د منزل پته ستاسو الیاس ساتي، خو د ځواب tuple ریښتینې پته اخلي۔ که د ځواب tuple نه وي، ستونزه قاعده نه ده، د بېرته تګ لاره ده۔ که PREROUTING شمېرونکي هېڅکله ونه خوځېدل، پاکټ هغه hook ته ونه رسېد۔
ټکرونه او هغه لټون چې لومړی ځغلېږي
دوه بېلابېل حدونه ټکر کېدلی شي، او دواړه ناکامۍ د بدې قاعدې پر ځای د ماتی ټونل په څېر ښکاري۔ هغه الیاس چې جوړوئ باید په ټوله لار کې نه کارول شوی وي، او ریښتینی لرې حد باید ستاسو په شبکه کې دمخه نه وي۔ تکرار وخت ناوخته غلط هوسټ ته ترافیک جوړوي، چې تشخیصول یې د رد شوې اړیکې په پرتله سخت دي۔ د قاعدې د اضافه کولو مخکې د روټینګ جدول وپوښتئ۔
په ګیټوې کې، ip route get 192.168.2.17 باید د ټونل وسیله ونوموي؛ سیمه ییز bridge معنا دا ده چې لرې حد پټ دی او هېڅ nat قاعده یې نه رغوي۔ که ستاسو شبکه دمخه 192.168.2.0/24 کاروي، د ټکر پر سر نقشه کېښودلو پر ځای لرې سایټ بیا شمېرنه کړئ۔
له ریښتیني کاروونکي ازموینه، بیا ساتل
له هغې ماشین ازموینه وکړئ چې واقعاً به الیاس کاروي، نه له ګیټوې، ځکه سیمه ییز تولید شوی ترافیک PREROUTING ته هېڅکله په همدې ډول نه تېرېږي۔ یوې الیاس لرونکې هوسټ ته اړیکه پرانیزئ او وګورئ چې شمېرونکي او conntrack ثبت یوځای ښکاري، بیا یې وتړئ او تایید کړئ چې ثبت ځي۔ زوړ ثبت نیم پرانیستې اړیکې ته اشاره کوي، چې معمولاً معنا دا ده چې ځواب بېرته نه دی راغلی۔
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17دوه یا درې بریالۍ اړیکې ریاضیات ثابتوي، خو د دوام یا بل انجنیر په اړه هېڅ نه وایي۔ قواعد دېرته وساتئ چېرته چې د بوټ بهیر یې لولي، کوم چې په Debian او Ubuntu کې iptables-save > /etc/iptables/rules.v4 د netfilter-persistent فعالولو سره معنا لري۔ هغه نقشه چې په بیا پیل کې ورکېږي تر هېڅ څخه بدتره ده، ځکه خنډ پرته له دې چې د ملامتۍ وړ نوی بدلون وي راځي۔
د قواعدو ترڅنګ یادښت پرېږدئ: الیاس حد، ریښتینی حد، د جوړې دلیل او کوم اړخ کولی شي پیل وکړي۔ هغه یادښت ډیزاین له هغه قواعدو څخه بېلوي چې هیڅوک یې د ړنګولو زړه نه لري۔ دا وروسته پوښتنه هم حل کوي، کله چې لرې سایټ هوسټ اضافه کوي او هغه پته چې هیڅوک نه ده تنظیم کړې دمخه ځواب وایي۔ که یادښت ووایي چې لرې اړخ ته د بېرته تګ روټ اړین دی، بل کس پوهېږي چې د masquerade قاعدې لرې کول اړیکه پرې کوي۔ دلته مستندیت ارزان دی؛ د شپې درې بجو NAT انحصار بیا موندل ارزان نه دي۔