Při správě serverů je něco velmi běžného přesměrování provozu.
Předpokládejme, že máme spuštěný server s určitými službami, ale z jakéhokoli důvodu jednu z těchto služeb změníme (Nevím, například pop3, což je port 110) na jiný server. Normální a nejčastější věcí by bylo jednoduše změnit IP v záznamu DNS, ale pokud někdo používá IP místo subdomény, bude to ovlivněno.
Co dělat? ... jednoduché, přesměrovat provoz, který server přijímá přes tento port, na jiný server se stejným portem.
Jak zahájíme přesměrování provozu?
První věc je, že jsme museli povolit přesměrování na server k tomu vložíme následující:
echo "1" > /proc/sys/net/ipv4/ip_forward
Můžete také použít tento další příkaz, pokud pro vás předchozí nefunguje (stalo se mi to takhle na CentOS):
sysctl net.ipv4.ip_forward=1
Poté restartujeme síť:
service networking restart
V distribucích RPM, jako je CentOS a další, by to bylo:
service nertwork restart
Nyní přejdeme k důležité věci, řekněte to serveru iptables co přesměrovat:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
To znamená, a po příkladu, který jsem zmínil, předpokládejme, že chceme přesměrovat veškerý provoz, který náš server přijímá přes port 110, na jiný server (např. 10.10.0.2), který bude i nadále přijímat tento provoz prostřednictvím 110 (je to stejná služba):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
Server 10.10.0.2 uvidí, že všechny pakety nebo požadavky pocházejí z adresy IP klienta, v případě, že budou chtít plavat požadavky, to znamená, že druhý server uvidí, že požadavky přicházejí s adresou IP prvního serveru (a v které použijeme přesměrování), bylo by také dát tento druhý řádek:
iptables -t nat -A POSTROUTING -j MASQUERADE
Několik otázek a odpovědí
V příkladu jsem použil stejný port oba časy (110), ale mohou bez problémů přesměrovat provoz z jednoho portu na druhý. Předpokládejme například, že chci přesměrovat provoz z portu 80 na 443 na jiném serveru, protože by to bylo:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
To je iptables, mohou použít všechny ostatní parametry, které známe, například pokud chceme přesměrovat pouze provoz z konkrétní IP adresy, přidalo by -s … Například přesměruji pouze provoz, který pochází z 10.10.0.51:
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.51 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Nebo celá síť (/ 24):
iptables -t nat -A PREROUTING -p tcp -s 10.10.0.0/24 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Můžeme také určit síťové rozhraní pomocí -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Konec!
Toto, jak jsem již řekl, je iptables, můžete použít to, co je již známé, takže server dělá přesně to, co chcete, aby udělal 😉
Zdravím!
Můžeme to udělat také z brány firewall, která umožňuje přesměrování portů, že? (použití odpovídajících pravidel).
Ano, samozřejmě, firewall jako Pfsense nebo další, použijte iptables zezadu.
Přesněji řečeno, pfsense nepoužívá iptables, ale pf, pamatujte, že je to uvnitř BSD.
No dobře, můj zlý!
Moc děkuji za tip 🙂
Mám několik pochybností:
1 - Je změna trvalá? nebo se ztratí při restartu serveru?
2 - Mám více instancí (řekněme A, B a C) ve stejné podsíti. V instanci A aplikuji pravidlo na směrování provozu na externí IP a testování s kudrlinami z instancí B a C všechno dělá zázraky. Problém je v tom, že z instance A to nefunguje. Snažil jsem se používat jak váš ip, tak rozhraní zpětné smyčky a žádný z nich nefunguje:
$ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –to-destination xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT - do cíle xxxx: 8080
$ curl ip-rrrr: 8080 / hello_world
curl: (7) Nepodařilo se připojit k portu ip-rrrr 8080: Připojení odmítnuto
$ curl localhost: 8080 / hello_world
curl: (7) Nepodařilo se připojit k portu localhost 8080: Připojení odmítnuto
Máte ponětí, v čem může být problém?
Ano, změna se při restartu ztratí, abyste se tomu vyhnuli, budete muset použít iptables-save & iptables-restore nebo něco podobného.
Nechápal jsem úplně, co chcete dělat, instance A?
Mám server, který podporuje pouze připojení z konkrétního IP (serveru A), nemohu nebo chci přidat další IPS do seznamu povolených (pro problémy se škálovatelností), takže chci, aby veškerý provoz na externím serveru procházel uvedený server (A).
Z praktických důvodů mám globální konfigurace, které definují, kterou IP použít pro každou službu, takže v tomto případě jde o něco jako „každý, kdo chce používat externí službu, musí použít IP A“
Toho bylo úspěšně dosaženo pomocí metody v tomto článku, ale narazil jsem na problém, že při jeho použití nemůže server A přistupovat ke službě pomocí své vlastní adresy IP (ale všechny ostatní servery ano).
Doposud to nejlepší, co jsem našel, bylo přidat mapování do souboru / etc / hosts serveru A, ukázal na externí IP a přepsal globální nastavení.
Velmi dobré, pokud mám jiný poštovní server, mohl bych přeposlat provoz z portu 143 ze serveru1 na server2 a e-maily se ke mně dostanou na serveru2, že?
pozdravy
Teoreticky ano, funguje to takhle. Jistě, musíte mít poštovní server správně nainstalovaný na serveru2 🙂
Děkujeme za druh příspěvků, které rádi čteme.
Výborný článek, mám projekt, ve kterém pracuji a chtěl jsem se vás na něco zeptat, existují průmyslové přepínače s funkcí NAT (předpokládám, že používají IPTables níže), k překladu IP adresy bez provedení změn v zařízení, příklad, mám Server 10.10.2.1, který komunikuje s počítači 10.10.2.X a prostřednictvím přepínače je naprogramován tak, že počítač, který má adresu 192.168.2.4, je ve skutečnosti viděn ze serveru jako 10.10.2.5, přeložil tuto IP adresu, aby byla viditelná Z ostatních počítačů s touto adresou to chci udělat ze serveru s Ubuntu nebo jinou distribucí, jaká by byla pravidla iptables?
Velmi dobrá informace děkuji ^ _ ^
Dobré odpoledne.
Mám problém při pokusu o přesměrování. Vysvětluji:
Mám proxy server v Ubuntu se 2 síťovými kartami:
eth0 = 192.168.1.1 je připojen ke zbytku místní sítě.
eth1 = 192.168.2.2 je připojen k routeru.
Potřebuji vše, co prochází eth0, abych prošel eth1, a také prostřednictvím proxy serveru (používám Squid, jehož výchozí port je 3128), a nemohu najít klíč v konfiguraci IPTABLES.
Nepotřebuji žádné omezení, pouze to, že v protokolu navštívených webových adres zůstane záznam.
Doufám, že mi pomůžete, protože je to docela těžkopádný úkol, který mě už pár dní znepokojuje.
Děkuju.
Příteli, na jiné servery jsem velmi nový, nemám ponětí, ale rozumím tématu a rychle se učím, moje otázka je následující Mám 2 servery serv_1 a serv_2, které jsem připojil ke stejnému intranetu, na těchto serverech mám nastavený vlastní cloud Chtěl bych udělat následující:
že určitý rozsah ips, například rangeip_1 při umisťování přístupového ip do owncloudu (ipowncloud), je směrován na serv_1 a pokud se jedná o jiný rangeip_2 umístěný stejný ipowncloud je směrován na serv_2, tak aby byly umístěny 2 servery ve dvou různých městech a rozsahy IP se liší, ale jsou všechny ve stejné síti, to by byla první část, druhá by byla jasná, je synchronizovat tyto 2 servery tak, aby to byla zrcadla, nebo že mi to doporučují za účelem optimalizace šířky kapela, prosím, pokud mi chcete vysvětlit, jak to udělat krok za krokem, ne super programátorský režim = (
Dobrý den, omlouvám se, mám přepínač odpovědný za komunikaci všech zařízení, která tvoří moji síť, a poté firewall a nakonec internetový výstup, co se stane, je, že bych chtěl, aby bylo přesměrování uvedeno v přepínač a nemusí se dostat na bránu firewall, pokud není požadovanou službou internet.
Pomocí této metody můžete přesměrovat HTTPS na HTTP?
Ahoj, možná je trochu pozdě, ale chtěl jsem se tě zeptat, jak mám udělat, aby chobotnice nezměnila IP klienta, když se chci připojit k webovému serveru ve stejné síti?
Nezacházej se mnou špatně za to, že se ptáš Lze to provést ve Windows?
Tato informace byla pro mě užitečná. Jako vždy, můžete mi věřit, když nemůžu najít něco v angličtině, obvykle skončím hledat ve španělštině, při těch příležitostech téměř vždy přijdu na tento web. Děkuji.
Mám 4G router, který je klientem sítě, kterou nespravuji (samozřejmě jsem klient)… tento router je bránou do té vzdálené sítě přes OpenVPN. Kromě toho uvedený router plní funkci portforwardingu na přístupový port 80 serveru jedné z těchto podsítí v poli.
Toto bylo prohlášení, které jsem musel vložit do routeru jako vlastní pravidlo firewallu «-t nat -A POSTROUTING -j MASQUERADE»
Díky za pomoc!