LINUX.ORG.RU
ФорумAdmin

«Правильный» переброс трафика с одного сервера на другой


0

0

Здравствуйте!

Хочу спросить гуру в IPTABLES, как осуществить переброс трафика с одного сервера на 2-й так, чтобы 2-й сервер нормально определял удаленный IP. Сейчас по конкретнее опишу проблему: есть 2 сервера

сервер1: смотрим в инет eth0 86.57.xxx.1, внутренняя между серверами eth1 192.168.1.1 на 86.57.xxx.1:80 и 192.168.1.1:80 слушает nginx (ну и само собой на бэкенд 127.0.0.1 apache, но не суть). т.е. сервер извне на 86.57.xxx.1:80 принимает-отдает, т.е. работает)

сервер2: смотрим в инет eth0 86.57.xxx.2, внутренняя между серверами eth1 192.168.1.2 тут чисто mysql и больше ничего.

Захотелось использовать 2й канал 2го сервера, так сказать для увеличения скорости (в датацентре окраничение на сервер 100мбит).

Прописываю в iptables 2-го сервера

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 86.57.xxx.2 --dport 80 -j DNAT --to-destination 192.168.1.1:80

iptables -t nat -A POSTROUTING -o eth1 -p tcp -d 192.168.1.1 --dport 80 -j MASQUERADE

Все как бы бегает, а проблема в том, что все клиенты, пришедшие через 2-й сервер имеют IP этого же 2-го сервера (192.168.1.2), в результате фильтры по ip установленные в nginx приходят в негодность, да и в логах запросов сплошной ip 2-го сервера...

Я догадываюсь что дело в MASQUERADE, но вот ничего больше на ум не приходит. Кто подскажет как заставить 2-й сервер принимать пакеты так, чтобы не искажался начальный адрес клиента, подключившегося к серверу?

Заранее благодарю.

На первом серваке:

ip ro del 192.168.1.0/24 dev eth1
ip ro add 192.168.1.0/24 via 192.168.1.2 dev eth1 src 192.168.1.1
На втором серваке удаляешь маскарад.

nnz ★★★★ ()

маскарад по сути применяет НАТ (т.е. заменяет адрес отправителя на адрес интерфейса, с которого будет отправляться пакет).

azure ★★ ()
Ответ на: комментарий от nnz

Но тогда по сути тела весь трафик идущий во внутреннюю сеть 192.168.1.0/24 будет ходить через 192.168.1.2 вротого интерфейса?

т.е. если например я подключу еще один сервер во внутреннюю сеть, скажем 192.168.1.3, то напрямую с 1-го сервера я попаду на 3-й ?

AlexeyVitebsk ()
Ответ на: комментарий от AlexeyVitebsk

>Но тогда по сути тела весь трафик идущий во внутреннюю сеть 192.168.1.0/24 будет ходить через 192.168.1.2 вротого интерфейса?

Да.

т.е. если например я подключу еще один сервер во внутреннюю сеть, скажем 192.168.1.3, то напрямую с 1-го сервера я попаду на 3-й ?


Нет.

nnz ★★★★ ()

На втором сервере убираете MASQUERADE, это вам уже написали.

На первом сервере с помощь «ip rule from 192.168.1.1» отправляете все пакеты в отдельную таблицу, у которой маршрут по умолчанию через 192.168.1.2.

Тогда первый сервер будет получать на 192.168.1.1 пакеты с «реальным» ip-адресом, но отвечать на них будет через 192.168.1.2, который их отNATит обратно.

Если у вас возникнет желание поставить третий сервер и на нём делать аналогичный NAT, то тогда, ИМХО, проще добавить на перевый серевер ещё один ip-адрес в локальной сети, на который будет обращаться только третий сервер.

И в целом, в вашей конфигурации, ИМХО, имеет смысл на первый сервер во внутренней сети добавить ещё один ip-адрес, трафик на который отправляется (DNAT) только вторым сервером, так будет проще потом делить трафик локальной сети от трафика внешней сети.

mky ★★★★★ ()
Ответ на: комментарий от mky

>На первом сервере с помощь «ip rule from 192.168.1.1» отправляете все пакеты в отдельную таблицу, у которой маршрут по умолчанию через 192.168.1.2.

Без MASQUERADE srcip у них будет вовсе не 192.168.1.1 :)

nnz ★★★★ ()
Ответ на: комментарий от nnz

>ip ro del 192.168.1.0/24 dev eth1

ip ro add 192.168.1.0/24 via 192.168.1.2 dev eth1 src 192.168.1.1


Фигню я спорол.

Роут по локалке как раз трогать не надо, пусть живет. А вот дефолтный надо бы через 192.168.1.2 пустить.
ip ro add default via 192.168.1.2 dev eth1

nnz ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.