Доброго времени суток!Снова встала необходимость настраивать iptables. На этот раз надо настроить переадресацию. Пробовал найти, чтобы не создавать тему и не отвлекать форумчан, но ничего не вышло (находил варианты, настраивал, но результата не добивался). Расскажу что имею и что сделал, а дальше уже судите.
Есть 3 компьютера, все к счастью под управлением NIX:
Клиентский компьютер - Fedora 16 x86_64 - IP_клиента
Сервер рабочий - CentOS 6.3 x86_64 - IP_раб_серв
Сервер тестовый - Centos 6.2 x86_64 - IP_тест_сервНа тестовом сервере у меня установлена JIRA на порту 9090 и я хочу, чтобы обращаясь с клиента IP_раб_серв:9090 попадали на IP_тест_серв:9090. Вроде все просто, стал реализовывать. В первую очередь добавил "net.ipv4.ip_forward = 1" и перечитал /etc/sysctl.conf
далее стал изменять девственно чистую настройку iptables после установки CentOS 6.3 следующим образом:
# iptables -t nat -A PREROUTING -i eth0 -d IP_раб_серв -p tcp -m tcp --dport 9090 -j DNAT -to-destination IP_тест_серв:9090
# iptables -A FORWARD -i eth0 -d IP_тест_серв -p tcp -m tcp --dport 9090 -j ACCEPTНо проверяя telnet'ом я увидел, что не работает. Стал читать дальше и нашел, что между PREROUTING и FORWARD надо добавить еще POSTROUTING и пробовал сделать вот так:
# iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 9090 -d IP_раб_серв -j SNAT to-source IP_тест_серв
но не понял не наоборот ли надо (если не сложно - поясните пожалуйста), т.е.
# iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 9090 -d IP_тест_серв -j SNAT to-source IP_раб_сервВ итоге сейчас пакеты не перенаправляются. Подскажите как правильно решить мою задачу. Все три компьютера находятся в локальной сети компании, где работаю. Заранее огромное спасибо!
> В итоге сейчас пакеты не перенаправляются. Подскажите как правильно решить мою задачу.
> Все три компьютера находятся в локальной сети компании, где работаю.нужна схема сети, с указанием IP-адресов хостов и их шлюзов, на всех участвующих хостах.
> нужна схема сети, с указанием IP-адресов хостов и их шлюзов, на всех
> участвующих хостах.Кажись немного разобрался...
изначально конфиг у меня стандартный, прогоняю скрипт с содержимым:
iptables -t nat -A PREROUTING --dst $IP_раб_серв -p tcp --dport 9090 -j DNAT --to-destination $IP_тест_серв
iptables -t nat -A POSTROUTING --dst $IP_тест_серв -p tcp --dport 9090 -j SNAT --to-source $IP_раб_серв
iptables -I FORWARD 1 -i eth0 -o eth0 -d $IP_тест_серв -p tcp -m tcp --dport 9090 -j ACCEPT
и дальше приходится еще сделать вот что:
iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited
иначе работать не будет, но это не правильно в плане безопастности, подскажите как лучше быть в этом случае.Вот мой конфиг iptables, который подгружается после перезагрузки.включения и то что имеем до выполнения скрипта:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [1:10000]
:OUTPUT ACCEPT [42026:9681910]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
>> нужна схема сети, с указанием IP-адресов хостов и их шлюзов, на всех
>> участвующих хостах.
> Кажись немного разобрался...
> изначально конфиг у меня стандартный, прогоняю скрипт с содержимым:
> iptables -t nat -A PREROUTING --dst $IP_раб_серв -p tcp --dport 9090 -j
> DNAT --to-destination $IP_тест_серв
> iptables -t nat -A POSTROUTING --dst $IP_тест_серв -p tcp --dport 9090 -j
> SNAT --to-source $IP_раб_серв
> iptables -I FORWARD 1 -i eth0 -o eth0 -d $IP_тест_серв -p tcp
> -m tcp --dport 9090 -j ACCEPTдля ответных пакетов правило добавьте и тогда не нужно будет удалять
>[оверквотинг удален]
> :FORWARD ACCEPT [1:10000]
> :OUTPUT ACCEPT [42026:9681910]
> -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
> -A INPUT -p icmp -j ACCEPT
> -A INPUT -i lo -j ACCEPT
> -A INPUT -m state --state NEW -m tcp -p tcp --dport 22
> -j ACCEPT
> -A INPUT -j REJECT --reject-with icmp-host-prohibited
> -A FORWARD -j REJECT --reject-with icmp-host-prohibited
> COMMIT
попробуй так:
iptables -t nat -A PREROUTING -p tcp -d IP_раб_серв --dport 9090 -j DNAT --to IP_тест_серв:9090
iptables -A INPUT -i eth0 -p tcp --dport 9090 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 9090 -m state --state ESTABLISHED -j ACCEPT
> попробуй так:
> iptables -t nat -A PREROUTING -p tcp -d IP_раб_серв --dport 9090 -j
> DNAT --to IP_тест_серв:9090
> iptables -A INPUT -i eth0 -p tcp --dport 9090 -m state --state
> NEW,ESTABLISHED -j ACCEPT
> iptables -A OUTPUT -o eth0 -p tcp --sport 9090 -m state --state
> ESTABLISHED -j ACCEPTа получается POSTROUTING не нужен?
а добавление "iptables -A OUTPUT -o eth0 -p tcp --sport 9090 -m state --state ESTABLISHED -j ACCEPT" что-то не помогло :( Только "iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited"
>[оверквотинг удален]
>> iptables -t nat -A PREROUTING -p tcp -d IP_раб_серв --dport 9090 -j
>> DNAT --to IP_тест_серв:9090
>> iptables -A INPUT -i eth0 -p tcp --dport 9090 -m state --state
>> NEW,ESTABLISHED -j ACCEPT
>> iptables -A OUTPUT -o eth0 -p tcp --sport 9090 -m state --state
>> ESTABLISHED -j ACCEPT
> а получается POSTROUTING не нужен?
> а добавление "iptables -A OUTPUT -o eth0 -p tcp --sport 9090
> -m state --state ESTABLISHED -j ACCEPT" что-то не помогло :( Только
> "iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited"при чем тут INPUT и OUTPUT. с помощью DNAT подставили ip другой машины, пакет пойдет через FORWARD.
POSTROUTING - нужен т.к. в туже подсеть перенаправляете , разжевано
http://www.opennet.ru/docs/RUS/iptables/#DNATTARGETа iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited помогает потому что на этом правиле режутся ответные пакеты, посмотрите счетчики, а лучше сделайте логирование.
так что пишите правило для ответных пакетов.смотрите tcpdump
Короче разобрался, настроил вот так:
к стандартному iptables добавил:
iptables -t nat -A PREROUTING --dst $IP_new -p tcp --dport 9090 -j DNAT --to-destination $IP_old
iptables -t nat -A POSTROUTING --dst $IP_old -p tcp --dport 9090 -j SNAT --to-source $IP_new
iptables -I FORWARD 1 -i eth0 -o eth0 -d $IP_old -p tcp -m tcp --dport 9090 -j ACCEPT
iptables -I FORWARD -m state --state ESTABLISHED -j ACCEPT
вот и вся любовь и никакой iptables -D FORWARD -j REJECT --reject-with icmp-host-prohibited теперь убирать не нужно.