Есть 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?
IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Модераторы: SLEDopit, Модераторы разделов
-
vinport
- Сообщения: 4
- ОС: Ubuntu
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Потому что 192.168.0.158 и 192.168.0.127 -- одна подсеть, а 127.0.0.1 и 192.168.0.127 -- нет.
-
vinport
- Сообщения: 4
- ОС: Ubuntu
Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Согласен, это логично.
Подскажите, пожалуйста, как решить задачку?
Вторые сутки бьюсь, начиная с установки убунты, настройки сети для виртуалки и т.п.
Проблемы были, но постепенно решались при помощи великого гугля. А тут уже просто ступор и отчаяние...
-
KiWi
- Бывший модератор
- Сообщения: 2521
- Статус: статус, статус, статус
Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Сделать SNAT, чтобы адреса были в одной подсети.
-
vinport
- Сообщения: 4
- ОС: Ubuntu
Re: IPTABLES: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Пробовал вот так тоже добавлять:
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: пробросить исходящее соединение на порт локалхоста на другой хост сети.
А, ну да... Всё, как и должно быть.
При добавлении 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. Как -- пока нет ни одной идеи.
При добавлении 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: пробросить исходящее соединение на порт локалхоста на другой хост сети.
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: пробросить исходящее соединение на порт локалхоста на другой хост сети.
Sleeping Daemon писал(а): ↑16.12.2008 08:30KiWi писал(а): ↑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 - поменяю принцип работы, а пока будет вот так.