URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4633
[ Назад ]

Исходное сообщение
"Переадресация порта на соседний сервер"

Отправлено Joneg , 07-Июл-10 18:21 
Доброго времени суток.

На сервере стоит Slackware 13.1, ип сервера скажем 10.10.10.10
Ип всем известен, все к нему обращаются за разными сервисами (http, ftp, dc++) и на опр. порт 1234 tcp скажем.

Однако приложение это (которое 1234 обслуживает) есть только под винду. СТавить иксы, вайн на сервер не хочу. Хочу поставить рядом второе железо под виндой, ип будет 10.10.10.11

Скажите пожалуйсто как организовать переадресацию пакетов, приходящих на порт 1234 и перенаправлять их на сервер 10.10.10.11. Те по сути нужно подменить адрес назначения и выкинуть из интерфейса обратно.

Делал подобное:
iptables -t nat -A PREROUTING --dst 10.10.10.10 -p tcp --dport 1234 -j DNAT --to-destination 10.10.10.10:1234

Однако никакого результата не получил.

В Linux новичёк.

Заранее спасибо за помошь.


Содержание

Сообщения в этом обсуждении
"Переадресация порта на соседний сервер"
Отправлено reader , 07-Июл-10 20:16 
iptables -t nat -A PREROUTING --dst 10.10.10.10 -p tcp --dport 1234 -j DNAT --to-destination 10.10.10.11:1234

но есть нюансы, что значит рядом. клиенты тоже в этой подсети?


"Переадресация порта на соседний сервер"
Отправлено Joneg , 07-Июл-10 22:46 
>iptables -t nat -A PREROUTING --dst 10.10.10.10 -p tcp --dport 1234 -j
>DNAT --to-destination 10.10.10.11:1234
>
>но есть нюансы, что значит рядом. клиенты тоже в этой подсети?

Мм клиенты не в этой подсети, но второй сервер в этой подсети,
в данном случае представим серверную подсеть 10.10.10.0/24, а клиенты предположим в 172.0.0.0/8. Не суть...

Но помоему будет достаточно, чтобы сервер пакеты отправлял на 10.10.10.11 изменяя лишь адрес назначения. А второй сервер (10.10.10.11) будет отправлять ответы на эти пакеты уже соглясуя со своим основным шлюзом, те пакеты найдут своё назначение.


"Переадресация порта на соседний сервер"
Отправлено aaa , 08-Июл-10 09:01 
>[оверквотинг удален]
>
>Мм клиенты не в этой подсети, но второй сервер в этой подсети,
>
>в данном случае представим серверную подсеть 10.10.10.0/24, а клиенты предположим в 172.0.0.0/8.
>Не суть...
>
>Но помоему будет достаточно, чтобы сервер пакеты отправлял на 10.10.10.11 изменяя лишь
>адрес назначения. А второй сервер (10.10.10.11) будет отправлять ответы на эти
>пакеты уже соглясуя со своим основным шлюзом, те пакеты найдут своё
>назначение.

Надо еще форвард пакетов включить и в цепочку форвард правила добавить
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD --dst 10.10.10.10 -p tcp --dport 1234 -j ACCEPT
iptables -A FORWARD --src 10.10.10.10 -p tcp --sport 1234 -j ACCEPT


"Переадресация порта на соседний сервер"
Отправлено Joneg , 08-Июл-10 09:10 
Форвардинг включен

А правила разрешения сейчас не принципиальны, по умолчанию там политика ACCEPT.


"Переадресация порта на соседний сервер"
Отправлено Andrey Mitrofanov , 08-Июл-10 09:10 
http://www.opennet.me/openforum/vsluhforumID13/413.html#3
http://www.opennet.me/openforum/vsluhforumID10/3736.html#3

>Однако никакого результата не получил.
>В Linux новичёк.

Это недостатки, которые пройдут. Со временем.


"Переадресация порта на соседний сервер"
Отправлено Joneg , 08-Июл-10 09:15 
>http://www.opennet.me/openforum/vsluhforumID13/413.html#3
>http://www.opennet.me/openforum/vsluhforumID10/3736.html#3
>
>>Однако никакого результата не получил.
>>В Linux новичёк.
>
>Это недостатки, которые пройдут. Со временем.

Обе ссылки описывают самую типичную ситуацию переброса портов, описанием которой полон интернет. Вы предалгаете мне воткнуть в линуксовый сервер вторую сетевуху и соединить её с сервером под виндой? Вариант конечно рабочий 100%. Однако в планах использование виндового сервера несколькими линуксовыми серверами (на нём будут стоять commFort чат, два myAC под разные серверы). В итоге "локальная серверная сеть" разрастётся.


"Переадресация порта на соседний сервер"
Отправлено Andrey Mitrofanov , 08-Июл-10 09:31 
>Обе ссылки описывают самую типичную ситуацию переброса портов, описанием которой полон интернет.
>Вы предалгаете мне воткнуть в линуксовый сервер вторую сетевуху и соединить
>её с сервером под виндой?

Нет. С чего Вы взяли?

port-forward со вх.порта на eth0 на другой сервер на том же eth0 строится точно так же. С одним нюансом -- snat в этой ситуации таки _необходим.

"Очень" нетипичная ситуация, ога...

+++
TCP соединения можно форвардитть всякого рода "проксями" -- redir http://www.opennet.me/openforum/vsluhforumID9/7327.html#2 , в xinetd есть такая функциональность, ... simpleproxy http://www.opennet.me/openforum/vsluhforumID10/3717.html#6 какой-то и пр. и пр.


"Переадресация порта на соседний сервер"
Отправлено Joneg , 08-Июл-10 09:36 
Логика не давала написать правило обратного преобразования (SNAT), в моей ситуации оно по сути не нужно. Однако по всей видимости включается преобразование только когда описаны правила в обе стороны

iptables -t nat -A PREROUTING -d 10.10.10.10 -p tcp --dport 1234 -j DNAT --to-destination 10.10.10.11:1234

iptables -t nat -A POSTROUTING -d 10.10.10.11 -p tcp --dport 1234 -j SNAT --to-source 10.10.10.10

Всё работает.

Кстати в первом моём посте, где я написал:
"Делал подобное:
iptables -t nat -A PREROUTING --dst 10.10.10.10 -p tcp --dport 1234 -j DNAT --to-destination 10.10.10.10:1234"

Опечатка
--to-destination 10.10.10.11:1234


"Переадресация порта на соседний сервер"
Отправлено reader , 08-Июл-10 10:28 
>Логика не давала написать правило обратного преобразования (SNAT), в моей ситуации оно
>по сути не нужно. Однако по всей видимости включается преобразование только
>когда описаны правила в обе стороны
>

это не логика, это скорей незнание как работает сеть. и кстати типичная ошибка  многих.
проанализируйте как шел пакет от клиента и как он возвращался и с какими адресами, если не использовать SNAT.

http://www.opennet.me/docs/RUS/iptables/#DNATTARGET читайте внимательно то что под табличкой.

эти правила независимы друг от друга.

>[оверквотинг удален]
>
>Всё работает.
>
>Кстати в первом моём посте, где я написал:
>"Делал подобное:
>iptables -t nat -A PREROUTING --dst 10.10.10.10 -p tcp --dport 1234 -j
>DNAT --to-destination 10.10.10.10:1234"
>
>Опечатка
>--to-destination 10.10.10.11:1234


"Переадресация порта на соседний сервер"
Отправлено Joneg , 08-Июл-10 11:19 
Спасибо за помошь, теперь всё встало на свои места.
Действителньо по другому представлял этот момент.

"Переадресация порта на соседний сервер"
Отправлено Joneg , 06-Авг-10 10:03 
Возникла другая проблема. Когда начал использовать это на практике, выяснилось что на адресе назнаения (конечный сервер на винде) адресом источника является адрес сервера переадресовавшего подключение, а не адрес клиента. Что вполне ожидаемо впринципи, нат ведь. Но нужно чтобы на виндовом сервере были ип адреса клиентов.

Подобное можно как то реализовать?


"Переадресация порта на соседний сервер"
Отправлено Andrey Mitrofanov , 06-Авг-10 10:35 
Можно. Проверил - у меня работает.
Вторая сетевая, мост и виндовый сервер "за мостом".

[ЛВС] --- eth0 [ Lin*: br0=eth0+eth1 + DNAT ] eth1 --- [ Win* ]

Можно обойтись без SNAT-а, одним DNAT-ом.

---
Если использовать редиректор-приложение (redir, simpleproxy, xinetd или подобный), по-любому на второй сервер открывается второе соединение -- и с адреса промежуточного сервера.


"Переадресация порта на соседний сервер"
Отправлено reader , 06-Авг-10 11:33 
>Возникла другая проблема. Когда начал использовать это на практике, выяснилось что на
>адресе назнаения (конечный сервер на винде) адресом источника является адрес сервера
>переадресовавшего подключение, а не адрес клиента. Что вполне ожидаемо впринципи, нат
>ведь. Но нужно чтобы на виндовом сервере были ип адреса клиентов.
>
>
>Подобное можно как то реализовать?

второй сервер в другую подсеть и тогда для пакетом идущих к нему snat можно не делать