Нещо много често при управление на сървъри е пренасочването на трафик.
Да предположим, че имаме сървър с работещи определени услуги, но по някаква причина променяме една от тези услуги (Не знам, например pop3, който е порт 110) към друг сървър. Нормалното и най-често нещо би било просто да промените IP в DNS записа, но ако някой използва IP вместо поддомейн, това ще бъде засегнато.
Какво да правя? ... просто, пренасочете трафика, получен от този сървър през този порт към друг сървър със същия порт.
Как да започнем да пренасочваме трафика?
Първото нещо е, че трябва да сме активирали спедиция на сървъра, за това ще поставим следното:
echo "1" > /proc/sys/net/ipv4/ip_forward
Можете също да използвате тази друга команда, в случай че предишната не работи за вас (случи ми се така на CentOS):
sysctl net.ipv4.ip_forward=1
След това ще рестартираме мрежата:
service networking restart
В дистрибуциите на RPM като CentOS и други, това би било:
service nertwork restart
Сега ще преминем към важното, кажете на сървъра IPTABLES какво да пренасочите:
iptables -t nat -A PREROUTING -p tcp --dport <puerto receptor> -j DNAT --to-destination <ip final>:<puerto de ip final>
С други думи и следвайки споменатия от мен пример, да предположим, че искаме да пренасочим целия трафик, който нашият сървър получава през порт 110 към друг сървър (напр .: 10.10.0.2), която все още ще получава този трафик през 110 (това е същата услуга):
iptables -t nat -A PREROUTING -p tcp --dport 110 -j DNAT --to-destination 10.10.0.2:110
Сървърът 10.10.0.2 ще види, че всички пакети или заявки идват от IP адреса на клиента, в случай че искат да плуват заявките, т.е. който прилагаме пренасочването), би било също да поставим този втори ред:
iptables -t nat -A POSTROUTING -j MASQUERADE
Някои въпроси и отговори
В примера използвах един и същ порт и в двата случая (110), но те могат да пренасочват трафика от един порт на друг без проблеми. Да предположим например, че искам да пренасоча трафик от порт 80 към 443 на друг сървър, за това това би било:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.10.0.2:443
Това е IPTABLES, те могат да използват всички останали параметри, които познаваме, например, ако искаме само да пренасочим трафика от конкретен IP, това би било добавяне на -s ... Например ще пренасоча само трафика, който идва от 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
Или цяла мрежа (/ 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
Можем също да определим мрежовия интерфейс с -i :
iptables -t nat -A PREROUTING -p tcp -i eth1 --dport 80 -j DNAT --to-destination 10.10.0.2:443
Край!
Това, както вече казах, е iptables, можете да приложите това, което вече е известно, така че сървърът да прави точно това, което искате да направите 😉
Поздрави!
Можем да направим това и от защитна стена, която позволява пренасочване на портове, нали? (прилагане на съответните правила).
Да, разбира се, в крайна сметка защитна стена като Pfsense или други, използвайте iptables отзад.
За да бъдем точни, pfsense не използва iptables, но pf, не забравяйте, че вътре е bsd.
О, така, лошо!
Благодаря ви много за съвет 🙂
Имам няколко съмнения:
1 - Промяната постоянна ли е? или се губи при рестартиране на сървъра?
2 - Имам няколко екземпляра (да речем A, B и C) в една и съща подмрежа. В пример A прилагам правилото за насочване на трафика към външен IP и при тестване с къдрици от екземпляри B и C всичко прави чудеса. Проблемът е, че от екземпляр А не работи. Опитах се да използвам както вашия ip, така и интерфейса за обратна връзка и нито едно от двете не работи:
$ iptables -t nat -A PREROUTING -p tcp –dport 8080 -j DNAT –до местоназначение xxxx: 8080
$ iptables -t nat -A PREROUTING -p tcp -i lo –dport 8080 -j DNAT –до местоназначение xxxx: 8080
$ curl ip-yyyy: 8080 / hello_world
curl: (7) Неуспешно свързване с ip-yyyy порт 8080: Връзката е отказана
$ curl localhost: 8080 / hello_world
curl: (7) Неуспешно свързване с локален хостов порт 8080: Връзката е отказана
Някаква идея какъв може да е проблемът?
Да, промяната се губи при рестартиране, ще трябва да използвате iptables-save & iptables-restore или нещо подобно, за да избегнете това.
Не разбрах напълно какво искате да направите, пример А?
Имам сървър, който поддържа само връзки от определен ip (сървър A), не мога или искам да добавя още ips към белия списък (за проблеми с мащабируемостта), така че искам целият трафик към външния сървър да мине през споменатия сървър (А).
От практическа гледна точка имам глобални конфигурации, които определят кой IP да се използва за всяка услуга, така че в този случай това е нещо като "всеки, който иска да използва външната услуга, трябва да използва IP A"
Това беше постигнато успешно с помощта на метода в тази статия, но срещам проблема, че когато го прилага, сървър А не може да получи достъп до услугата, използвайки свой собствен ip (но всички други сървъри го правят).
Досега най-доброто, което намерих, беше да добавя картографирането във файла / etc / hosts на сървър A, сочейки към външния ip, заменяйки глобалната настройка.
Много добре, ако имам друг пощенски сървър, бих могъл да пренасоча трафика от порт 143 от server1 към server2 и имейлите ще стигнат до мен на server2, нали?
поздрави
На теория да, работи така. Разбира се, трябва да имате правилно инсталиран пощенски сървър на server2 🙂
Видовете публикации, които обичаме да четем, благодаря!
Отлична статия, имам проект, в който работя и исках да ви задам въпрос, има индустриални суичове с функция NAT (предполагам, че те използват IPTables по-долу), за превод на IP адрес, без да се правят промени в оборудването, например имам сървър 10.10.2.1, който комуникира с компютри 10.10.2.X и чрез превключвателя е програмиран така, че компютър, който има адрес 192.168.2.4, всъщност се вижда от сървъра като 10.10.2.5, той превежда този IP адрес, който да се вижда От другите компютри с този адрес искам да го направя от сървър с Ubuntu или друга дистрибуция, какви биха били правилата на iptables?
Много добра информация, благодаря ви ^ _ ^
Добър ден.
Имам проблем при опит за пренасочване. Обяснявам:
Имам прокси сървър в Ubuntu, с 2 мрежови карти:
eth0 = 192.168.1.1 е свързан с останалата част от локалната мрежа.
eth1 = 192.168.2.2 е свързан към рутера.
Трябва ми всичко, което идва през eth0, за да мине през eth1, а също и през прокси (използвам Squid, чийто порт по подразбиране е 3128), и не мога да намеря ключа в конфигурацията IPTABLES.
Нямам нужда от никакво ограничение, само че записът остава в дневника на посетените уеб адреси.
Надявам се, че можете да ми помогнете, тъй като това е доста тромава задача, която ме тревожи от няколко дни.
Благодаря.
Приятелю, аз съм много нов за други сървъри, нямам представа, но разбирам темата и се уча бързо, въпросът ми е следният Имам 2 сървъра serv_1 и serv_2, които съм свързал към същия интранет, в тези сървъри имам създаден собствен облак, бих искал да направя следното:
че определен диапазон от ips например rangeip_1 при поставяне на ip за достъп до собствения облак (ipowncloud) е насочен към serv_1 и ако е друг rangeip_2, същият ipowncloud е насочен към serv_2, това, за да се намират 2-те сървъра в два различни града и диапазоните на ip са различни, но всички те са в една и съща мрежа, това би било първата част, втората ще бъде ясно е да се синхронизират тези 2 сървъра, така че да са огледални или да ми посъветват това, за да за да оптимизирате широчината на лентата, моля, ако ще ми обясните как да го направя стъпка по стъпка, а не режим на супер програмист = (
Здравейте, извинете, имам превключвател, отговарящ за комуникацията на всички устройства, които изграждат моята мрежа, и след това защитна стена и накрая изходът от Интернет, това, което се случва, е, че бих искал пренасочването да бъде дадено в превключвателя и не трябва да достига до защитната стена, освен ако заявената услуга не е интернет.
Използвайки този метод, бихте ли могли да пренасочите HTTPS към HTTP?
Здравейте, може би е малко късно, но исках да ви попитам как да накарам калмари да не променят IP на клиента, когато искам да се свържа с уеб сървър в същата мрежа?
Не се отнасяйте лошо с мен, че питате. Може ли това да се направи в Windows?
Тази информация ми беше полезна. Както винаги, на вас може да се вярва, когато не мога да намеря нещо на английски, обикновено в крайна сметка търся на испански, в тези случаи почти винаги идвам на този сайт. Благодаря.
Имам 4G рутер, който е клиент на мрежа, която не управлявам (очевидно съм клиент)… този рутер е шлюз към тази отдалечена мрежа чрез OpenVPN. В допълнение, споменатият рутер изпълнява функцията на препращане на порт за достъп до порт 80 на сървъра на една от тези подмрежи в полето.
Това беше декларацията, която трябваше да поставя в рутера като персонализирано правило на защитната стена „-t nat -A POSTROUTING -j MASQUERADE“
Благодаря за помощта!