Yhden asiakkaan on päästävä toisen asiakkaan SSH-palveluun, ja altaan loppuosan pitäisi pysyä yhtä eristettynä kuin nyt. Houkutteleva kytkin on client-to-client, joka kytkee vertaisten välisen pääsyn kaikille kerralla päälle ja antaa päätöksen OpenVPN-palvelulle ytimen sijaan. Suppeampi vastaus pitää tuon kytkimen pois päältä ja antaa palvelimen oman reitityksen ja palomuurin kantaa täsmälleen yhden virtauksen.

Mekanismi merkitsee enemmän kuin säännön teksti, koska kaksi lähestymistapaa sijoittavat paketin eri paikkoihin. Sen tietäminen, kumman valitsit, selittää sekä säännön, joka näyttää tekevän ei mitään, että vertaisen, joka yhdistää ilman sitä.

Minne client-to-client siirtää paketin

Kun client-to-client on päällä, palvelin välittää vertaisen paketin sisäisesti sen sijaan, että lähettäisi sen takaisin tunnelilaitteen kautta, joten paketti ei koskaan saavu ytimen välityspolulle. Se on kätevää, ja se tarkoittaa myös, että palomuurisi ei koskaan näe virtausta, jota sen pitäisi valvoa. Jätä vaihtoehto pois päältä, niin palvelin reitittää paketin takaisin saman rajapinnan kautta, mikä asettaa sen netfilterin eteen. Sama rajapinta sisään, sama rajapinta ulos, ja FORWARD-ketju saa äänen.

Vaihtokauppa on selvä: saat yhden käytäntöpisteen ja otat hoitaaksesi reitityksen ja välityksen, jonka oikotie teki puolestasi. Työ on pieni yhdelle virtaukselle ja kasvaa jokaisen lisäämäsi poikkeuksen myötä. Laske poikkeukset nyt, koska sääntöjoukko on paikka, jossa vertaiskäytäntö todella asuu.

Polku, jonka vertaisen paketti todella kulkee

Oleta Linux Community OpenVPN 2.6 -palvelu, käyttäjäavaruuden TUN-käsittely DCO:n sijaan, aliverkkotopologia, tun0 ja allas 10.44.0.0/24 asiakkaan A ollessa 10.44.0.21 ja asiakkaan B 10.44.0.37. Aliverkkotopologiassa A:n saama osoite ja verkkomaski kattavat jo altaan, joten A lähettää paketin tunnelilaitteelle ilman ylimääräistä työnnettyä reittiä. Tarkista tehollinen reitti A:lla sen sijaan, että olettaisit sellaisen.

Palvelimella paketti saapuu B:lle osoitettuna, mikä ei ole paikallinen osoite, joten se välitetään. IPv4:n välityksen on oltava päällä, jotta se ylipäätään tapahtuu, ja reittihaun on lähetettävä paketti takaisin tun0 kautta. Palomuuri näkee siis välitetyn virtauksen, jossa on sama rajapinta molemmin puolin, ja juuri sen yksityiskohdan useimmat sääntöjoukot jättävät huomaamatta. Täällä ei tarvita lähdeosoitteen käännöstä, ja A:n osoitteen säilyttäminen ehjänä on se, mikä antaa B:lle mahdollisuuden soveltaa omaa lähdeperusteista sääntöään.

Kaksi sääntöä palvelimella, tässä järjestyksessä

Kolme sääntöä kantaa koko luvan: välitys, parin poikkeus ja oletushylkäys tunneliparille. Hyväksyntäsääntö nimeää parin ja palvelun, joten lupa kestää kasvavan altaan. Sijoita se ennen mitään yleistä tunnelien välistä liikennettä koskevaa kieltoa, koska ensimmäinen osuma voittaa:

sysctl -w net.ipv4.ip_forward=1
iptables -A FORWARD -i tun0 -o tun0 -s 10.44.0.21 -d 10.44.0.37 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -j DROP

Nuo komennot ovat havainnollistavia ja kuuluvat siihen mekanismiin, jolla isäntäsi säilyttää säännöt; ajonaikainen lisäys katoaa seuraavassa käynnistyksessä. Tilallinen sääntö on se, joka päästää B:n vastaukset ja TCP-kättelyn palaamaan ilman toista, peilattua hyväksyntää.

Tarkista laskurit jälkeenpäin, älä sääntöluetteloa, koska sääntö, joka ei koskaan osu, näyttää täsmälleen samalta kuin toimiva. Jos laskurit pysyvät nollassa, paketti ei kulje sitä polkua, jota luulet.

Mitä B:n on vielä sallittava

B ajaa SSH-palvelua, joten B päättää, kuunteleeko jokin tunneliosoitteessa ja hyväksyykö sen oma isäntäpalomuuri lähteen. Verkkolupa palvelimella ei ole lupa millekään B:n tilille, ja isäntäavaimen varmennus ja käyttäjän tunnistus pätevät edelleen kuten mistä tahansa muualta.

Testaa ensin myönteinen tapaus: tuore SSH-yhteys A:lta B:n tunneliosoitteeseen, hyväksytty odotetulla isäntäavaimella. Testaa sitten toinen vertainen tai toinen portti ja varmista, että se hylätään, koska lupa, joka hiljaa sallii kaiken, on mahdoton erottaa toimivasta, kunnes sillä on väliä. Testin molemmat puoliskot ovat tarpeen, ja toinen on se, jonka ihmiset ohittavat.

Kirjaa jaetut osoitteet, teholliset reitit molemmilla asiakkaille ja täsmälliset säännöt palvelimella ja B:llä. Onnistunut ping yhdyskäytävään tai avoin portti palvelimella ei todista tästä mitään, koska molemmat voivat pitää paikkansa, kun vertaisten välinen välitys on yhä estetty. Kirjoita ne luvut muistiin, kun tunneli on pystyssä, koska osoite, jonka asiakas saa uudelleenyhdistämisen jälkeen, voi olla eri.

Aiheeseen liittyvät artikkelit