Postavite storitev na prenosnik za NAT na ravni operaterja, usmerite ta prenosnik na VPS prek VPN in nihče od zunaj ne more do njega. Dodate pravilo ciljnega NAT na VPS in dobite nekaj slabšega od tišine: povezave se odprejo in nato obstanejo. Odgovor ne manjka, odhaja po odjemalčevi lastni privzeti poti, kar pomeni, da ga strežnik nikoli ne vidi. Pojdite skozi teh pet preverjanj po vrsti in se ustavite pri prvem, ki ne zdrži.

Potrdite, da bo strežnik sploh posredoval

Označite to polje, preden napišete en sam prevod. Pravilo DNAT za paket, ki ga jedro noče posredovati, razčlenjevalnik pravil sprejme in nato pot posredovanja zavrže, kar ustvari časovno omejitev, ki je videti kot težava požarnega zidu.

sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1

Nastavitev v delujočem jedru ni isto kot nastavitev čez ponovni zagon. Zapišite net.ipv4.ip_forward=1 v datoteko pod /etc/sysctl.d/, zaženite sysctl --system in nato preberite vrednost nazaj, namesto da bi zaupali, da je bila datoteka prevzeta. Vsebnik, ki upravlja svoj lastni imenski prostor omrežja, potrebuje isto vrednost znotraj tega prostora, ne le na gostitelju.

Če je odčitek še vedno nič, se ustavite tukaj. Nič spodaj ne bo delovalo.

Pritrdite naslov predora, preden se nanj sklicuje katero koli pravilo

Bazen dodeljuje naslove v vrstnem redu povezav, zato lahko pravilo, napisano za današnji najem, naslednji teden tiho kaže na drugega odjemalca. Naslov vežite na identiteto potrdila in ne na vrstni red prihoda.

client-config-dir /etc/openvpn/ccd
ifconfig-push 10.77.0.14 10.77.0.13

Ta par je odjemalčev konec in konec partnerja predora točka-točka, pri čemer je strežnik vezan na skupno ime potrdila. V topologiji podomrežja se druga vrednost namesto tega bere kot omrežna maska, zato napišite obliko, ki ustreza uporabljeni topologiji. Nato znova povežite odjemalca in preberite naslov na odjemalcu samem, ker pogled strežnika na bazen ni dokaz, kaj je odjemalec nastavil.

Če se naslov po ponovni povezavi spremeni, se ustavite. Pravilo NAT, ki sledi premikajoči se tarči, bo občasno odpovedalo in vas ne bo ničesar naučilo.

Prevajajte v obe smeri

Prevod cilja pošlje vhodni paket odjemalcu. Prevod vira je tisto, kar prisili odjemalca, da odgovori strežniku in ne prvotnemu pošiljatelju, in to je pravilo, ki ga ljudje izpustijo.

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 29443 -j DNAT --to-destination 10.77.0.14:29443
iptables -t nat -A POSTROUTING -d 10.77.0.14 -p tcp --dport 29443 -j SNAT --to-source 10.77.0.13

Brez drugega pravila odjemalec odgovori po svoji ISP vzponski povezavi, zato oddaljeni partner vidi izvorni naslov, s katerim se nikoli ni pogovarjal, medtem ko strežnik ne vodi nobenega sledilnega vnosa za odgovor. Zunanji opazovalec vidi rokovanje, ki se dokonča na pol, in to je natanko tisti simptom, ki pošlje ljudi iskat napako požarnega zidu, ki je ni.

Preberite obe pravili nazaj z iptables -t nat -S in potrdite, da je ime vmesnika tisto, ki nosi javni naslov. Na gostitelju, ki že filtrira z nftables, zapišite prevod v NAT verigo nftables ustrezne družine naslovov, namesto da bi mešali orodja.

Spustite tabelo filtrov skozi

Tabele NAT prepisujejo glave; ne dajejo dovoljenja. S privzeto politiko DROP potrebuje posredovani tok lastno odobritev, poleg povratne smeri, ki jo večina politik že pokriva s pravilom established,related.

iptables -A FORWARD -i eth0 -o tun0 -p tcp --dport 29443 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Preden kar koli dodate, preverite politiko verige FORWARD, ker vrstni red zgodnjega DROP odloči, ali bo vaše pravilo sploh obravnavano. Na gostitelju, katerega filtriranje živi v nftables, dodajte enakovredno pravilo v kavelj forward tabele inet in potrdite, da osnovna veriga res vidi posredovani promet in ne le lokalnega vhoda. Če števec paketov na novem pravilu ostane na ničli, medtem ko števci NAT naraščajo, se paket zavrže pred vašim pravilom. To je znak, da preberete vrstni red verig, ne da dodate drugo kopijo istega pravila.

Dokažite to iz zunanjega omrežja

Preizkusite iz nepovezanega omrežja. Sonda z drugega stroja v istem LAN lahko gre skozi podporo hairpin NAT in nikoli ne preizkusi poti, ki jo uporablja oddaljeni odjemalec, zato zelen rezultat tam dokazuje napačno stvar.

tcpdump -ni any port 29443
conntrack -L | grep 29443

Zaženite zajemanje na strežniku in na odjemalcu hkrati. Zajemanje na strežniku pokaže, ali prevedeni paket odhaja proti predoru; zajemanje na odjemalcu pokaže, ali zahteva prispe in kam je naslovljen odgovor. Vnos prevoda v conntrack -L dokazuje, da se je pravilo ujemalo, njegova odsotnost pa dokazuje, da paket ni nikoli dosegel verige NAT.

Skenirniki vrat so šibek dokaz. Vrata poročajo kot zaprta, dokler aplikacija ni vezana in ne posluša, zato uporabite pravo povezavo s pravo storitvijo. Ko končno deluje, ohranite izpostavljenost na tistih enih vratih: posredovanje SSH ali skrbniške plošče, ker je prvo pravilo delovalo nerodno, je veliko večja odločitev kot objava storitve.

Sorodni članki