LINUX.ORG.RU
ФорумAdmin

Переброс соединений нв машину с нереальным IP


0

0

Я перелапатил кучу документов в интернете и нашел два
варианта переброса порта на машину локальной сети.
Допустим нам нужно при попытке зайти ssh на машину x.x.x.x чтобы соединение перебрасывалось на машину 192.168.0.10.
Как я понял существует два варианта(version1/version2).
Оба варианта нихрена не работают. Причем не работают не только у меня (данные интернета).
На машина на которой я это пытаюсь осуществить установлен был
RedHat 7.2 (там в ядре был ipchains). Я туда поставил ядро
Linux 2.4.19 в нем были установлены все сетевые возможности и все возможности iptables. Они были вкомпилированы в ядро.
Ниже приводится скрипт который под этой системой нихрена не пашет.
У меня в конторе есть ещё один роутер он соединяет две подсети. Он работает под управление RedHat 8.0 ядро - 2.4.18-14. Ставился как рабочая станция.
Вот на нем я пробовал вот так вот делать:
$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP --dport 22 -j DNAT --to-destination 192.168.0.10:22
$IPTABLES -A FORWARD -i $INET_IFACE -d 192.168.0.10 -p tcp --dport 22 -j ACCEPT
только менял ip адреса.
Всё работает замечательно!
Объясните мне что у меня не так. Сервак с RedHat 7.2 очень не хочется
сносить.

#!/bin/bash
IPTABLES="/sbin/iptables"
INET_IP="x.x.x.x"
INET_IFACE="eth0"
LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/24"
LAN_IP_RANGE2="194.190.67.0/24"
LAN_BCAST_ADRESS="192.168.0.255"
LAN_BCAST_ADRESS2="194.190.67.255"
LAN_IFACE="eth1"
LO_IFACE="lo"
LO_IP="127.0.0.1"

echo "1">/proc/sys/net/ipv4/ip_forward

$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT

#version 1
#$IPTABLES -t nat -A PREROUTING -d $INET_IP -i $INET_IFACE -p tcp -m tcp --dport 22 -j DNAT -to-destination 192.168.0.10:22
#$IPTABLES -t nat -A POSTROUTING -d 192.168.0.10 -o $INET_IFACE -p tcp -m tcp --dport 22 -j SNAT --to-source $INET_IP
#$IPTABLES -A FORWARD -d 192.168.0.10 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT

#version 2
$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP --dport 22 -j DNAT --to-destination 192.168.0.10:22
$IPTABLES -A FORWARD -i $INET_IFACE -d 192.168.0.10 -p tcp --dport 22 -j ACCEPT


А причем здесь FORWARD тебе же нужно перебрасывать на другую машину.....

anonymous
()

2 last anonymous : http://www.opennet.ru/docs/RUS/iptables/index.html#TRAVERSING_OF_TABLES

2 Youra_P:
version 1
> #$IPTABLES -t nat -A POSTROUTING -d 192.168.0.10 -o $INET_IFACE -p tcp -m tcp --dport 22 -j SNAT --to-source $INET_IP
А почему "-d 192.168.0.10 -o $INET_IFACE" ? У вас же пакеты к 192.168.0.10 не ходят через internet.
Может попробовать переписать так:
#$IPTABLES -t nat -A POSTROUTING -s 192.168.0.10 -o $INET_IFACE -p tcp -m tcp --sport 22 -j SNAT --to-source $INET_IP
и добавить
#$IPTABLES -A FORWARD -s 192.168.0.10 -o $INET_IFACE -p tcp -m tcp --sport 22 -j ACCEPT

version 2
Не хватает SNAT-а. Пример: пришел SYN-пакет от дяди Васи с a.b.c.d к вам на x.x.x.x на 22 порт, ему (пакету) сделали DNAT и дальше он пошел на 192.168.0.10. 192.168.0.10 его принял и послал ответ. Естественно, ответ послал от себя, а не от x.x.x.x. Приходит этот ответ дяде Васе, а он его не ждет, т.к. он обращался к x.x.x.x, а ответ пришел от 192.168.0.10. Результат - соединения нет. Или я опять где-то ошибаюсь ? :-)

spirit ★★★★★
()

> Как я понял существует два варианта(version1/version2).
Говорят еще есть такая вещь, как rinetd (сам не пользовался), которая тоже умеет.

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

У меня вот какая проблема получается.
На машине которая работает как роутер между подсетями всё работает (Red Hat 8.0), нормально. Все варианты работают я проверял.
Но на машине которая работает шлюзом в интернет не работает ни один из вариантов!
Я ещё поставил на одну локальную машину Red Hat 9.0. У этой машины ip 192.168.0.201 я пытался на ней сделать редирект порта на машину 192.168.0.10 тоже ничего не получается.
Я вообще уже немного разобрался как этот редирект работает, но почему он срабатывает только на одной машине. В чем различия. Я файрвол на RH8 и RH9 вообще настраивал одинаково кнопочкой в KDE средний уровень защиты доступ к интерфейсам ftp,ssh.
В чем же может быть разница!?

Youra_P
() автор топика
Ответ на: комментарий от spirit

У меня есть три машины на которых я проверяю редирект портов:
1. Shluz (RedHat 7.2 + ядро 2.4.19 c iptables) Это шлюз в интернет он имеет внешний eth0 - x.x.x.x и внутренний eth1 - 192.168.0.1
2. Base (RedHat 8.0) Это роутер с двумя интерфейсами
eth0 - 192.168.0.10 и eth1 - 194.190.67.10
3. Gregson (RedHat 9.0) eth0 - 192.168.0.201
Все варианты предложенные вами работают на машине Base!!!
Но ни один из этих вариантов не работает на машине Shluz и Gregson!!!
В чем может быть разница, в настройках на этих машинах.
На машине BASE iptables настроен был кнопочкой в KDE безопасность среднего уровня(или что в этом роде) доступ на оба интерфейса ftp,ssh. Так же я настраивал и на машине Gregson. Но на машине Gregson редирект не работает.
В чем дело?

Youra_P
() автор топика
Ответ на: комментарий от spirit

Вот что я настраивал на роутере
В файле /etc/sysctl.conf ставил net.ipv4.ip_forward = 1
eth0 - 192.168.0.10
eth1 - 194.190.67.10

route add -net 194.190.67.0 netmask 255.255.255.0 gw 194.190.67.10 eth1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.0.10 eth0

x.x.x.x - внешний ip адрес на шлюзе.
Это вот у меня на роутере
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
x.x.x.x 192.168.0.1 255.255.255.255 UGH 0 0 0 eth0
192.168.0.0 192.168.0.10 255.255.255.0 UG 0 0 0 eth0
192.168.0.0 * 255.255.255.0 U 0 0 0 eth0
194.190.67.0 194.190.67.10 255.255.255.0 UG 0 0 0 eth1
194.190.67.0 * 255.255.255.0 U 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
Вот этой комманды хватает для редиректа:
iptables -t nat -A PREROUTING -p tcp -d 192.168.0.10 --dport 21
-j DNAT --to-destination 194.190.67.118:21
И всё работает ок.

А вот как route настроен на шлюзе на котором ничего не пашет
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
x.x.x.x * 255.255.255.192 U 0 0 0 eth0
192.168.0.0 192.168.0.1 255.255.255.0 UG 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
194.190.67.0 192.168.0.10 255.255.255.0 UG 0 0 0 eth1
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default cisco-air-2.air 0.0.0.0 UG 0 0 0 eth0

Что я мог перепутать с роутингом. Я чую касяк где-то здесь!
Редирект порта я пытаюсь сделать со шлюза на роутер, а тут наверное
где-то роутинг не так настроен!

Вот убрал всякие лишние роуты.
Вот на шлюзе пытаюсь перебросить 21 порт на машину 192.168.0.10.
Со шлюза эта машина пингуется. С машины 192.168.0.10 пингуется
внутренний интерфейс шлюза - 192.168.0.1.
#!/bin/bash
IPTABLES="/sbin/iptables"
INET_IP="x.x.x.x"
INET_IFACE="eth0"
LAN_IP="192.168.0.1"
LAN_IP_RANGE="192.168.0.0/24"
LAN_IP_RANGE2="194.190.67.0/24"
LAN_BCAST_ADRESS="192.168.0.255"
LAN_BCAST_ADRESS2="194.190.67.255"
LAN_IFACE="eth1"
LO_IFACE="lo"
LO_IP="127.0.0.1"

echo "1">/proc/sys/net/ipv4/ip_forward

$IPTABLES -F
$IPTABLES -t nat -F

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT


$IPTABLES -t nat -A PREROUTING -p tcp -d $INET_IP --dport 21 -j DNAT --to-destination 192.168.0.10:21
$IPTABLES -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.0.10 --sport 21 -j SNAT --to-source $INET_IP:21

1. Всё что приходит на внешний интерфейс на 21 порт
перебрасываем на 192.168.0.10 на порт 21.
2. Всё пакеты которые пытаются быть отправленными с eth1(192.168.0.1)
приходящие с адреса 192.168.0.10 мы подменяем адрес,
на адрес внешнего интерфейса.
-o eth1 - потому что ответы фтп не могут приходить на eth0 шлюза он
с адреса 192.168.0.10 не пингуется.

Youra_P
() автор топика

а то же самое, только средствами ipchains?

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