Sasniegt attālu /24 caur tuneli: NETMAP, DNAT vai maršruts?
Kartējiet visu prefiksu ar NETMAP, pievienojiet DNAT noteikumus katram hostam vai maršrutējiet īsto diapazonu, un izlemiet pēc tā, kas jāredz tālākajai pusei un kas drīkst sākt trafiku.
Apakštīklu aiz tuneļa galapunkta var sasniegt trīs veidos, un viena minūte faktu vākšanas parasti izslēdz divus. Fakti ir: vai serveriem tur ir jāatšķir lietotāji, vai kāds tur kādreiz mēģinās pieslēgties jūsu diapazonam, un kas drīkst rediģēt tālās puses maršrutētāju. Atbildiet uz šiem trim, un dizains izvēlēsies pats. Pārējais pieņem, ka jūs pārvaldāt galapunktu un drīkstat rediģēt tā ugunsmūri.
Trīs iespējas un to, ko katra patiešām maina
Prefiksa kartēšana, DNAT katram hostam un maršrutēts prefikss visi pārvieto paketes starp tiem pašiem diviem diapazoniem, bet maina dažādas lietas. Kartēšana izgudro aizstājvārda diapazonu un lidojumā aritmētiski pārraksta adreses. Noteikumi katram hostam arī pārraksta, tikai katrs galamērķis tiek nosaukts ar roku. Maršrutēts prefikss neko nepārraksta: paketes saglabā īstās adreses, un abi gali vienojas, kur šīs adreses atrodas.
| 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 |
Sāciet izslēgšanu no tālās puses, kur ierobežojumus ir visgrūtāk mainīt. Ja serveris tur raksta klientu adreses žurnālos, pārbauda tās pret atļauto sarakstu vai nodod citai sistēmai, avota tulkošana iznīcina tā vienīgo identifikatoru. Ja tālajai pusei arī jāpieslēdzas iekšā, tulkošana ir pilnībā izslēgta, jo tur neviens nezina, ka aizstājvārds pastāv. Tikai tad, kad tālā puse tikai atbild uz pieprasījumiem, lētākās iespējas kļūst drošas.
Prefiksu pāri un kāpēc izmēriem jāsakrīt
NETMAP ir nat tabulas mērķis, kas darbojas ar vienāda garuma prefiksu pāri. Tam iekšpusē nav tabulas katrai adresei: tas noņem prefiksu, saglabā hosta bitus un atkal piestiprina tos jaunajam prefiksam, tāpēc /24 tiek kartēts uz /24 un nekad uz /25. Pozīcija nosaka virzienu: galamērķa atbilstība PREROUTING pārraksta, kur pakete iet, un avota atbilstība POSTROUTING pārraksta, no kurienes tā nāca.
Hosts 192.168.2.17 jūsu klientiem parādās kā 10.50.1.17, un pēdējais oktets nav dekorācija — tas ir viens un tas pats skaitlis abās pusēs. Rīt pievienojiet hostu 192.168.2.40, un tā aizstājvārds būs 10.50.1.40, bez noteikuma, kas jārediģē.
Klientiem joprojām vajag maršrutu aizstājvārda diapazonam, kas norāda uz jūsu iekārtu, ja vien aizstājvārds neietilpst apakštīklā, kuru viņi jau sasniedz. Vārtejai nav vajadzīgs maršruts aizstājvārdam, jo galamērķa tulkošana notiek PREROUTING, pirms maršruta meklēšanas. Arī pāradresācijai jābūt ieslēgtai, citādi kodols pēc pārrakstīšanas paketi izmetīs. Trīs komandas zemāk ir visa konfigurācija Debian stila vārtejā, kur klienti ir br0, aizstājvārds ir 10.50.1.0/24 un tunelis ir 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 MASQUERADEAtbildei pašai jāatrod ceļš atpakaļ
Galamērķa pārrakstīšana tikai izlemj, kur pakete tiks piegādāta. Tālajam serverim joprojām jāatbild uz adresi, kuru tas sasniedz, un to var sakārtot divos veidos. Tulkot avotu, lai atbildes atgrieztos jūsu iekārtā, vai atstāt avotu un dot tālajai pusei maršrutu klientu diapazonam.
Masquerade izejošajā virzienā ir īsāks ceļš: viens noteikums POSTROUTING, un tālā puse redz jūsu tuneļa adresi, tāpēc tai nav vajadzīgs savs maršruts. Cena ir tā, ka katrs lietotājs sabrūk vienā adresē, un žurnāli pa lietotājiem vairs neko nenozīmē. Avota atstāšana neskartā saglabā šo informāciju, bet tad tālajai vietnei atbildes klientu diapazonam jāsūta atpakaļ pa tuneli.OpenVPN serverī tas ir push sūtīts push "route 10.50.9.0 255.255.255.0", plus route 192.168.2.0 255.255.255.0 rinda.
Dārgais neveiksmes gadījums ir darīt pusi no katra. Ja maskējat daļu trafika, kamēr tālā puse arī nes atgriešanās maršrutu citam trafikam, atbildes ierodas saskarnē, kur savienojuma izsekošanas ieraksts nekad nav redzēts. Klients ziņo par taimautu pieprasījumam, kuru serveris reģistrēja kā apkalpotu. Abiem plūsmas virzieniem jāšķērso tā pati netfilter instance: viena vārteja tulko, nevis divi ugunsmūri virknē.
conntrack -L -d 10.50.1.17
iptables -t nat -L PREROUTING -v -nLasiet ierakstu abos virzienos: sākotnējā tuple patur jūsu aizstājvārdu galamērķī, bet atbildes tuple nes īsto adresi. Ja atbildes tuple nav, problēma ir atgriešanās ceļš, nevis noteikums. Ja PREROUTING skaitītāji nekad nav kustējušies, pakete nekad nav sasniegusi šo hook.
Sadursmes un meklēšana, kas notiek pirmā
Divi dažādi diapazoni var sadurties, un abi gedējumi izskatās kā salauzts tunelis, nevis slikts noteikums. Jūsu izgudrotajam aizstājvārdam jābūt neizmantotam visā ceļā, un īstajam tālajam diapazonam jau nedrīkst būt jūsu tīklā. Dublikāts rada periodisku trafiku uz nepareizo hostu, ko diagnosticēt ir grūtāk nekā atteiktu savienojumu. Pirms pievienojat noteikumu, pajautājiet maršrutu tabulai.
Vārtejā, ip route get 192.168.2.17 jānorāda tuneļa ierīce; vietējais bridge nozīmē, ka tālais diapazons ir aizēnots un neviena nat noteikums to nelabos. Ja jūsu tīkls jau izmanto 192.168.2.0/24, pārnumurējiet tālo vietni, nevis kraujiet kartējumu uz sadursmes.
Pārbaudīt no īsta klienta, pēc tam saglabāt
Pārbaudiet no mašīnas, kas patiešām izmantos aizstājvārdu, nevis no vārtejas, jo lokāli ģenerēts trafiks nekad nešķērso PREROUTING tāpat. Atveriet savienojumu uz vienu hostu ar aizstājvārdu un vērojiet, kā kopā parādās skaitītāji un conntrack ieraksts, tad aizveriet un apstipriniet, ka ieraksts pazūd. Novecojis ieraksts norāda uz pusatvērtu savienojumu, kas parasti nozīmē, ka atbilde nekad nav atgriezusies.
curl -sv http://10.50.1.17/ -o /dev/null
ss -tn dst 10.50.1.17
conntrack -L -d 10.50.1.17Divi vai trīs veiksmīgi savienojumi pierāda aritmētiku, bet neko nepasaka par noturību vai nākamo inženieri. Saglabājiet noteikumus tur, kur tos nolasa sāknēšanas process, kas Debian un Ubuntu nozīmē iptables-save > /etc/iptables/rules.v4 ar iespējotu netfilter-persistent. Kartējums, kas pazūd pēc pārstartēšanas, ir sliktāks par nekādu, jo pārtraukums nāk bez nesenām izmaiņām, ko vainot.
Atstājiet piezīmi pie noteikumiem: aizstājvārda diapazons, īstais diapazons, pāra iemesls un kura puse drīkst uzsākt. Šī piezīme atdala dizainu no noteikumu kaudzes, ko neviens neuzdrīkstas dzēst. Tā arī atrisina vēlāko jautājumu, kad tālā vietne pievieno hostu un adrese, ko neviens nav konfigurējis, jau atbild. Ja piezīme saka, ka tālajai pusei vajadzīgs atgriešanās maršruts, nākamais cilvēks zina, ka masquerade noteikuma noņemšana pārtrauc savienojamību. Dokumentācija šeit ir lēta; no jauna atklāt NAT atkarību trijos naktī — nav.