Cyrraedd /24 o bell dros dwnnel: NETMAP, DNAT neu lwybr?
Mapio rhagddodiad cyfan gyda NETMAP, ychwanegu rheolau DNAT fesul gwesteiwr neu lwybreiddio'r amrediad go iawn, a phenderfynu yn ôl yr hyn y mae'n rhaid i'r ochr bell ei weld a phwy sy'n cael dechrau traffig.
Gallwch gyrraedd isrwydwaith y tu ôl i bwynt terfyn twnnel mewn tair ffordd, ac mae munud o gasglu ffeithiau fel arfer yn diarddel dwy. Y ffeithiau yw a oes rhaid i'r gweinyddwyr draw wahaniaethu defnyddwyr, a fydd unrhyw un yno byth yn deialu tuag at eich amrediad, a phwy sy'n cael golygu llwybrydd yr ochr bell. Atebwch y tri hynny a bydd y dyluniad yn dewis ei hun. Mae'r gweddill yn tybio eich bod yn rhedeg y pwynt terfyn ac yn cael golygu ei wal dân.
Tair opsiwn, a beth mae pob un yn ei newid mewn gwirionedd
Mae mapio rhagddodiad, DNAT fesul gwesteiwr a rhagddodiad llwybreiddiedig i gyd yn symud pecynnau rhwng yr un dau amrediad, ond maent yn newid gwahanol bethau. Mae mapio yn dyfeisio amrediad alias ac yn ailysgrifennu cyfeiriadau yn rhifyddol wrth hedfan. Mae rheolau fesul gwesteiwr hefyd yn ailysgrifennu, heblaw bod pob cyrchfan yn cael ei henwi â llaw. Nid yw rhagddodiad llwybreiddiedig yn ailysgrifennu dim: mae pecynnau yn cadw'r cyfeiriadau go iawn ac mae'r ddwy ochr yn cytuno ble mae'r cyfeiriadau hynny'n byw.
| 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 |
Dechreuwch y dileu ar yr ochr bell, lle mae'r cyfyngiadau anoddaf i'w newid. Os yw gweinydd yno yn ysgrifennu cyfeiriadau cleientiaid i logiau, yn eu gwirio yn erbyn rhestr ganiatáu, neu'n eu trosglwyddo i system arall, mae cyfieithu'r ffynhonnell yn dinistrio ei unig adnabyddiaeth. Os oes rhaid i'r ochr bell hefyd ddeialu i mewn, mae cyfieithu allan yn gyfan gwbl, oherwydd nid oes neb yno yn gwybod bod yr alias yn bodoli. Dim ond pan fo'r ochr bell yn ateb ceisiadau yn unig y mae'r opsiynau rhatach yn ddiogel.
Parau rhagddodiad, a pham mae'n rhaid i'r meintiau gyfateb
Mae NETMAP yn darged tabl nat sy'n gweithio ar bâr o ragddodiadau o'r un hyd. Nid oes ganddo dabl fesul cyfeiriad y tu mewn: mae'n tynnu'r rhagddodiad, yn cadw'r darnau gwesteiwr ac yn eu hailgysylltu â'r rhagddodiad newydd, a dyna pam mae /24 yn mapio i /24 ac yn byth i /25. Mae safle yn penderfynu cyfeiriad: mae cyfatebiaeth cyrchfan yn PREROUTING yn ailysgrifennu i ble mae pecyn yn mynd, ac mae cyfatebiaeth ffynhonnell yn POSTROUTING yn ailysgrifennu o ble y daeth.
Mae gwesteiwr yn 192.168.2.17 yn ymddangos i'ch cleientiaid fel 10.50.1.17, ac nid yw'r octed olaf yn addurn — yr un rhif yw ar y ddwy ochr. Ychwanegwch westaiwr yn 192.168.2.40 yfory a'i alias yw 10.50.1.40, heb unrhyw reol i'w golygu.
Mae cleientiaid yn dal i fod angen llwybr ar gyfer yr amrediad alias sy'n pwyntio at eich blwch, oni bai bod yr alias o fewn isrwydwaith maent eisoes yn ei gyrraedd. Nid oes angen llwybr ar y giât ar gyfer yr alias, oherwydd mae cyfieithu cyrchfan yn rhedeg yn PREROUTING, o flaen y chwiliad llwybr. Rhaid i'r anfon ymlaen fod ymlaen hefyd, neu bydd y cnewyllyn yn gollwng y pecyn ar ôl yr ailysgrifennu. Y tair gorchymyn isod yw'r gosodiad cyfan ar giât ar ddull Debian gyda chleientiaid ar br0, yr alias ar 10.50.1.0/24 a'r twnnel ar 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 MASQUERADERhaid i'r ateb ddod o hyd i'w ffordd yn ôl ei hun
Mae ailysgrifennu'r gyrchfan yn unig yn penderfynu ble mae pecyn yn cael ei ddanfon. Rhaid i weinydd yr ochr bell ateb cyfeiriad y gall ei gyrraedd o hyd, ac mae dwy ffordd i drefnu hynny. Cyfieithwch y ffynhonnell fel bod atebion yn dychwelyd i'ch blwch, neu gadewch y ffynhonnell yn llonydd a rhowch lwybr i'r ochr bell ar gyfer amrediad y cleientiaid.
Mae cuddliwio ar y ffordd allan yn y llwybr byrraf: un rheol yn POSTROUTING ac mae'r ochr bell yn gweld cyfeiriad eich twnnel, felly nid oes angen llwybr ei hun arno. Y gost yw bod pob defnyddiwr yn cwympo i mewn i un cyfeiriad, ac mae logiau fesul defnyddiwr yn stopio golygu unrhyw beth. Mae cadw'r ffynhonnell yn gyfan yn cadw'r wybodaeth honno, ond yna rhaid i'r safle pell anfon atebion ar gyfer amrediad y cleientiaid yn ôl trwy'r twnnel. Ar OpenVPN gweinydd dyna push "route 10.50.9.0 255.255.255.0", ynghyd â llinell route 192.168.2.0 255.255.255.0.
Y methiant costus yw gwneud hanner pob un. Os ydych yn cuddliwio rhywfaint o draffig tra bod yr ochr bell hefyd yn cario llwybr yn ôl ar gyfer traffig arall, mae atebion yn cyrraedd rhyngwyneb lle na welwyd y cofnod olrhain cysylltiad erioed. Mae'r cleient yn adrodd terfyn amser am gais y cofnododd y gweinydd fel un a wasanaethwyd. Rhaid i'r ddau gyfeiriad o lif groesi'r un enghraifft netfilter: un giât yn cyfieithu, nid dwy wal dân mewn cyfres.
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nDarllenwch y cofnod yn y ddau gyfeiriad: mae'r tuple gwreiddiol yn cadw eich alias ar y gyrchfan, tra bod tuple yr ateb yn cario'r cyfeiriad go iawn. Os yw tuple yr ateb yn absennol, y llwybr dychwelyd yw'r broblem yn hytrach na'r rheol. Os na symudodd y cyfrifwyr PREROUTING erioed, ni chyrhaeddodd y pecyn y bachyn hwnnw.
Gwrthdrawiadau a'r chwiliad sy'n rhedeg gyntaf
Gall dau amrediad gwahanol wrthdaro, ac mae'r ddau fethiant yn edrych fel twnnel wedi torri yn hytrach na rheol wael. Rhaid i'r alias a ddyfeisiwch fod yn ddi-wasanaeth ar hyd y llwybr cyfan, ac ni ddylai amrediad go iawn yr ochr bell fodoli'n barod ar eich rhwydwaith. Mae dyblyg yn cynhyrchu traffig ysbeidiol i'r gwesteiwr anghywir, sy'n anoddach ei ddiagnosio na chysylltiad wedi'i wrthod. Holwch y tabl llwybreiddio cyn ychwanegu rheol.
Ar y giât, ip route get 192.168.2.17 ddylai enwi dyfais y twnnel; mae pont leol yn golygu bod yr amrediad pell yn cael ei gysgodi ac ni fydd unrhyw reol nat yn ei thrwsio. Os yw eich rhwydwaith eisoes yn defnyddio 192.168.2.0/24, ailrifwch y safle pell yn lle pentyrru mapio ar y gwrthdrawiad.
Ei brofi o gleient go iawn, ac yna ei gadw
Profwch o beiriant a fydd yn defnyddio'r alias mewn gwirionedd, nid o'r giât, oherwydd nid yw traffig a gynhyrchir yn lleol byth yn croesi PREROUTING yr un ffordd. Agorwch gysylltiad â gwesteiwr alias ac arsylwch y cyfrifwyr a'r cofnod conntrack yn ymddangos gyda'i gilydd, yna ei gau a chadarnhau bod y cofnod yn gadael. Mae cofnod hen yn dynodi cysylltiad hanner-agored, sydd fel arfer yn golygu na ddaeth yr ateb byth yn ôl.
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17Mae dau neu dri chysylltiad llwyddiannus yn profi'r rhifyddeg, ond nid ydynt yn dweud dim am barhad nac am y peiriannydd nesaf. Cadwch y rheolau lle mae'r broses gychwyn yn eu darllen, sydd ar Debian ac Ubuntu yn golygu iptables-save > /etc/iptables/rules.v4 gyda netfilter-persistent wedi'i alluogi. Mae mapio sy'n diflannu ar ailgychwyn yn waeth nag un o gwbl, oherwydd mae'r diffyg yn dod heb newid diweddar i'w feio.
Gadewch nodyn wrth ymyl y rheolau: yr amrediad alias, yr amrediad go iawn, y rheswm dros y pâr a pha ochr sy'n cael dechrau. Mae'r nodyn hwnnw'n gwahanu dyluniad oddi wrth bentwr o reolau nad oes neb yn meiddio eu dileu. Mae hefyd yn setlo'r cwestiwn diweddarach, pan fydd y safle pell yn ychwanegu gwesteiwr ac mae cyfeiriad nad oes neb wedi'i ffurfweddu yn ateb yn barod. Os yw'r nodyn yn dweud bod angen llwybr yn ôl ar yr ochr bell, mae'r person nesaf yn gwybod bod tynnu'r rheol guddliwio yn torri cysylltedd. Mae dogfennu yn rhad yma; nid yw ailddarganfod dibyniaeth NAT am dair yn y bore.