[SOLVED] Не отрабатывает действие DNAT в iptables

Приветствую товарищи!
После недавнего обновления системы перестал работать проброс портов. Причем SNAT работает без проблем.
Откатываться не хочется, а просто хочется разобраться в чем же дело...
Скрипт настройки файерволла:
#!/bin/bash
#Clear rules
iptables -F
iptables -t nat -F
#Base rules
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
#Variable
export WAN_IP="212.192.xxx.xxx"
export LAN=eth0
export WAN=eth1
#NAT rules
iptables -A FORWARD -i ${LAN} -s 192.168.1.4 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.1.4 -j ACCEPT
iptables -t nat -A POSTROUTING -o ${WAN} -j SNAT --to-source ${WAN_IP}
#Forward ports
iptables -t nat -A PREROUTING -i ${WAN} -p tcp --dport 6884 -j DNAT --to-destination 192.168.1.4
iptables -t nat -A PREROUTING -i ${WAN} -p udp --dport 6884 -j DNAT --to-destination 192.168.1.4
iptables -t nat -A PREROUTING -i ${WAN} -p tcp --dport 80 -j DNAT --to-destination 192.168.1.4
iptables -t nat -A PREROUTING -i ${WAN} -p tcp --dport 8084 -j DNAT --to-destination 192.168.1.4
#Save rules
/etc/init.d/iptables save
/etc/init.d/iptables restart

Во всех источниках, даже вики, все описано точно так же как и у меня, вот только не работает у меня... =(
Помогите разобраться в проблеме.

echo "1" >

echo "1" > /proc/sys/net/ipv4/ip_forward

Если человек пишет, что SNAT

Если человек пишет, что SNAT у него прекрасно работает, то тогда, наверно не в этом проблема ;)

Дайте # route # iptables

Дайте

# route
# iptables -vL
# iptables -t nat -vL

SUPER pilot # route Kernel IP

SUPER pilot # route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
212.192.xxx.128 * 255.255.255.128 U 0 0 0 eth1
192.168.3.0 * 255.255.255.0 U 0 0 0 vlan1
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
loopback * 255.0.0.0 U 0 0 0 lo
default 212.192.xxx.129 0.0.0.0 UG 0 0 0 eth1

SUPER pilot # iptables -vL
Chain INPUT (policy ACCEPT 25M packets, 33G bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
16M 21G ACCEPT all -- eth0 any 192.168.1.4 anywhere
8955K 707M ACCEPT all -- eth1 any anywhere 192.168.1.4

Chain OUTPUT (policy ACCEPT 10M packets, 1100M bytes)
pkts bytes target prot opt in out source destination

SUPER pilot # iptables -t nat -vL
Chain PREROUTING (policy ACCEPT 33M packets, 2473M bytes)
pkts bytes target prot opt in out source destination
766 36852 DNAT tcp -- eth1 any anywhere anywhere tcp dpt:6884 to:192.168.1.4
21 1995 DNAT udp -- eth1 any anywhere anywhere udp dpt:6884 to:192.168.1.4
0 0 DNAT tcp -- eth1 any anywhere anywhere tcp dpt:http to:192.168.1.4
0 0 DNAT tcp -- eth1 any anywhere anywhere tcp dpt:8084 to:192.168.1.4

Chain POSTROUTING (policy ACCEPT 8585K packets, 438M bytes)
pkts bytes target prot opt in out source destination
54416 3139K SNAT all -- any eth1 anywhere anywhere to:212.192.123.254

Chain OUTPUT (policy ACCEPT 4061K packets, 261M bytes)
pkts bytes target prot opt in out source destination

Для проверки был открыт 80 порт и на машине 192.168.1.4 поднят апач, который благополучно работает, но извне никто не может подключиться к нему...

Если ничего не помогает, прочти наконец инструкцию...

поставьте ferm. очень удобная

поставьте ferm. очень удобная штука для написания правил. примеры в комплекте есть.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Это те же яйца, только вид

Это те же яйца, только вид сбоку. Этот инструмент позволяет записывать несколько правил в отдной таблице причем кратко, только и всего...

Если ничего не помогает, прочти наконец инструкцию...

но позволяет это делать

но позволяет это делать УДОБНО.

P.S.: Linux - это красная таблетка :-) Windows - синяя...

Я пересобрал ядро (2.6.30-r4)

Я пересобрал ядро (2.6.30-r4) и iptables, но проблемма осталась...
Пробовал поставить самый последний iptables (1.4.4), но все тщетно...

Если ничего не помогает, прочти наконец инструкцию...

tcpdump, поднятый на внешнем

tcpdump, поднятый на внешнем и внутреннем интерфейсах покажет, доходят пакеты или нет
Недавно с таким столкнулся, оказалось пров начал фильтровать порт 7777, а я на кривой DNAT грешил (был вечер изменения маршрутизации)

tcpdump показывает что

tcpdump показывает что проходят только ask пакеты.... state не помогает...

Если ничего не помогает, прочти наконец инструкцию...

1 iptables -P FORWARD DROP

1 iptables -P FORWARD DROP замените на iptables -P FORWARD ACCEPT, угу, не будет у Вас фаервола, но Вам же проблему надо решить, а потом гайки накрутите.

2 вместо всех 4х правил оставьте только одно и чуть-чуть перепешите его:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.4

Если Вы со своего компа вместо www.ru получите "It works!", значит правило работает :)
Добавьте до:

iptables -t nat -A PREROUTING -p tcp -s ! 192.168.1.0/24 --dport 80 -j DNAT --to-destination 192.168.1.4

и проверьте как все смотрится с внешнего мира. Ну далее мелкими шажками приближайтесь к тому, что Вы хотите... :)

PS. Да, и главное забыл, ПЕРЕД Вашим правилом поставьте:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j LOG --log-prefix "prerouting:"
Вам будет видно что попало под Ваше условие.

Ёж птица гордая - пока не пнешь, не полетит!

Решил проблему самым

Решил проблему самым необычным способом... Оказалось, что это мой провайдер вдруг закрыл мне входящие соединения... Короче все заработало.
Вот оптимальные правила для корректного проброса порта:
iptables -t nat -A PREROUTING --dst 212.192.xxx.xxx -p tcp --dport 6884 -j DNAT --to-destination 192.168.1.4
iptables -t nat -A POSTROUTING --dst 192.168.1.4 -p tcp --dport 6884 -j SNAT --to-source 192.168.1.1
iptables -t nat -A OUTPUT --dst 212.192.xxx.xxx -p tcp --dport 6884 -j DNAT --to-destination 192.168.1.4

Всем спасибо за помощь!

Если ничего не помогает, прочти наконец инструкцию...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".