Pārvaldot serverus, ļoti bieži notiek trafika novirzīšana.
Pieņemsim, ka mums ir serveris, kurā darbojas noteikti pakalpojumi, taču kāda iemesla dēļ mēs mainām vienu no šiem pakalpojumiem (Es nezinu, piemēram, pop3, kas ir 110. osta) uz citu serveri. Normāla un visbiežāk sastopamā lieta būtu vienkārši mainīt IP ierakstā DNS, taču, ja kāds izmantoja IP apakšdomēna vietā, tas tiks ietekmēts.
Ko darīt? ... vienkārši, novirziet trafiku, ko serveris saņem caur šo portu, uz citu serveri ar to pašu portu.
Kā mēs sākam pāradresēt satiksmi?
Pirmā lieta ir tāda, ka mums jābūt iespējotai nosūtot uz servera, šim nolūkam mēs ievietosim:
echo "1" > /proc/sys/net/ipv4/ip_forward
Varat arī izmantot šo citu komandu, ja iepriekšējā nedarbojas jums (tas notika ar mani šādi CentOS):
sysctl net.ipv4.ip_forward=1
Tad mēs restartēsim tīklu:
service networking restart
RPM apgabalos, piemēram, CentOS un citos, tas būtu:
service nertwork restart
Tagad mēs pāriesim pie svarīgās lietas, pateiksim to serverim iptables ko novirzīt:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
Tas ir, un, sekojot manis pieminētajam, pieņemsim, ka mēs vēlamies visu trafiku, ko mūsu serveris saņem, izmantojot 110. portu, novirzīt uz citu serveri (piemēram: 10.10.0.2), kas joprojām saņems šo datplūsmu caur 110 (tas ir tas pats pakalpojums):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
10.10.0.2 serveris redzēs, ka visas paketes vai pieprasījumi nāk no klienta IP, ja viņi vēlas peldēt pieprasījumus, tas ir, ka 2. serveris redz, ka pieprasījumi pienāk ar 1. servera IP (un kuru mēs izmantojam novirzīšanu), tas būtu arī ievietot šo otro rindiņu:
iptables -t nat -A POSTROUTING -j MASQUERADE
Daži jautājumi un atbildes
Šajā piemērā es abos gadījumos izmantoju vienu un to pašu portu (110), tomēr tie var bez problēmām novirzīt trafiku no vienas ostas uz otru. Piemēram, pieņemu, ka es vēlos pāradresēt trafiku no 80. porta uz 443 uz citu serveri, tāpēc tas būtu:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
Tas ir iptables, viņi var izmantot visus pārējos mums zināmos parametrus, piemēram, ja mēs vēlamies tikai novirzīt trafiku no konkrēta IP, tas būtu pievienojot -s ... Piemēram, es novirzīšu tikai datplūsmu, kas nāk no 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
Vai viss tīkls (/ 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ēs varam arī norādīt tīkla saskarni ar -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Beigas!
Tas, kā jau teicu, ir iptables, jūs varat lietot jau zināmo, lai serveris darītu tieši to, ko vēlaties. 😉
Sveicieni!
Mēs to varam izdarīt arī no ugunsmūra, kas ļauj pārsūtīt portu, vai ne? (piemērojot attiecīgos noteikumus).
Jā, protams, beigās tāds ugunsmūris kā Pfsense vai citi izmanto iptables no aizmugures.
Pareizāk sakot, pfsense neizmanto iptables, bet pf, atcerieties, ka iekšpusē tas ir bsd.
Ak pareizi, mans sliktais!
Liels paldies par padomu 🙂
Man ir pāris šaubas:
1 - vai izmaiņas ir pastāvīgas? vai arī tas tiek zaudēts, restartējot serveri?
2 - man ir vairāki gadījumi (teiksim A, B un C) vienā apakštīklā. Piemērā A es piemēroju likumu, lai novirzītu trafiku uz ārēju IP, un, mēģinot izmantot cirtas no B un C gadījumiem, viss rada brīnumus. Problēma ir tā, ka no A instances tas nedarbojas. Es mēģināju izmantot gan jūsu ip, gan loopback interfeisu, un neviens no tiem nedarbojas:
$ iptables -t nat -A PREROUTING -p tcp –port 8080 -j DNAT – uz galamērķi xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –port 8080 -j DNAT –mērķa xxxx: 8080
$ čokurošanās ip-gggg: 8080 / labdien_pasaule
čokurošanās: (7) Neizdevās izveidot savienojumu ar ip-yyyy 8080 portu: savienojums tika atteikts
$ curl localhost: 8080 / hello_world
čokurošanās: (7) Neizdevās izveidot savienojumu ar localhost 8080 portu: savienojums tika noraidīts
Vai ir kāda ideja, kāda var būt problēma?
Jā, izmaiņas tiek zaudētas atsāknēšanas laikā, lai to izvairītos, jums būs jāizmanto iptables-save & iptables-restore vai kaut kas tamlīdzīgs.
Es īsti nesapratu, ko jūs vēlaties darīt, piemēram, A?
Man ir serveris, kas atbalsta tikai savienojumus no noteikta ip (serveri A), es nevaru vai nevēlos pievienot vairāk ips baltajam sarakstam (mērogojamības problēmu gadījumā), tāpēc es vēlos, lai visa ārējā servera trafika tiktu cauri minētais serveris (A).
Praktiski man ir globālas konfigurācijas, kas nosaka, kuru IP izmantot katram pakalpojumam, tāpēc šajā gadījumā tas ir kaut kas līdzīgs "visiem, kas vēlas izmantot ārējo pakalpojumu, ir jāizmanto IP A"
Es to veiksmīgi sasniedzu, izmantojot šajā rakstā aprakstīto metodi, taču man rodas problēma, ka, to piemērojot, serveris A nevar piekļūt pakalpojumam, izmantojot savu ip (bet visi pārējie serveri to dara).
Līdz šim labākais, ko atradu, bija pievienot kartēšanu servera A failā / etc / hosts, norādot uz ārējo ip, ignorējot globālo iestatījumu.
Ļoti labi, ja man ir cits pasta serveris, es varētu pārsūtīt trafiku no 143. porta no 1. servera uz 2. serveri, un e-pasta ziņojumi mani sasniegs 2. serverī, vai ne?
Sveicieni
Teorētiski jā, tas darbojas šādi. Protams, pasta serverim jābūt pareizi instalētam serverī2 🙂
Tādas ziņas, kuras mums patīk lasīt, paldies!
Lielisks raksts, man ir projekts, kurā es strādāju, un es gribēju jums uzdot jautājumu, ir rūpnieciski slēdži ar NAT funkciju (es domāju, ka viņi izmanto zemāk esošās IPTable tabulas), lai tulkotu IP adresi, neveicot izmaiņas iekārtā, piemēram, man ir serveris 10.10.2.1, kas sazinās ar 10.10.2.X datoriem un caur slēdzi ir ieprogrammēts tā, ka datoru, kura adrese ir 192.168.2.4, no servera faktiski redzētu kā 10.10.2.5, tas pārtulkoja šo IP adresi, lai tā būtu redzama No citiem datoriem ar šo adresi es vēlos to izdarīt no servera ar Ubuntu vai citu izplatīšanu, kādi būtu iptables noteikumi?
Ļoti laba informācija paldies ^ _ ^
Labdien.
Man ir problēma, mēģinot veikt novirzīšanu. Es paskaidroju:
Man Ubuntu ir starpniekserveris ar 2 tīkla kartēm:
eth0 = 192.168.1.1 ir savienots ar pārējo vietējo tīklu.
eth1 = 192.168.2.2 ir savienots ar maršrutētāju.
Man ir nepieciešams viss, kas nāk caur eth0, lai izietu caur eth1, un arī caur starpniekserveri (es izmantoju Squid, kura noklusējuma ports ir 3128), un es nevaru atrast atslēgu IPTABLES konfigurācijā.
Man nav nepieciešami nekādi ierobežojumi, tikai tas, ka apmeklēto tīmekļa adrešu žurnālā paliek ieraksts.
Es ceru, ka jūs varat man palīdzēt, jo tas ir diezgan apgrūtinošs uzdevums, kas mani satrauc jau pāris dienas.
Paldies.
Draugs, es esmu ļoti jauns pārējiem serveriem, man nav ne mazākās nojausmas, bet es saprotu tēmu un ātri mācos, mans jautājums ir šāds: Man ir 2 serveri serv_1 un serv_2, kurus esmu savienojis ar to pašu iekštīklu, šajos serveros man ir izveidots savs mākonis, Es gribētu rīkoties šādi:
ka noteikts ips diapazons, piemēram, rangeip_1, ievietojot piekļuvi ip savam mākonim (ipowncloud), ir vērsts uz serv_1 un, ja tas ir cits rangeip_2, tad tas pats ipowncloud tiek novirzīts uz serv_2, tas notiek, lai atrastu 2 serverus divās dažādās pilsētās un ip diapazoni ir atšķirīgi, bet tie visi atrodas vienā tīklā, tā būtu pirmā daļa, otrā būtu skaidra sinhronizēt šos 2 serverus, lai tie būtu spoguļi, vai ka viņi man to konsultē, lai optimizētu platumu grupa, lūdzu, lūdzu, ja jūs gatavojaties man paskaidrot, kā to izdarīt soli pa solim, nevis super programmētāja režīms = (
Sveiki, atvainojiet, man ir slēdzis, kas atbild par visu ierīču, kas veido manu tīklu, komunikāciju, un pēc tam ugunsmūris un visbeidzot izeja no interneta notiek tā, ka es vēlētos, lai novirzīšana tiktu sniegta slēdzi un tam nav jāsasniedz ugunsmūris, ja vien pieprasītais pakalpojums nav internets.
Izmantojot šo metodi, vai jūs varētu novirzīt HTTPS uz HTTP?
Sveiki, varbūt ir mazliet par vēlu, bet es gribēju jums pajautāt, kā lai es kalmārus nemainītu klienta IP, kad es vēlos izveidot savienojumu ar tīmekļa serveri tajā pašā tīklā?
Nelietojiet pret mani slikti par to, ka prasāt. Vai to var izdarīt sistēmā Windows?
Šī informācija man ir bijusi noderīga. Kā vienmēr, jums, puiši, var uzticēties. Kad es nevaru kaut ko atrast angļu valodā, es parasti meklēju spāņu valodu, tajos gadījumos es gandrīz vienmēr apmeklēju šo vietni. Paldies.
Man ir 4G maršrutētājs, kas ir tāda tīkla klients, kuru es nepārvaldu (acīmredzot, es esmu klients)... šis maršrutētājs ir vārteja uz šo attālo tīklu, izmantojot OpenVPN. Turklāt minētais maršrutētājs pilda pārsūtīšanas funkciju, lai piekļūtu viena no laukā esošajiem apakštīkliem servera 80. portam.
Šī bija deklarācija, kas man bija jāievieto maršrutētājā kā ugunsmūra pielāgotais noteikums "-t nat -A POSTROUTING -j MASQUERADE"
Paldies par palīdzību!