Dé /24 tó jìnnà nípasẹ̀ tunnel: NETMAP, DNAT tàbí ọ̀nà?
Ṣàwòrán gbogbo àkọ́kọ́ pẹ̀lú NETMAP, fi àwọn òfin DNAT kún fún olùgbàlejò kọ̀ọ̀kan tàbí darí ìwọ̀n gidi, kí o sì pinnu nípa ohun tí ẹ̀gbẹ́ jìnnà gbọ́dọ̀ rí àti ẹni tí ó lè bẹ̀rẹ̀ ìṣàn.
O lè dé abẹ́ àwòrán kan tó wà lẹ́yìn ìparí tunnel ní ọ̀nà mẹ́ta, àti ìṣẹ́jú kan tí a fi ń kó òtítọ́ máa ń yọ méjì kúrò. Àwọn òtítọ́ ni bóyá àwọn sáfà níbẹ̀ gbọ́dọ̀ yà àwọn olùlò sí ọ̀tọ̀ọ̀tọ̀, bóyá ẹnìkan níbẹ̀ yóò máa pe sí ìwọ̀n rẹ, àti ẹni tí ó lè ṣàtúnṣe rótà àkọ́kẹ̀yìn. Dáhùn àwọn mẹ́ta yẹn, àpẹẹrẹ yóò yan ara rẹ̀. Ìyókù gbà pé ìwọ ń darí ìparí náà àti pé o lè ṣàtúnṣe firewall rẹ̀.
Àwọn àṣàyàn mẹ́ta, àti ohun tí ọ̀kọ̀ọ̀kan ń yí padà ní ti gidi
Ṣíṣe àwòrán àkọ́kọ́, DNAT fún olùgbàlejò kọ̀ọ̀kan àti àkọ́kọ́ tí a darí gbogbo wọn ń gbé àwọn pákítì láàrín ìwọ̀n méjì kan náà, ṣùgbọ́n wọ́n ń yí ohun tó yàtọ̀ padà. Àwòrán ń dá ìwọ̀n orúkọ mìíràn, ó sì ń tún àwọn àdírẹ́sì kọ ní ìṣirò nígbà ìrìnàjò. Àwọn òfin olùgbàlejò kọ̀ọ̀kan náà ń tún kọ, ṣùgbọ́n a ń fi ọwọ́ pe orúkọ gbogbo ibi tí a ń lọ. Àkọ́kọ́ tí a darí kò tún ohunkóhun kọ: àwọn pákítì ń pa àwọn àdírẹ́sì gidi mọ́, ẹ̀gbẹ́ méjèèjì sì gbà nípa ibi tí àwọn àdírẹ́sì yẹn wà.
| 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 |
Bẹ̀rẹ̀ yíyọ kúrò ní ẹ̀gbẹ́ jìnnà, níbi tí àwọn ààlà ti ṣòro jùlọ láti yí padà. Tí sáfà níbẹ̀ bá ń kọ àwọn àdírẹ́sì oníbàárà sínú àkọsílẹ̀, ń ṣàyẹ̀wò wọ́n pẹ̀lú àkọ́jọ àwọn tí a gbà, tàbí ń fi wọ́n lé ètò mìíràn lọ́wọ́, ìtumọ̀ orísun yóò pa ìdánimọ̀ kan ṣoṣo rẹ̀ run. Tí ẹ̀gbẹ́ jìnnà bá tún ní láti pe sí inú, ìtumọ̀ kò ṣeéṣe rárá, nítorí ẹnikẹ́ni níbẹ̀ kò mọ̀ pé orúkọ mìíràn wà. Nìkan nígbà tí ẹ̀gbẹ́ jìnnà bá ń dáhùn àwọn ìbéèrè nìkan ni àwọn àṣàyàn tó pọ̀ sí i yóò di àìléwu.
Àwọn péré àkọ́kọ́, àti ìdí tí ìwọ̀n gbọ́dọ̀ bára wọn mu
NETMAP jẹ́ àfojúsùn tábìlì nat tí ó ń ṣiṣẹ́ lórí péré àkọ́kọ́ tí ó ní ìgùn kan náà. Kò ní tábìlì fún àdírẹ́sì kọ̀ọ̀kan nínú: ó ń yọ àkọ́kọ́ kúrò, ó ń pa àwọn bítì olùgbàlejò mọ́, ó sì ń so wọ́n mọ́ àkọ́kọ́ tuntun, ìdí nìyẹn tí /24 fi ń yà sí /24 tí kò sì yà sí /25 rárá. Ipò ni ó ń pinnu ọ̀nà: ìbámu ibi tí a ń lọ nínú PREROUTING ń tún kọ ibi tí pákítì ń lọ, ìbámu orísun nínú POSTROUTING ń tún kọ ibi tí ó ti wá.
Olùgbàlejò kan ní 192.168.2.17 farahàn fún àwọn oníbàárà rẹ gẹ́gẹ́ bí 10.50.1.17, àti ọ̀kẹ́ẹ̀yìn tí ó kẹ́yìn kì í ṣe ọ̀ṣọ́ — ó jẹ́ nọ́mbà kan náà ní ẹ̀gbẹ́ méjèèjì. Fi olùgbàlejò kún ní 192.168.2.40 lọ́la, orúkọ mìíràn rẹ̀ yóò jẹ́ 10.50.1.40, kò sí òfin tí a yóò ṣàtúnṣe.
Àwọn oníbàárà ṣì nílò ọ̀nà fún ìwọ̀n orúkọ mìíràn tí ó ń tọ́ka sí àpótí rẹ, àyàfi tí orúkọ mìíràn bá wà nínú abẹ́ àwòrán tí wọ́n ti dé. Gáètì kò nílò ọ̀nà fún orúkọ mìíràn, nítorí ìtumọ̀ ibi tí a ń lọ ń ṣiṣẹ́ nínú PREROUTING, ṣáájú wíwa ọ̀nà. Fífi kọjá gbọ́dọ̀ wà ní ṣíṣí pẹ̀lú, bí bẹ́ẹ̀ kọ́ kẹ́nẹ́lì yóò sọ pákítì nù lẹ́yìn àtúntọ̀. Àwọn àṣẹ mẹ́ta tó wà nísàlẹ̀ ni gbogbo ètò lórí gáètì ará Debian pẹ̀lú àwọn oníbàárà lórí br0, orúkọ mìíràn lórí 10.50.1.0/24 àti tunnel lórí tun0.
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Ìdáhùn gbọ́dọ̀ wá ọ̀nà ìpadà fún ara rẹ̀
Àtúntọ̀ ibi tí a ń lọ ń pinnu nìkan ibi tí a ó gbé pákítì lọ. Sáfà jìnnà ṣì gbọ́dọ̀ dáhùn àdírẹ́sì tí ó dé, àti pé a lè ṣètò rẹ̀ ní ọ̀nà méjì. Túmọ̀ orísun kí àwọn ìdáhùn lè padà sí àpótí rẹ, tàbí fi orísun sílẹ̀ kí o sì fún ẹ̀gbẹ́ jìnnà ní ọ̀nà fún ìwọ̀n oníbàárà.
Masquerade ní ọ̀nà jáde ni ọ̀nà tó kúrú: òfin kan nínú POSTROUTING àti ẹ̀gbẹ́ jìnnà yóò rí àdírẹ́sì tunnel rẹ, nítorí kò nílò ọ̀nà tirẹ̀. Iye ni pé gbogbo olùlò yóò wọ inú àdírẹ́sì kan, àwọn àkọsílẹ̀ fún olùlò kọ̀ọ̀kan kò sì ní ìtumọ̀ mọ́. Fífi orísun sílẹ̀ bí ó ti wà ń pa ìsọfúnni yẹn mọ́, ṣùgbọ́n nígbà yẹn ojú-ìwé jìnnà gbọ́dọ̀ fi àwọn ìdáhùn fún ìwọ̀n oníbàárà padà nípasẹ̀ tunnel.OpenVPN sáfà, ìyẹn ni push "route 10.50.9.0 255.255.255.0" tí a fi push rán, pẹ̀lú route 192.168.2.0 255.255.255.0 ìlà.
Ìkùnà tó ń náni ni ṣíṣe ìdajì ọ̀kọ̀ọ̀kan. Tí o bá ń ṣe masquerade fún apá kan ìṣàn nígbà tí ẹ̀gbẹ́ jìnnà ń gbé ọ̀nà ìpadà fún ìṣàn mìíràn pẹ̀lú, àwọn ìdáhùn yóò wá sí ojú-ìsọ̀rọ̀ kan níbi tí a kò tíì rí àkọsílẹ̀ ìtọ́pinpin ìsopọ̀ rí. Oníbàárà yóò jábọ́ àkókò fún ìbéèrè tí sáfà kọ sílẹ̀ gẹ́gẹ́ bí ẹni tí a ti ṣèrànwọ́. Àwọn ọ̀nà méjèèjì ìṣàn gbọ́dọ̀ gba inú ìpèdè netfilter kan náà kọjá: gáètì kan ń túmọ̀, kì í ṣe firewall méjì ní ìtẹ̀lé.
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nKa àkọsílẹ̀ ní ọ̀nà méjèèjì: tuple àkọ́kọ́ ń pa orúkọ mìíràn rẹ mọ́ ní ibi tí a ń lọ, tuple ìdáhùn sì ń gbé àdírẹ́sì gidi. Tí tuple ìdáhùn kò bá sí, ìṣòro ni ọ̀nà ìpadà, kì í ṣe òfin. Tí àwọn kíkà PREROUTING kò bá yí rárá, pákítì kò tíì dé hook yẹn.
Ìkọlù àti wíwa tí ó ń ṣiṣẹ́ kọ́kọ́
Ìwọ̀n méjì tó yàtọ̀ lè kọlù, àwọn ìkùnà méjèèjì sì dàbí tunnel tó ti bàjẹ́, kì í ṣe òfin burú. Orúkọ mìíràn tí o dá gbọ́dọ̀ jẹ́ èyí tí a kò lò ní gbogbo ọ̀nà, àti ìwọ̀n jìnnà gidi kò gbọ́dọ̀ ti wà nínú nẹ́tíwọ́kì rẹ tẹ́lẹ̀. Àkópọ̀ ń mú ìṣàn wá sí olùgbàlejò tí kò tọ́ lẹ́ẹ̀kọ̀ọ̀kan, èyí tí ó ṣòro láti ṣàyẹ̀wò ju ìsopọ̀ tí a kọ̀ lọ. Béèrè lọ́wọ́ tábìlì ọ̀nà ṣáájú kí o tó fi òfin kún.
Lórí gáètì, ip route get 192.168.2.17 yẹ kí ó dárúkọ ẹ̀rọ tunnel; bridge àdúgbò túmọ̀ sí pé ìwọ̀n jìnnà ti bò mọ́lẹ̀, kò sì sí òfin nat tí yóò tún un ṣe. Tí nẹ́tíwọ́kì rẹ bá ti ń lo 192.168.2.0/24, tú nọ́mbà ojú-ìwé jìnnà lẹ́ẹ̀kọ̀ọ̀kan dípò kí o kó àwòrán lé ìkọlù lórí.
Dán wò láti oníbàárà gidi kan, lẹ́yìn náà tọ́jú rẹ̀
Dán wò láti ẹ̀rọ tí yóò lo orúkọ mìíràn ní ti gidi, kì í ṣe láti gáètì, nítorí ìṣàn tí a dá ní àdúgbò kì í gba PREROUTING kọjá bákan náà rárá. Ṣí ìsopọ̀ sí olùgbàlejò kan tó ní orúkọ mìíràn kí o sì wo bí àwọn kíkà àti àkọsílẹ̀ conntrack ṣe ń farahàn pọ̀, lẹ́yìn náà pa á kí o sì jẹ́rìí pé àkọsílẹ̀ náà lọ. Àkọsílẹ̀ tó ti gbó yóò tọ́ka sí ìsopọ̀ tí ó ṣí mọ́lẹ̀, èyí tí ó máa ń túmọ̀ sí pé ìdáhùn kò tíì padà.
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17Ìsopọ̀ méjì tàbí mẹ́ta tó ṣàṣeyọrí ń fidi ìṣirò hàn, ṣùgbọ́n wọn kò sọ nípa ìdúróṣinṣin tàbí nípa ẹlẹ́rọ̀ tó kàn. Tọ́jú àwọn òfin síbi tí ètò ìbẹ̀rẹ̀ ń kà wọ́n, èyí tí ó túmọ̀ sí iptables-save > /etc/iptables/rules.v4 pẹ̀lú netfilter-persistent tí a ti mú ṣiṣẹ́. Àwòrán tí ó padà nù nígbà àtúnbẹ̀rẹ̀ burú ju èyí tí kò sí, nítorí ìdàrúdàpọ̀ dé láìsí àyípadà tuntun tí a lè fi ẹ̀bi.
Fi àkọsílẹ̀ sílẹ̀ lẹ́gbẹ̀ẹ́ àwọn òfin: ìwọ̀n orúkọ mìíràn, ìwọ̀n gidi, ìdí péré, àti ẹ̀gbẹ́ tí ó lè bẹ̀rẹ̀. Àkọsílẹ̀ yẹn yà àpẹẹrẹ ya kúrò nínú àkópọ̀ òfin tí ẹnikẹ́ni kò ní ìgboyà láti pa. Ó tún yanjú ìbéèrè tó ń bọ̀, nígbà tí ojú-ìwé jìnnà bá fi olùgbàlejò kún tí àdírẹ́sì tí ẹnikẹ́ni kò ṣètò ti ń dáhùn. Tí àkọsílẹ̀ bá sọ pé ẹ̀gbẹ́ jìnnà nílò ọ̀nà ìpadà, ẹni tó kàn yóò mọ̀ pé yíyọ òfin masquerade kúrò yóò já ìsopọ̀. Ìwé-ìkọ̀wé jẹ́ rọṣọ níbí; wíwa ìgbẹ́kẹ̀lé NAT padà ní agogo mẹ́ta òru kì í ṣe bẹ́ẹ̀.