Noe veldig vanlig når du administrerer servere, er å omdirigere trafikk.
Anta at vi har en server med visse tjenester som kjører, men av en eller annen grunn endrer vi en av disse tjenestene (Jeg vet ikke, for eksempel pop3 som er port 110) til en annen server. Det normale og hyppigste ville være å bare endre IP i DNS-posten, men hvis noen brukte IP-en i stedet for underdomenet, vil det bli påvirket.
Hva å gjøre? ... enkelt, omdiriger trafikken som serveren mottar gjennom den porten til en annen server med samme port.
Hvordan begynner vi å omdirigere trafikk?
Det første er at vi må ha aktivert videresending på serveren, for dette vil vi sette følgende:
echo "1" > /proc/sys/net/ipv4/ip_forward
Du kan også bruke denne andre kommandoen, hvis den forrige ikke fungerer for deg (det skjedde med meg slik på en CentOS):
sysctl net.ipv4.ip_forward=1
Deretter starter vi nettverket på nytt:
service networking restart
I RPM-distribusjoner som CentOS og andre vil det være:
service nertwork restart
Nå skal vi gå videre til det viktige, fortell serveren gjennom det iptables hva du skal omdirigere:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
Det vil si, og i følge eksemplet jeg nevnte, antar vi at vi vil omdirigere all trafikken som serveren vår mottar gjennom port 110 til en annen server (eks: 10.10.0.2), som fremdeles vil motta trafikken gjennom 110 (det er den samme tjenesten):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
10.10.0.2-serveren vil se at alle pakkene eller forespørslene kommer fra klientens IP, hvis de vil svømme forespørslene, det vil si at den andre serveren ser at forespørslene kommer med IP-en til den første serveren (og hvilken vi bruker omdirigering), ville det også være å sette denne andre linjen:
iptables -t nat -A POSTROUTING -j MASQUERADE
Noen spørsmål og svar
I eksemplet brukte jeg samme port begge ganger (110), men de kan omdirigere trafikk fra en port til en annen uten problemer. Anta for eksempel at jeg vil omdirigere trafikk fra port 80 til 443 på en annen server, for dette vil det være:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
Dette er iptables, kan de bruke alle de andre parametrene vi kjenner, for eksempel hvis vi bare vil omdirigere trafikk fra en bestemt IP, ville det være ved å legge til -s ... For eksempel vil jeg bare omdirigere trafikken som kommer fra 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
Eller et helt nettverk (/ 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
Vi kan også spesifisere nettverksgrensesnittet med -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Slutten!
Dette er som sagt allerede iptables, du kan bruke det som allerede er kjent, slik at serveren gjør akkurat det du vil at den skal gjøre 😉
Greetings!
20 kommentarer, legg igjen dine
Vi kan også gjøre dette fra en brannmur som tillater portvideresending, ikke sant? (bruker de tilsvarende reglene).
Ja selvfølgelig, til slutt bruker en brannmur som Pfsense eller andre iptables bakfra.
For å være nøyaktig bruker ikke pfsense iptables, men pf, husk at det er en bsd inni.
Oh right, min dårlige!
Tusen takk for tipset 🙂
Jeg er i tvil:
1 - Er endringen permanent? eller er det tapt når du starter serveren på nytt?
2 - Jeg har flere forekomster (si A, B og C) på samme delnett. I eksempel A bruker jeg regelen for å dirigere trafikk til en ekstern IP, og testing med krøller fra forekomster B og C, alt gjør underverker. Problemet er at det fra eksempel A ikke fungerer. Jeg prøvde å bruke både ip og loopback-grensesnittet, og verken fungerer:
$ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT –to-destination xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –port 8080 -j DNAT –to-destination xxxx: 8080
$ curl ip-åååå: 8080 / hello_world
curl: (7) Kunne ikke koble til ip-åååå port 8080: Tilkobling nektet
$ curl localhost: 8080 / hello_world
curl: (7) Kunne ikke koble til localhost-port 8080: Tilkobling nektet
Noen anelse om hva problemet kan være?
Ja, endringen går tapt ved omstart, du må bruke iptables-save & iptables-reset eller noe sånt for å unngå det.
Jeg forsto ikke helt hva du vil gjøre, eksempel A?
Jeg har en server som bare støtter tilkoblinger fra en bestemt ip (server A), jeg kan ikke eller vil legge til flere ips til hvitlisten (for skalerbarhetsproblemer), så jeg vil at all trafikk til den eksterne serveren skal gå gjennom sa serveren (A).
For en praktisk sak har jeg globale konfigurasjoner som definerer hvilken IP som skal brukes for hver tjeneste, så i dette tilfellet er det noe som "alle som vil bruke den eksterne tjenesten, må bruke IP A"
Jeg oppnådde dette med metoden i denne artikkelen, men jeg støter på problemet at server A ikke får tilgang til tjenesten ved hjelp av sin egen ip (men alle andre servere gjør det) når jeg bruker den.
Så langt var det beste jeg fant å legge til kartleggingen i server A / etc / hosts-filen, peke på den eksterne ip, overstyre den globale innstillingen.
Veldig bra, hvis jeg har en annen e-postserver, kan jeg videresende trafikken fra port 143 fra server1 til server2, og e-postene når server2, ikke sant?
Hilsen
I teorien ja, fungerer det slik. Jo, du må ha e-postserveren riktig installert på server2 🙂
Slike innlegg vi liker å lese, takk!
Utmerket artikkel, jeg har et prosjekt der jeg jobber og jeg ønsket å stille deg et spørsmål, det er industrielle brytere med NAT-funksjon (jeg antar at de bruker IPTables nedenfor), for å oversette en IP-adresse uten å gjøre endringer i utstyret, en for eksempel har jeg en Server 10.10.2.1 som kommuniserer med 10.10.2.X datamaskiner og gjennom bryteren er programmert slik at en datamaskin som har en adresse 192.168.2.4 faktisk blir sett fra serveren som 10.10.2.5, oversatte den den IP adresse som skal sees Fra de andre datamaskinene med den adressen, vil jeg gjøre det fra en server med Ubuntu eller en annen distribusjon. Hva ville være iptables-reglene?
Veldig god info takk ^ _ ^
God dag.
Jeg har problemer med å prøve å omdirigere. Jeg forklarer:
Jeg har en proxy-server i Ubuntu, med 2 nettverkskort:
eth0 = 192.168.1.1 er koblet til resten av det lokale nettverket.
eth1 = 192.168.2.2 er koblet til ruteren.
Jeg trenger alt som kommer gjennom eth0 for å gå gjennom eth1, og også gjennom proxyen (jeg bruker blekksprut, hvis standardport er 3128), og jeg finner ikke nøkkelen i IPTABLES-konfigurasjonen.
Jeg trenger ikke begrensning av noe slag, bare at en post forblir i loggen til nettadressene som besøkes.
Jeg håper du kan hjelpe meg, siden det er ganske tungvint oppgave som har bekymret meg i et par dager.
Takk.
Venn, jeg er veldig ny på andre servere, jeg aner ikke, men jeg forstår emnet, og jeg lærer raskt, spørsmålet mitt er følgende. Jeg har 2 servere serv_1 og serv_2 som jeg har koblet til samme intranett, i disse serverne har jeg en egencloud satt opp Jeg vil gjøre følgende:
at et bestemt utvalg av ips for eksempel rangeip_1 når du plasserer en tilgangs-ip til owncloud (ipowncloud) er rettet mot serv_1 og hvis det er et annet rangeip_2 plasseres den samme ipowncloud til serv_2, dette for at de 2 serverne skal være i to forskjellige byer og IP-områdene er forskjellige, men de er alle på samme nettverk, det ville være den første delen, den andre ville være tydelig, er å synkronisere disse 2 serverne slik at de er speil, eller at de anbefaler meg dette for å optimalisere bredden band, vær så snill, hvis du skal forklare meg hvordan du gjør det trinn for trinn, ikke til superprogrammeringsmodus = (
Hei, unnskyld meg, jeg har en bryter som har ansvaret for kommunikasjonen til alle enhetene som utgjør nettverket mitt, og etter dette en brannmur og til slutt internettutgangen, det som skjer er at jeg ønsker at omdirigering skal gis i bryteren og trenger ikke nå brannmuren med mindre den forespurte tjenesten er internett.
Ved å bruke denne metoden kan du omdirigere HTTPS til HTTP?
Hei, kanskje det er litt sent, men jeg ønsket å spørre deg, hvordan skal jeg gjøre blekksprut ikke endre klientens IP når jeg vil koble til en webserver på samme nettverk?
Ikke behandle meg dårlig for å spørre. Kan dette gjøres i Windows?
Denne informasjonen har vært nyttig for meg. Som alltid kan dere stole på dere, når jeg ikke finner noe på engelsk, pleier jeg å lete på spansk, ved de anledninger kommer jeg nesten alltid til denne siden. Takk.
Jeg har en 4G-ruter som er en klient til et nettverk som jeg ikke administrerer (selvfølgelig, jeg er en klient) ... denne ruteren er en inngangsport til det eksterne nettverket gjennom OpenVPN. I tillegg oppfyller ruteren funksjonen portvideresending for å få tilgang til port 80 til serveren til et av disse undernettene i feltet.
Dette var erklæringen jeg måtte legge inn i ruteren som en egendefinert brannmurregel «-t nat -A POSTROUTING -j MASQUERADE»
Takk for hjelpen!