IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

vinport
Сообщения: 4
ОС: Ubuntu

IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение vinport »

Есть 2 компьютера в локальной сети:
LIN (192.168.0.158) - рабочий компьютер с ОС Ubuntu 8.04
WIN (192.168.0.127) - виртуальная машина на компе LIN под virtualbox, на ней WinXP с программой, которая прослушивает порт 2803

Задача:
Законнектиться с компьютера LIN на порт 2803 компьютера WIN командой:
telnet 127.0.0.1 2803
Т.е. обязательно обращение именно на 127.0.0.1:2803 и никуда больше!

Предварительно проверяем:
telnet 192.168.0.127 2803
Работает.

Пробрасываем порты локалхоста:
sudo iptables -t nat -A OUTPUT -d 127.0.0.1 -p tcp -m tcp --dport 2803 -j DNAT --to-destination 192.168.0.127

$ telnet 127.0.0.1 2803
Trying 127.0.0.1...
И получаем висящее соединение, неудача. Такое ощущение, что мы ожидаем и никак не можем получить ответ на запрос.
Добавлялись разные варианты типа:
sudo iptables -t nat -A POSTROUTING -p tcp --dport 2803 -d 192.168.0.127 -j SNAT --to-source 127.0.0.1
sudo iptables -t nat -A POSTROUTING -p tcp --dport 2803 -d 192.168.0.127 -j MASQUERADE --to-ports 2803
но это тоже не помогает.

Для теста пробрасываем порты для внешнего IP компьютера LIN:
sudo iptables -t nat -A OUTPUT -d 192.168.0.158 -p tcp -m tcp --dport 2803 -j DNAT --to-destination 192.168.0.127

$ telnet 192.168.0.158 2803
Trying 192.168.0.158...
Connected to 192.168.0.158.
...
т.е. это работает, но нам нужно обращение именно через 127.0.0.1


Где грабли? Почему с локалхоста не получается пробросить порт, не обращаясь к его внешнему IP?
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение KiWi »

Потому что 192.168.0.158 и 192.168.0.127 -- одна подсеть, а 127.0.0.1 и 192.168.0.127 -- нет.
Спасибо сказали:
vinport
Сообщения: 4
ОС: Ubuntu

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение vinport »

KiWi писал(а):
16.12.2008 00:38
Потому что 192.168.0.158 и 192.168.0.127 -- одна подсеть, а 127.0.0.1 и 192.168.0.127 -- нет.

Согласен, это логично.

Подскажите, пожалуйста, как решить задачку?
Вторые сутки бьюсь, начиная с установки убунты, настройки сети для виртуалки и т.п.
Проблемы были, но постепенно решались при помощи великого гугля. А тут уже просто ступор и отчаяние... :cray:
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение KiWi »

Сделать SNAT, чтобы адреса были в одной подсети.
Спасибо сказали:
vinport
Сообщения: 4
ОС: Ubuntu

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение vinport »

KiWi писал(а):
16.12.2008 01:31
Сделать SNAT, чтобы адреса были в одной подсети.

Пробовал вот так тоже добавлять:
sudo iptables -t nat -A POSTROUTING -d 192.168.0.127 -p tcp -m tcp --dport 2803 -j SNAT --to-source 192.168.0.158
и так:
sudo iptables -t nat -A POSTROUTING -p tcp --dport 2803 -d 192.168.0.127 -j MASQUERADE --to-ports 2803
и даже так:
sudo iptables -t nat -A POSTROUTING -p tcp --dport 2803 -d 192.168.0.127 -j MASQUERADE

не помогало...
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение KiWi »

А, ну да... Всё, как и должно быть.
При добавлении DNAT в PREROUTING -- маршрут определяется после DNAT, соответственно, он определяется по адресу, указанному в --to-destination.
При добавлении DNAT в OUTPUT -- маршрут уже определён. Для 192.168.0.158 -- это маршрут в ту же сеть, в которой находится 192.168.0.127. Для 127.0.0.1 -- это будет lo. Соответственно, во втором случае пакет так в lo и останется.

P.S.: вроде когда-то было расширение для iptables, делающее target ROUTE.
P.P.S.: из области фантастики -- поизвращаться с iproute2. Как -- пока нет ни одной идеи.
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение Sleeping Daemon »

KiWi писал(а):
16.12.2008 02:33
А, ну да... Всё, как и должно быть.
При добавлении DNAT в PREROUTING -- маршрут определяется после DNAT, соответственно, он определяется по адресу, указанному в --to-destination.
При добавлении DNAT в OUTPUT -- маршрут уже определён. Для 192.168.0.158 -- это маршрут в ту же сеть, в которой находится 192.168.0.127. Для 127.0.0.1 -- это будет lo. Соответственно, во втором случае пакет так в lo и останется.

P.S.: вроде когда-то было расширение для iptables, делающее target ROUTE.
P.P.S.: из области фантастики -- поизвращаться с iproute2. Как -- пока нет ни одной идеи.

Можно сделать ssh тунель. ssh сервер под винды есть.
Спасибо сказали:
vinport
Сообщения: 4
ОС: Ubuntu

Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.

Сообщение vinport »

Sleeping Daemon писал(а):
16.12.2008 08:30
KiWi писал(а):
16.12.2008 02:33
А, ну да... Всё, как и должно быть.
При добавлении DNAT в PREROUTING -- маршрут определяется после DNAT, соответственно, он определяется по адресу, указанному в --to-destination.
При добавлении DNAT в OUTPUT -- маршрут уже определён. Для 192.168.0.158 -- это маршрут в ту же сеть, в которой находится 192.168.0.127. Для 127.0.0.1 -- это будет lo. Соответственно, во втором случае пакет так в lo и останется.

P.S.: вроде когда-то было расширение для iptables, делающее target ROUTE.
P.P.S.: из области фантастики -- поизвращаться с iproute2. Как -- пока нет ни одной идеи.

Можно сделать ssh тунель. ssh сервер под винды есть.

Это уже слишком сложно в реализации.
Спасибо большое за попытку помочь, поигрался еще полдня и понял, что не всегда надо делать "как надо", порой лучше сделать "как проще".
И нашел плагин к браузеру, локально подменяющий в исходниках конкретной загружаемой веб-странички строку "127.0.0.1" на "192.168.0.127".
Неуниверсально, зато просто в реализации.

Если найдется простое решение для iptables - поменяю принцип работы, а пока будет вот так.
Спасибо сказали: