VirtualBox VPN laboratorija: vārtejas VM pret tīklu tikai resursdatoram
Izvēlieties starp maršrutētu vārtejas VM un segmentu tikai resursdatoram VirtualBox VPN laboratorijai, un pēc tam lieciet viesim slēgti neizdoties, kad tunelis krīt.
Jums jāizlemj, cik daudz mehānisma ir pelnījusi jūsu VPN laboratorija. Maršrutēta vārtejas VM starp diviem VirtualBox segmentiem atveido adrešu tulkošanu, atgriešanās ceļu un ugunsmūra pozīciju, aiz kura sēž īsts klients. Viens vienīgs tikai resursdatora segments dod vienas kontrolētas durvis un neko vairāk. Vārtejas versija maksā trīs viesus un maršrutēšanas tabulu, kuru uzturat; tikai resursdatora versija maksā vienu viesi un vienu politiku. Trīs jautājumi tos šķir, un trešais izlemj, vai jūsu tests vispār var izturēt.
Atbildiet uz trim jautājumiem, pirms kaut ko klonējat
Sāciet ar to, kas VPN serverim jānovēro. Ja serverim jāredz avota adrese, kas nav testa viesa adrese, kaut kam starp tām jātulko, un tam kaut kam jābūt maršrutētājam, kuru kontrolējat. Tīkls tikai resursdatoram dod resursdatoram adapteri viesa segmentā, nevis tulkotāju. Kad viesim pēc tam jāsasniedz kaut kas ārpusē, jūs pievienojat NAT adapteri, un pats VirtualBox NAT dzinējs pārraksta avotu, neprasot jums.
Pēc tam jautājiet, vai viesis drīkst sasniegt kaut ko citādi kā tikai pa tuneli. Šī atbilde izvēlas iekšējo vai tikai resursdatora, un tieši šo jautājumu lielākā daļa laboratoriju aprakstu izlaiž. Visbeidzot jautājiet, kam jānotiek, kad tunelis krīt, jo tas nosaka politiku, nevis topoloģiju, un laboratorija, kas pierāda tikai laimīgo ceļu, nav pārbaudījusi gandrīz neko.
| What the test requires | Routed gateway VM | Host-only guest |
|---|---|---|
| Server sees a translated source address | Yes, from your own MASQUERADE rule | No, VirtualBox NAT does it instead |
| The guest has exactly one egress | Yes, while the second adapter faces the tunnel | Only until a NAT adapter is attached |
| Policy is testable during a tunnel failure | Rules live in one place | Rules live on each guest |
Savienojiet trīs lomas ar iekšējiem tīkliem
Izmantojiet trīs viesus un divus nosauktus segmentus, un vārteja lai ir vienīgā mašīna, kurai ir adapteris abos:
VBoxManage modifyvm lab-client --nic1 intnet --intnet1 WAN
VBoxManage modifyvm lab-server --nic1 intnet --intnet1 LAN
VBoxManage modifyvm lab-gw --nic1 intnet --intnet1 WAN --nic2 intnet --intnet2 LAN
Iekšējam tīklam nav atsevišķa izveides soļa. Virkne --intnet1 ir segments: divas mašīnas to dala tikai tad, ja nosaukums sakrīt precīzi, un nekas uz resursdatora tam nav pievienots. Tieši šī pēdējā īpašība ir iemesls, kāpēc laboratorija tīri atkārtojas, jo resursdatora maršruti, tā paša VPN klients un ugunsmūris nevar nejauši sasniegt viesus. Iekšējam segmentam arī nav DHCP servera, ja vien to nepievienojat, tāpēc statiskās adreses ir īsākais ceļš.
Dodiet klientam tikai tā WAN adresi, un noklusējuma vārtejai jānorāda uz vārtejas WAN adresi. Serveris saņem LAN adresi un izmanto vārtejas LAN adresi kā savu noklusējuma vārteju. Viesim, kas tur divas adreses vienā segmentā vai kuram ir nomaldījies maršruts uz otru segmentu, ir ceļš ap maršrutētāju, un zemāk minētie testi jums melos.
Es turu teksta failu blakus VM nosaukumiem ar četrām adresēm un diviem segmentu nosaukumiem, un ielīmēju to katrā čaulā. Nedēļas vēlāk, kad profila izmaiņas kaut ko salauž, šis fails ir atšķirība starp profila atkļūdošanu un savas atmiņas atkļūdošanu.
Izvēlieties iekšējo vai tikai resursdatora segmentu tam segmentam, kuram nedrīkst būt noplūdes
Režīms tikai resursdatoram izveido virtuālu adapteri pašā resursdatorā, parasti vboxnet0, un dod resursdatoram adresi viesa segmentā. Tas ir ērti administrēšanai un nāvējoši izolācijas testam, jo resursdators tagad var tieši sasniegt viesi, un katrs resursdatora puses pakalpojums kļūst par iespējamu ceļu. Iekšējam režīmam resursdatora adaptera vispār nav. Abus režīmus ir viegli sajaukt tīkla iestatījumu panelī, tāpēc pārbaudiet dokumentēto atšķirību, nevis etiķeti (skatiet lapu VirtualBox tīkla detaļas).
Viesim, kuram obligāti jāizmanto tunelis, iekšējais ir drošāka noklusējuma izvēle, un vārteja ir vienīgā izeja. Ja paturat tikai resursdatora režīmu, izturieties pret resursdatora adapteri kā pret pārvaldības ceļu un sakiet to skaļi: resursdators drīkst sasniegt viesi, un viesis nedrīkst varēt izmantot resursdatoru kā izeju.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Izolācija, ko varat pierādīt, ir izolācija, ko esat konfigurējis. Viesim ar vienu iekšējo adapteri, noklusējuma maršrutu pie vārtejas un bez NAT adaptera nav ceļa, kas apietu vārteju. Viesim ar tikai resursdatora adapteri un NAT adapteri ir divi ceļi, un tikai viens no tiem ir tas, kuru gribējāt pārbaudīt.
Maršrutējiet un tulkojiet uz vārtejas, un pēc tam lieciet tai slēgti neizdoties
VirtualBox nepārsūta starp segmentiem; to dara viesis. Kad VPN servera VM atrodas aiz vārtejas, ieslēdziet pārsūtīšanu un tulkojiet klienta satiksmi, kad tā iziet uz serveri:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Ar šo noteikumu serveris redz vārtejas LAN adresi klienta vietā, un tieši tā īsts klients aiz operatora NAT izskatās tīkla galvai. Saglabājiet sysctl vērtību /etc/sysctl.d/ failā, bet noteikumu tajā ugunsmūra servisā, ko izmanto distribūcija, citādi pārstartēšana klusi atgriezīs laboratoriju maršrutētā, bet netulkotā stāvoklī.
Pārsūtīšana nav autorizācija. Saskaņā ar noklusējuma FORWARD politiku ar vērtību ACCEPT viesis, kura noklusējuma maršruts norāda uz vārteju, iziet pa to saskarni, kuru izvēlēsies maršrutēšanas tabula, ar tuneli vai bez tā. Ja vārtejai ir arī NAT adapters pakešu instalēšanai, šis adapters ir strādājoša nešifrēta izeja tajā mirklī, kad tunelis krīt, un jūsu tikai-VPN tests nekad nav bijis tikai-VPN tests.
Kad serveris ir tālu un tuneli pabeidz pati vārteja, tas pats lēmums norāda uz tuneļa saskarni, nevis uz NIC, kas sasniedz internetu:
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Turiet paša tuneļa ārējo transportu un ārpusjoslas pārvaldības maršrutu atsevišķi no pārsūtītās satiksmes. Ja vienīgais veids, kā salabot vārteju, ir caur tuneli, kuru atkļūdojat, laboratorija kļūst par izslēgšanas vingrinājumu. Sērijas konsole, tikai resursdatora pārvaldības adapters vai zināma laba stāvokļa momentuzņēmums ir lētāki par salauztu maršrutētāju manuālu atjaunošanu.
Pārbaudiet ceļu no viesa, nevis no resursdatora
Strādājiet uz āru. Apstipriniet, ka klients sasniedz vārtejas WAN adresi, tad serveri caur vārteju, tad ka savienojums uz VPN portu iziet un atgriežas. Uzņemšana abās vārtejas saskarnēs parāda, vai atbilde ierodas un vai tā tiek izmesta atgriešanās ceļā, ko uzņemšana tikai klientā nevar atšķirt:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Pēc tam pierādiet izeju. Pajautājiet no viesa adrešu atspoguļošanas servisam, kādu avotu tas redz, un salīdziniet to ar pašas vārtejas izejas adresi; ja atbilde sakrīt ar resursdatora adresi, pastāv ceļš ap tuneli. Pārbaudiet, kuru risinātāju viesis faktiski izmanto, un IPv6 pārbaudiet atsevišķi, jo segments, kurā IPv6 ir ieslēgts, kamēr tunelis nes tikai IPv4, noplūst pēc projekta, nevis nejauši.
Visbeidzot apzināti salauziet to. Apturiet tuneli vai bloķējiet tā ārējo portu un atveriet jaunu savienojumu no viesa. Tam jāizdodas neveiksmīgi, un iemeslam jābūt tādam, ko varat nosaukt: nav maršruta, ir noraidīšanas noteikums vai risinātājs ir miris. Pārstartējiet tuneli un apstipriniet, ka viesis atjaunojas, nepārbuiltot tīklu. Ja mesh VPN, piemēram, Hamachi vai ZeroTier, dala laboratoriju, atcerieties, ka tiltā iekļautais adapters seko adaptera nosaukumam, nevis mesh, tāpēc tilts ir jānovirza no jauna pēc tam, kad klients instalē savu virtuālo adapteri.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Viesa tuneļa kopīgošana ar resursdatoru atspoguļo problēmu. Resursdatora noklusējuma maršruta novirzīšana uz viesi darbojas, un starpniekservaiss viesa iekšienē arī; NAT caur resursdatoru nenes viesa tuneli satiksmei, ko uzsācis resursdators. Saglabājiet segmentu nosaukumus un ugunsmūra noteikumus vienā vietā, paņemiet strādājoša stāvokļa momentuzņēmumu un pierakstiet avota adresi, ko novēroja serveris. Tad nākamā profila izmaiņa maksās vienu skripta palaidienu, nevis pārbūvētu laboratoriju.