LinuxForum.Fans
Тема

Как из белого ip перенаправить на конкретный адрес внутренней сети?

Автор: dsplin 26 сообщений 3565 просмотров
#384659

Всем привет. Нужна ваша помощь. Ситуация такая: Имею Ethernet модем который пропускает весь трафик на сервер выполняющий роль интернет-шлюза. Работает на GNU / Linux CentOS 5.5. Роль брандмауэра выполняет iptables, а также есть настроенный прозрачный прокси с помощью squid. Нужно сделать следующее - из белого ip перенаправить на конкретный адрес внутренней сети.

#384663

Эм трафик нужно направить на определённый IP или пробросить порт во внутреннюю сеть ?

#384666

Входящий из вне на белый ip трафик перенаправить на конкретный ip адрес внутренней сети. То есть я к примеру сижу у себя дома ввожу в браузере белый ip рабочей сети и меня перебрасывает на конкретный ip локальной сети на роботе.
Пример: на работе белый ip 1.2.3.4, внутренний ip 192.168.0.55. Когда я дома через браузер наберу 1.2.3.4 меня надо перенаправить на 192.168.0.55.
Это как технология DMZ на роутерах.

#384674

Делал у себя так:

1) Нужный трафик с модема, следует направить на шлюз.

2) Настроить правила iptables.

(для примера)

-- При обращении к серверу 192.168.1.34 по протоколу tcp на порт 8000 интерфейса eth0, перенаправлять запросы на сервер 192.168.2.5 порт 8000

[console]# iptables -t nat -A PREROUTING --dst 192.168.1.34 -i eth0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.2.5:8000[/console]

[console]# iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.2.5 -p tcp -m tcp --dport 8000 -j ACCEPT[/console]

Впрочем, я когда-то давно это настраивал.

================
Надеюсь я правильно понял структуру сети
компьютер к которому нужно подключиться --> Шлюз (локальный ip) --> Модем (Белый ip) --> интернет <-- дом

#384691
Marley написал:
Делал у себя так:

1) Нужный трафик с модема, следует направить на шлюз.

2) Настроить правила iptables.

(для примера)

-- При обращении к серверу 192.168.1.34 по протоколу tcp на порт 8000 интерфейса eth0, перенаправлять запросы на сервер 192.168.2.5 порт 8000

[console]# iptables -t nat -A PREROUTING --dst 192.168.1.34 -i eth0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.2.5:8000[/console]

[console]# iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.2.5 -p tcp -m tcp --dport 8000 -j ACCEPT[/console]

Впрочем, я когда-то давно это настраивал.

================
Надеюсь я правильно понял структуру сети
компьютер к которому нужно подключиться --> Шлюз (локальный ip) --> Модем (Белый ip) --> интернет <-- дом

Были похожие мысли:

iptables -t nat -A PREROUTING --dst 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.55

iptables -t nat -A POSTROUTING --dst 192.168.0.55 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1

iptables -t nat -A OUTPUT --dst 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.55

iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.0.55 -p tcp -m tcp --dport 80 -j ACCEPT

где 192.168.0.55 - ip локальной машины
1.2.3.4 - ip белий
192.168.0.1 - внутренний IP-адрес шлюза, в локальной сети

но при вводе команды выдает bash: iptables: command not found. Может вручную отредактировать файл /etc/sysconfig/iptables?

#384692

А от рута не пробывали запускать команду???

#384693

Я думаю, что нужно было бы просто зайти под root командой:

[console]$ su - root[/console]

При необходимости, подсказать операционной системе, где находится iptables.

#384694
dsplin написал:
[quote=Marley]Делал у себя так:

1) Нужный трафик с модема, следует направить на шлюз.

2) Настроить правила iptables.

(для примера)

-- При обращении к серверу 192.168.1.34 по протоколу tcp на порт 8000 интерфейса eth0, перенаправлять запросы на сервер 192.168.2.5 порт 8000

[console]# iptables -t nat -A PREROUTING --dst 192.168.1.34 -i eth0 -p tcp --dport 8000 -j DNAT --to-destination 192.168.2.5:8000[/console]

[console]# iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.2.5 -p tcp -m tcp --dport 8000 -j ACCEPT[/console]

Впрочем, я когда-то давно это настраивал.

================
Надеюсь я правильно понял структуру сети
компьютер к которому нужно подключиться --> Шлюз (локальный ip) --> Модем (Белый ip) --> интернет <-- дом

Были похожие мысли:

iptables -t nat -A PREROUTING --dst 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.55

iptables -t nat -A POSTROUTING --dst 192.168.0.55 -p tcp --dport 80 -j SNAT --to-source 192.168.0.1

iptables -t nat -A OUTPUT --dst 1.2.3.4 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.55

iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.0.55 -p tcp -m tcp --dport 80 -j ACCEPT

где 192.168.0.55 - ip локальной машины
1.2.3.4 - ip белий
192.168.0.1 - внутренний IP-адрес шлюза, в локальной сети

но при вводе команды выдает bash: iptables: command not found. Может вручную отредактировать файл /etc/sysconfig/iptables?[/quote]
Можно.
И можно 2 варианта:
1. $(which iptables) бла, бла...
2. /usr/sbin/iptables бла, бла...
Главное из под рута.

#384695

Я модемы никогда не настраивал, только маршрутизаторы.
У него есть ip адрес внутренней сети?

Т.е. Белый адрес на интерфейсе сервера или на модеме?

#384697
Marley написал:
Я думаю, что нужно было бы просто зайти под root командой:

[console]$ su - root[/console]

При необходимости, подсказать операционной системе, где находится iptables.

Извините за глупый вопрос, но как подсказать ОС где находится iptables? Все делаю под root.

#384698

[console]# echo $PATH[/console]
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

[console]# which iptables[/console]
/sbin/iptables

Чтобы вызвать iptables без явного указания пути, нужно, чтобы каталог где находится программа был указан в $PATH

Добавить путь в PATH можно командой:
[console]export PATH=$PATH:/some_folder[/console]

============

Зайти под root можно с выполнением стартовых скриптов и без.
Чтобы зайти с выполнением и задать переменные вроде $PATH, нужно выполнить su - root. Без - он не выполнит какие-то скрипты и переменная $PATH может быть пустой. Деталей точнее не помню.

#384709
Marley написал:
Я думаю, что нужно было бы просто зайти под root командой:

[console]$ su - root[/console]

При необходимости, подсказать операционной системе, где находится iptables.

Через команду iptables все же удалось забить нужные строчки, сохранил с помощью команды iptables-save, перегрузил /etc/init.d/iptables restart и в итоге нечего. хочу попробовать немножко переделать команды но не вижу их в файле /etc/sysconfig/iptables. Изменений в нем нет. Это потому что они не сохранились, или записались не туда?

#384710

Вот вики написано что нужно вот такой командой сохранят настройки
[console]/sbin/service iptables save[/console]

#384713

обычно так:

text
iptables-save > /path/file 

обратно:

text
iptables-resore < /path/file

вторую строчку обычно в /etc/rc.local

#384716
kisil написал:
Вот вики написано что нужно вот такой командой сохранят настройки
[console]/sbin/service iptables save[/console]

/sbin/service iptables save сработал лучше чем iptables-save. данные уже сохранились, но не все.

text
iptables -I FORWARD 1 -i eth1 -o eth0 -d 192.168.0.55 -p tcp -m tcp --dport 80 -j ACCEPT 

- там нет (/etc/sysconfig/iptables). Может команда неправильная?

Я знаю что зачастую прописывают "eth0 -o eth1" а не "eth1 -o eth0", но у меня eth1 внешний интерфейс шлюза а eth0 внутренний интерфейс шлюза.
Или она сохраняется в другом месте?

#384763

iptables хранит правила в 3х таблицах.

filter
nat
mangle

Вывести данные таблиц на экран можно командами:

# iptables -L (таблица fillter по умолчанию)
# iptables -t nat -L
# iptables -t mangle -L

Правила которые вы вводите применяются сразу. Но если их не сохранить, то после перестартовки сервиса iptables они потеряются.
Если при выполнении команды, ошибок не возникает правило добавляется в таблицу.

Iptables сравнивает правила для пакета сверху вниз, до первого подходящего действия которое нужно выполнить.

#384778

После сохранения правил, покажыте вывод файла с сохранёными правилами. Можно наверное ручками дописать в него правила.

#384959

Правила все сохраняются в /etc/sysconfig/iptables. Потом, после проверки, оказалось что с внешнего адреса, все же идет перенаправление на локальный адрес сети, то есть какой бы из них я не вбил я попадаю на нужный мне вебсерве. Это как раз то что мне нужно, но происходит процесс только когда я делаю его из рабочей сети, когда же пробою подключится из вне, ничего не происходит. то есть как мне кажется тот адрес который я считал белым или внешним, это не он. Сеть у меня имеет 2 интерфейса, один внешний eth1 (как мне кажется) а другой внутренний eth0 который разбит на две подсети. ресурсы вроде http://2ip.ru/ выдает мне ip именно eth1. Может ли быть такое что с реального внешнего ip идет перенапрвления на ip eth1 и по этому ресурсы типа 2ip.ru видят его как внешний. Если да то как узнать настоящий внешний адрес. Адрес модема я не знаю и подключится стандартными способами типа 192.168.0.1 или по адресу шлюза не могу + нет пароля на модем... ресетнуть его тоже не могу так как настройки неизвестны мне его. Человека который когда то настраивал сеть уже не достать. Поделитесь пожалуйста своими мыслями!

#384960
dsplin написал:
Правила все сохраняются в /etc/sysconfig/iptables. Потом, после проверки, оказалось что с внешнего адреса, все же идет перенаправление на локальный адрес сети, то есть какой бы из них я не вбил я попадаю на нужный мне вебсерве. Это как раз то что мне нужно, но происходит процесс только когда я делаю его из рабочей сети, когда же пробою подключится из вне, ничего не происходит. то есть как мне кажется тот адрес который я считал белым или внешним, это не он. Сеть у меня имеет 2 интерфейса, один внешний eth1 (как мне кажется) а другой внутренний eth0 который разбит на две подсети. ресурсы вроде http://2ip.ru/ выдает мне ip именно eth1. Может ли быть такое что с реального внешнего ip идет перенапрвления на ip eth1 и по этому ресурсы типа 2ip.ru видят его как внешний. Если да то как узнать настоящий внешний адрес. Адрес модема я не знаю и подключится стандартными способами типа 192.168.0.1 или по адресу шлюза не могу + нет пароля на модем... ресетнуть его тоже не могу так как настройки неизвестны мне его. Человека который когда то настраивал сеть уже не достать. Поделитесь пожалуйста своими мыслями!

ну так может всетки покажеш нам вывод

text
iptables -L -n -v
iptables -t nat -L -n -v

а то как назло все наши телепаты на летнем отдыхе ;)

#384961

Покажу. Только завтра. Нужно до работы добраться.

Войдите или зарегистрируйтесь, чтобы ответить.