GNU/Linux >> Znalost Linux >  >> Linux

Přístup na webový server DNAT'ted zevnitř LAN

Řešení 1:

Smazal jsem svou původní odpověď, protože jsem si nebyl zcela jistý, že je správná. Od té doby jsem měl nějaký čas na nastavení malé virtuální sítě virtuálních počítačů pro simulaci dané sítě. Zde je sada pravidel brány firewall, která pro mě fungovala (v iptables-save formát pro nat pouze tabulka):

-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE

První POSTROUTING pravidlo je přímý způsob sdílení internetového připojení s LAN. Nechal jsem to tam pro úplnost.

PREROUTING pravidlo a druhé POSTROUTING pravidlo společně vytvoří vhodné NAT, takže připojení k serveru přes externí IP adresu může probíhat bez ohledu na to, zda spojení pocházejí zvenčí nebo zevnitř LAN. Když se klienti v LAN připojují k serveru přes externí IP adresu, server vidí připojení jako pocházející z interní IP adresy routeru (192.168.2.1).

Zajímavé je, že se ukazuje, že existuje několik variant druhého pravidla POSTROUTING, které také fungují. Pokud se cíl změní na -j SNAT --to-source 192.168.2.1 , efekt je (nepřekvapivě) stejný jako u MASQUERADE :server vidí připojení od místních klientů LAN jako pocházející z interní routeru IP adresa. Na druhou stranu, pokud se cíl změní na -j SNAT --to-source 89.179.245.232 , pak NAT stále fungují, ale tentokrát server vidí připojení od místních klientů LAN jako pocházející z externího routeru IP adresa (89.179.245.232).

Nakonec si všimněte, že váš původní PREROUTING /DNAT pravidlo s -i ppp0 nefunguje, protože pravidlo nikdy neodpovídá paketům přicházejícím od klientů LAN (protože tito nevstupují do routeru přes ppp0 rozhraní). Bylo by možné, aby to fungovalo přidáním druhého PREROUTING pravidlo pouze pro interní klienty LAN, ale bylo by to neelegantní (IMO) a stále by muselo explicitně odkazovat na externí IP adresu.

Nyní, i poté, co jsem do všech podrobností načrtl řešení „hairpin NAT“ (nebo „smyčka NAT“ nebo „odraz NAT“ nebo jak to chcete nazvat), stále věřím, že řešení DNS s rozděleným horizontem – -s externími klienty převádějícími na externí IP a interními klienty převádějícími na interní IP --- by byla vhodnější cesta. Proč? Protože více lidí chápe, jak funguje DNS, než rozumí tomu, jak funguje NAT, a velkou součástí budování dobrých systémů je výběr částí, které lze udržovat. Nastavení DNS bude pravděpodobněji pochopeno, a tedy správně udržováno, než tajemné nastavení NAT (IMO, samozřejmě).

Řešení 2:

Jsem překvapen, že po téměř 8 letech nikdo nevysvětlil, jak to udělat správným způsobem pomocí konfiguračního systému UCI, který je standardně používán v OpenWRT.

Odpověď Stevena Monday je správná, ale používá iptables příkazy přímo, což je nižší vrstva než konfigurační systém UCI, a pokud je to možné, je nejlepší, aby jej většina uživatelů OpenWRT neměnila.

Správný způsob přístupu k interním serverům prostřednictvím jejich kombinací veřejných IP/portů z jiného interního hostitele v UCI je povolení možnosti konfigurace reflection pod každým konkrétním cílem DNAT v souboru /etc/config/firewall . Toto chování je zdokumentováno zde.

Například:

config redirect option target 'DNAT' option src 'wan' option dest 'lan' option proto 'tcp' option src_dport '44322' option dest_ip '192.168.5.22' option dest_port '443' option name 'apache HTTPS server' option reflection '1'

Poznámka:Podle uvedené dokumentace OpenWRT reflection je ve výchozím nastavení povoleno. Při mém testování tomu tak nebylo.

Řešení 3:

Běžným řešením je nasměrovat své interní hostitele na místní server DNS, který vrací správnou „interní“ adresu pro tyto názvy hostitelů.

Dalším řešením – a používáme ho tam, kde pracuji na našich firewallech Cisco – je přepsat odpovědi DNS na firewallu, které odpovídají těmto adresám. Nemyslím si, že v současnosti existují nástroje pro Linux, které by to dokázaly.

Měli byste být schopni nakonfigurovat směrování na vaší bráně, abyste dělali správnou věc. Možná budete muset nakonfigurovat servery, aby věděly o své externě mapované IP adrese (např. jejím přiřazením k fiktivnímu rozhraní). S touto konfigurací by komunikace z jednoho interního systému do druhého interního systému – pomocí jeho „externí“ adresy – probíhala přes router.

Řešení 4:

To, co požadujete, se nazývá NAT Loopback a vyžaduje, abyste přidali pravidlo SNAT, aby pakety pocházející z vaší sítě LAN na váš server šly zpět přes router:

-A POSTROUTING -p tcp -s 192.168.2.0/24 -d 192.168.2.10 -m multiport --dports 22,25,80,443 -j SNAT --to-source 89.179.245.232

Linux
  1. Najděte geolokaci IP adresy z příkazového řádku

  2. Jak odsadit heredoc uvnitř heredocu správným způsobem?

  3. Jak zjistit, zda je Shell řízen z Ssh?

  1. Stát se rootem zevnitř Vimu?

  2. Získání možnosti -exec v aplikaci Najít do práce?

  3. Najít počítač v síti LAN?

  1. adb:Najděte PID z prostředí adb

  2. Kódování do base32 z shellu

  3. Jak se mohu připojit k Postgres běžícímu na hostiteli Windows zevnitř WSL2?