Viens publisks resursdators VPN un tīmeklim: kā sadalīt lomas
Viena publiska IP var pabeigt tuneļus, apkalpot HTTPS un sasniegt divus privātus LAN. Vispirms izlemiet, kam pieder adrese, katrs ports un pārsūtīšanas politika.
Viena iekārta var apmierināt visas trīs vajadzības vienlaikus: pabeigt tuneļus, atbildēt HTTPS un pārsūtīt starp diviem privātiem LAN. Vai tas ir saprātīgi, ir atkarīgs no trim lietām, ko var izlemt uz papīra: kam pieder publiskā adrese, kam pieder katrs porta un protokola pāris un kurai procesam ir atļauts pārsūtīt paketes. Ja tas ir pareizi, koplietotais resursdators nav nekas īpašs. Ja nepareizi, jūs pavadīsiet nedēļas nogali ar pakalpojumu, kas startē tīri un nekad neatbild.
Turpmāk aprakstītā ir lēmumu pieņemšanas procedūra, nevis būvniecības lapa. Katrs solis beidzas ar pārbaudi, kas pierāda, ka tikko pievienotā loma patiešām ir izolēta.
Izvēlieties adreses īpašnieku pirms portiem
Tuneļa galapunkts un tīmekļa serveris var koplietot kodolu; vienas adreses, porta un protokola koplietošana vienlaikus ir tas, kas neizdodas. WireGuard parasti izmanto UDP 51820, OpenVPN izmanto UDP 1194 vai TCP 443, un tīmekļa serveris izmanto TCP 443. Sāpīgais pāris ir OpenVPN pār TCP 443 blakus HTTPS, jo abi grib vienu un to pašu ligzdu, un kodols to dod tam, kas pieslēdzās pirmais. Tikai demultiplekseris priekšā, piemēram, sslh vai TLS saprotošs starpniekserveris, ļauj tiem koplietot šo portu, un tas pievieno komponentu, kura kļūme izskatās tieši kā ugunsmūra problēma.
Paskatieties uz īpašniekiem pirms kaut ko maināt: ss -lntup izdrukā katra klausošā ligzdas vietējo adresi, portu un procesu. Divas rindas, kas parāda 0.0.0.0:443, nozīmē, ka otrais pakalpojums nekad nav pieslēdzies, lai cik jautrs būtu tā init skripts. Tilts arī pārvieto īpašnieku. Kad eth0 pievienojas br0, IP pāriet uz br0 un katrs ugunsmūra noteikums, kas nosauc eth0, pārstāj atbilst, tāpēc piesaistiet pakalpojumus tiltam un apstipriniet ar ip -br addr.
Tas pats īpašumtiesību noteikums izskaidro pārsteigumu, kas parādās ar virtuālajām mašīnām. Tuneļa serveris, kas darbojas viesa iekšienē tajā pašā LAN, saglabā viesa adresi, tāpēc savienojumi uz paša resursdatora adresi paliek resursdatorā, un viesa tunelis tos nekad neredz, lai ko arī teiktu klienta profils.
Maršrutējiet starp diviem LAN vai NAT vienu pusi
Divi LAN, kas neredz viens otru, var katrs piezvanīt publiskajam resursdatoram, kas pēc tam pārsūta starp tuneļiem. Šim maršrutētajam dizainam vajag trīs lietas: ieslēgtu pārsūtīšanu, maršrutu uz katru attālo prefiksu un pārsūtīšanas politiku, kas laiž cauri tranzītu. sysctl -w net.ipv4.ip_forward=1 aptver pirmo, ip route add 10.20.0.0/24 dev wg1 otro, un nftables rinda, piemēram, nft add rule inet filter forward iifname "wg0" oifname "wg1" accept trešo.
Avota NAT ir vieglāk pievienot un grūtāk atkļūdot. Maskēšana pārraksta klienta adresi, tāpēc attālā puse redz koncentratoru, nevis īsto resursdatoru, un tās piekļuves noteikumi un žurnāli vairs nav noderīgi atribūcijai. Ja abi tīkli ir jūsējie, maršrutējiet. Ja viena puse pieder trešajai pusei, kas nepievienos atgriešanās maršrutu, NAT ir tas variants, kas iznāk šonedēļ. Jebkurā gadījumā pierakstiet adrešu plānu, jo divus pārklājošus /24 nevar maršrutēt ar nekādu konfigurāciju.
Nekas tajā, ka kaste kalpo kā interneta izeja klēpjdatoram, neliedz tai pašai kastei pabeigt ienākošos tuneļus. To liedz tikai pārklājošās adreses, un tāpēc adrešu plāns ir tas dokuments, kam ir nozīme.
Pārbaudiet sadalījumu, kad divas lomas ir apturētas
Noderīgais tests ir atņemšana: apturiet divas lomas un apstipriniet, ka trešā joprojām atbild. Tīmekļa pieprasījumam jāpabeidzas, kamēr tuneļa pakalpojums ir izslēgts, un tuneļa rokasspiedienam jāpabeidzas, kamēr tīmekļa serveris ir apturēts. Ja abi darbojas tikai tad, kad viss darbojas, jums ir nejauša atkarība, piemēram, koplietota ugunsmūra tabula, nomaldījies maršruts vai vārds, kas norāda uz nepareizu adresi.
Trīs komandas padara šo testu konkrētu. curl -sk --resolve example.test:443:203.0.113.10 https://example.test/ pierāda, ka vietējais klausītājs atbild bez ārēja DNS, wg show klientā pierāda, ka rokasspiediens ir pabeigts, un tcpdump -ni any port 51820 koncentratorā atdala maršrutēšanas problēmu no atslēgas problēmas. Rokasspiediens, kas nekad neparādās ierakstā, nomira pirms resursdatora: pakalpojumu sniedzēja ugunsmūris, nepareiza publiskā adrese vai NAT noteikums ceļā.
Atkārtojiet atņemšanu pārsūtītajiem LAN. Atvienojot vienu partneri, pingam caur koncentratoru jācieš neveiksme; atkārtoti pievienojot, pingam jāatjaunojas, neaizskarot nevienu noteikumu. Ping, kas atjaunojas tikai pēc tuneļa restartēšanas, norāda uz politiku, nevis sasniedzamību, un tas ir cits labojums.
Turiet noteikumu kopumu lasāmu, kamēr atņemat lomas. nft list ruleset jāparāda viens pieņemšanas noteikums katrai virzienam, kas jums tiešām vajadzīgs, un pārsūtīšanas ķēde, kas pieņem visu, nav atdalīšana, tā ir strādājoša demonstrācija.
Tikai IPv6 piekļuves līnijas un IPv4 pakalpojumi
Dažas piekļuves līnijas dod tikai IPv6 sasniedzamību, un pakalpojumi tomēr jāpublicē pār IPv4. Pats tunelis iet pa saimi, kas vēl laiž cauri satiksmi, kamēr publicētais pakalpojums atrodas adresē tuneļa iekšienē. Tas apgriež ierasto pieņēmumu un klusi salauž uzraudzību: ugunsmūra noteikums vai darbības laika pārbaude, kas rakstīta IPv4 ceļam, tagad uzrauga saskarni, kas neko nenes.
Pārbaudiet katru saimi atsevišķi ar curl -4 un curl -6, jo viens veiksmīgs pieprasījums neko nepasaka par ceļu, kuru neizmēģinājāt. Portu īpašumtiesības nemainās starp saimēm, bet klausītājs mainās: ss -lntup uzskaita IPv4 un IPv6 ligzdas atsevišķās rindās, un 0.0.0.0:443 neaptver [::]:443, ja vien process nav pieprasījis dual-stack ligzdu.
Pakalpojums, kas atbild vienā saimē un atsakās otrā, parasti ir klausītāja problēma, nevis maršrutēšanas. Pirms nosaukt dizainu pabeigtu, apstipriniet, ka katrai lomai ir sava adrese vai ports, ka pārsūtīšana ir ieslēgta un atļauta, un ka katra loma joprojām atbild, kad pārējās divas ir apturētas.