LINUX.ORG.RU
ФорумAdmin

Попытка настроить DNAT.


0

1

Всем здравия. Задача тривиальная до безобразия. Есть шлюз на Ubunte 11.04. Нужно через него пробросить 80 порт для пользователей из инета к WEB-серверу внутри сети. Упростил все, не идет. Делал как в DNAT и Iptables . Все равно не получается. Подскажите, где затык?

Листинг:

iptables=«/sbin/iptables»

/sbin/depmod -a

/sbin/modprobe ip_tables

/sbin/modprobe ip_conntrack

/sbin/modprobe iptable_filter

/sbin/modprobe iptable_mangle

/sbin/modprobe iptable_nat

/sbin/modprobe ipt_LOG

/sbin/modprobe ipt_limit

/sbin/modprobe ipt_state

/sbin/modprobe nf_nat_ftp

/sbin/modprobe ip_nat_ftp

/sbin/modprobe ipt_MASQUERADE

echo «Loading iptables rules»

lan_iface=«eth0»

lan_ip=«192.168.0.240»

lan_ip_range=«192.168.0.0/24»

inet_iface=«eth1»

inet_ip=«212.176.ххх.ххх»

echo «1» > /proc/sys/net/ipv4/ip_forward

# Чистим все правила в таблицах filter, nat и mangle

$iptables -t filter -F

$iptables -t nat -F

$iptables -t mangle -F

$iptables -t nat -F PREROUTING

$iptables -t nat -F POSTROUTING

# Удаляем все пользовательские цепочки в таблицах filter, nat и mangle

$iptables -t filter -X

$iptables -t nat -X

$iptables -t mangle -X

# Задаем политики по умолчанию

$iptables -t filter -P INPUT ACCEPT

$iptables -t filter -P FORWARD ACCEPT

$iptables -t filter -P OUTPUT ACCEPT

# Разрешаем локальный траффик

$iptables -A INPUT -i lo -j ACCEPT

$iptables -A INPUT -i eth0 -j ACCEPT

$iptables -A OUTPUT -o lo -j ACCEPT

$iptables -A OUTPUT -o eth0 -j ACCEPT

# Разрешаем уже установленные соединения

$iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

$iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

$iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Разрешаем доступ из внутренней сети наружу

$iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

# Проброс 80 порта на 192.168.0.235

$iptables -A FORWARD -p tcp -o eth0 --dport 80 -j ACCEPT

$iptables -A PREROUTING -t nat -p tcp --dport 80 -i eth1 -j DNAT --to-destination 192.168.0.235:80

#------------------------------------------------------

На шлюзе netstat-nat выдает:

# netstat-nat

Proto NATed Address Destination Address State

tcp 85.26.xx.xx:37039 192.168.0.235:www SYN_SENT

tcp 85.26.xx.xx:37038 192.168.0.235:www SYN_SENT

tcp 85.26.xx.xx:37040 192.168.0.235:www SYN_SENT

85.26.хх хх - машина, из которой ломлюсь на шлюз из инета в браузере. Насколько я понял, проброс на целевую машину получился, а вот дальше как быть?

Спасибо заранее за ответы. Любителям отвечать «кури маны» попрошу не дергаться.

Вроде все правильно.

1. Посмотри счетчики iptables (sudo iptables -L FORWARD -vn) может в каком-то правиле ошибка и пакет на него не попадает.

2. Является ли «шлюз на Ubunte» маршрутом по-умолчанию для 192.168.0.235 (этот сервер знает куда возвращать ответ?)

sdio ★★★★★
()

Поехали.

1)

$iptables -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Толстый полярный лис по ночам не снится? Ты разрешил всё и всем. В том числе полный доступ из интернета в локальную сеть

2)

Нужно через него пробросить 80 порт для пользователей из инета к WEB-серверу внутри сети.

$iptables -A FORWARD -p tcp -o eth0 --dport 80 -j ACCEPT
[...]
>$iptables -A PREROUTING -t nat -p tcp --dport 80 -i eth1 -j DNAT --to-destination 192.168.0.235:80

Да, это правильно, должно работать.

Сначала проверь, что из интернета вообще приходят пакеты на 80 порт шлюза - не все провайдеры одинаково полезны. tcpdump в помощь.

Затем тем же tcpdump'ом проверяй остальной путь пакетов.

3) Для отладки хорошо использовать

watch -n 5 iptables -nvx -L FORWARD -t filter

цепочки и таблицы смотри по очереди все нужные. По счётчику пакетов будет видно, что и куда идёт

Ну и tcpdump, конечно.

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

4) ещё для выхода из локальной сети в интернет ты забыл маскарадинг либо SNAT

router ★★★★★
()

Похоже, и правда, ответы затерялись где-то. Стоит посмотреть, что делается на локальном Веб-сервере. Во-первых, доходят ли до него запросы, и по какому маршруту он посылает ответы. Если вообще посылает.

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

Поставил на шлюз терминальный браузер links2 - с помощью него на WEB-сервер захожу нормально. Значит Web-сервер отвечает. А что и как посмотреть, подскажите.

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

Ну, я, конечно, не эксперт, но я бы посмотрел командой

netstat -n -r[[/code]] или [[code]]route[[/code]].

delete83 ★★
()
# Задаем политики по умолчанию

$iptables -t filter -P FORWARD ACCEPT

$iptables -t filter -P OUTPUT ACCEPT

Ты задал политики по-умолчанию в ACCEPT, всё что ты там дальше разрешаешь не имеет ВООБЩЕ НИКАГОГО эффекта.

Далее, что нам там покажет

iptables-save -t nat 

«Проброс портов» заключается в понимание, что собсно такое этот проброс портов. Почитай, что такое NAT и, в случае с iptables - DNAT (destination) и SNAT (source).

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

Ты задал политики по-умолчанию в ACCEPT, всё что ты там дальше разрешаешь не имеет ВООБЩЕ НИКАГОГО эффекта.


Спокойно, это только filter. Ничего страшного не случилось. =)

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

Поначалу политики по умолчанию INPUT и FORWARD были в DROP. Пришлось их открывать поочередно в надежде поймать, где собака порылась. Но суть даже не в открытых по умолчанию политиках. Я понимаю, что сначала, грубо говоря, вся запрещаем, а потом потихоньку открываем. Суть в другом. Мне нужно решить конкретную задачу - чтобы с браузера моего ноутбука я имел доступ на WEB-сервер моей локальной сети.

Вывод iptables-save -t nat:

# Generated by iptables-save v1.4.10 on Mon Oct 3 16:52:24 2011

*nat

:PREROUTING ACCEPT [523:65145]

:INPUT ACCEPT [397:58233]

:OUTPUT ACCEPT [19:2302]

:POSTROUTING ACCEPT [19:2302]

-A PREROUTING -d 212.176.xxx.xxx/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.235:80

-A POSTROUTING -d 192.168.0.235/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 212.176.xxx.xxx

COMMIT

# Completed on Mon Oct 3 16:52:24 2011

Строчку "-A POSTROUTING -d 192.168.0.235/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 212.176.xxx.xxx " вычитал в http://www.alexmuz.ru/ubuntu-iptables/ уже после опубликования первого поста.

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

>Спокойно, это только filter. Ничего страшного не случилось. =)

Для профнепригодности больше и не нужно. Из того же широковещательного домена можно поиметь? Можно.

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

>-A POSTROUTING -d 192.168.0.235/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 212.176.xxx.xxx

Хмм... Не употребляй больше эти вещества :)

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

Строчку "-A POSTROUTING -d 192.168.0.235/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 212.176.xxx.xxx " вычитал в http://www.alexmuz.ru/ubuntu-iptables/ уже после опубликования первого поста.


В вашем случае, она ничего не меняет. SNAT нужен только для исходящих соединений. Например, если кто-то в локальной сети захочет выйти в интернет. Сам выйти, а не акцептовать соединение извне. И правило у вас неправильно написано. Если уж писать -d, то -d 85.26.хх хх, но даже это будет неправильно. Лучше удалите эту запись вообще.

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

dedfokich> Поставил на шлюз терминальный браузер links2 - с помощью него на WEB-сервер захожу нормально. Значит Web-сервер отвечает.

Да, eth0 с адресом 192.168.х.х в той же сети что и веб-сервер, конечно они работают, но это не значит, что веб-сервер знает куда возвращать ответ для нелокальных адресов. Кто у веб-сервера default gateway?

При ACCEPT во всех цепочках, достаточно двух правил

iptable -t nat -I PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-address 192.168.0.235

iptables -t nat -I PROSTROUTING -o eth1 -j MASQUERADE

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

Это не профнепригодность, это упрощенный и до предела разрешающий iptables. Задача состоит в том, чтобы с браузера моего ноутбука я имел доступ на WEB-сервер моей локальной сети. Когда задача будет решена, ненужное будет запрещено. Если у вас, уважаемый, есть что сказать по существу задачи, говорите. Иначе это обычный флуд.

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

>Если у вас, уважаемый, есть что сказать по существу задачи, говорите. Иначе это обычный флуд.

Если у вас, уважаемый, было бы желание решить задачу, вы бы читали ответы, в т.ч. мое первое сообщение в этой теме. Иначе это обычный троллинг.

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

Спасибо всем, кто откликнулся. Все получилось. Не был настроен gateway на WEB-сервере. Ситуация из разряда наиглупейших. router, не держите на меня зла. Требовалось быстрое решение, поэтому я позволял себе достаточно резкие высказывания. Еще раз всем спасибо. До свидания.

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