iptables проброс порта 2 провайдера

Требуется открыть доступ к одному из компьютеров в локальной сети снаружи.
Поставил VNC на оффтопик и прописал iptables отправление пакетов с сервера на локальный хост.
Которые жирным, те добавил.
С локалки все работает. Когда пробую снаружи, пакет не перенаправляется. Приходит на внешний интерфейс и все.
То есть в первом случае в браузере указываю http://x.x.x.x:5800 и оно работает
когда пытаюсь снаружи wget http://x.x.x.x:5800
получаю

Connecting to 212.57.145.18:5800...

и висит.

Еще один момент, который я не упомянул.
Может быть дело в нем и поэтому не работает.
внешний ip указан один, а routing на сервере настроен через другой интерфейс, когда он обратно будет отдавать не запутается?

смотрел tcpdump и точно, дальше не идет.
Как отладить а еще лучше подскажите что исправить, не пойму что неправильно сделал.
Могу все убрать и поставить рабочие правила если у кого есть и лень разбираться.
Пожжалуйста помогите!!

mail# iptables-save
# Generated by iptables-save v1.4.0 on Fri Feb 13 13:36:39 2009
*nat
:PREROUTING ACCEPT [4795314:261225744]
:POSTROUTING ACCEPT [7010315:506903079]
:OUTPUT ACCEPT [11925079:859297137]
-A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 5900 -j DNAT --to-destination 192.168.3.7
-A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j DNAT --to-destination 192.168.3.7
-A PREROUTING -s 192.168.3.0/27 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -d 192.168.3.7/32 -p tcp -m tcp --dport 5900 -j SNAT --to-source 192.168.3.1
-A POSTROUTING -d 192.168.3.7/32 -p tcp -m tcp --dport 5800 -j SNAT --to-source 192.168.3.1
-A POSTROUTING -o usi -j MASQUERADE
-A POSTROUTING -o tunusi -j MASQUERADE
-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j DNAT --to-destination 192.168.3.7
-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 5900 -j DNAT --to-destination 192.168.3.7
COMMIT
# Completed on Fri Feb 13 13:36:39 2009
# Generated by iptables-save v1.4.0 on Fri Feb 13 13:36:39 2009
*filter
:INPUT ACCEPT [95520328:95028101274]
:FORWARD DROP [9228:413226]
:OUTPUT ACCEPT [192904730:79386293631]
-A INPUT -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i local -j ACCEPT
-A INPUT -i ! local -p tcp -m tcp --dport 0:1023 -j DROP
-A INPUT -i ! local -p udp -m udp --dport 0:1023 -j DROP
-A FORWARD -i tunusi -o local -j ACCEPT
-A FORWARD -i local -o tunusi -j ACCEPT
-A FORWARD -d 192.168.3.7/32 -p tcp -m tcp --dport 5800 -j ACCEPT
-A FORWARD -s 192.168.3.7/32 -p tcp -m tcp --sport 5800 -j ACCEPT
-A FORWARD -s 192.168.3.7/32 -p tcp -m tcp --sport 5900 -j ACCEPT
-A FORWARD -d 192.168.3.7/32 -p tcp -m tcp --dport 5900 -j ACCEPT
-A FORWARD -d 192.168.3.0/27 -i local -j DROP
-A FORWARD -s 192.168.3.0/27 -i local -j ACCEPT
-A FORWARD -d 192.168.3.0/27 -i usi -j ACCEPT
COMMIT
# Completed on Fri Feb 13 13:36:39 2009

-A PREROUTING -d x.x.x.x/32

пакет отправляется снаружи на локальный хост.
принимается решение о маршруте

-A PREROUTING -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j DNAT --to-destination 192.168.3.7

пакет идет с локального адреса сервера

-A POSTROUTING -d 192.168.3.7/32 -p tcp -m tcp --dport 5800 -j SNAT --to-source 192.168.3.1

а это на случай отправки пакета с сервера

-A OUTPUT -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j DNAT --to-destination 192.168.3.7

это по идее лишнее - политика ACCEPT

-A INPUT -d x.x.x.x/32 -p tcp -m tcp --dport 5800 -j ACCEPT

разрешаем транзит пакета до локального хоста и с локального хоста по номеру порта.

-A FORWARD -d 192.168.3.7/32 -p tcp -m tcp --dport 5800 -j ACCEPT
-A FORWARD -s 192.168.3.7/32 -p tcp -m tcp --sport 5800 -j ACCEPT

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

Анализировать всё лениво но

Анализировать всё лениво но ошибки очевидны
Как должно было быть
1) -t nat PREROUTING -d my.inet.ip.addr -p tcp --dport 5800 -j DNAT --to-destination 192.168.3.7
После этого пакет с инет имеет адрес отправителя инетовский адрес и адрес получателя - локальный адрес 3.7
2) FORWARD -d 192.168.3.7 -p tcp --dport 5800 -j ACCEPT
это правило пропустит пакет с адресом получаетя 3.7

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

1)-t nat POSTROUTING -s 192.168.3.7 -j SNAT --to-source my.inet.ip.addr
2)FORWARD должен пропускать ответные пакеты. Не уверен, но по-моему -m state --state ESTABLISHED должно быть достаточно. но думай какие порты в таком случае нужно указывать, тут уже
FORWARD -p tcp --sport 5800 -s 192.168.3.7 -j ACCEPT (а не dport, как у тебя написано)

этого должно быть достаточно. проверь чтоб форвардинг был включен

Сделал работу над ошибками не помогло

azure написал(а):
Анализировать всё лениво но ошибки очевидны
Как должно было быть
1) -t nat PREROUTING -d my.inet.ip.addr -p tcp --dport 5800 -j DNAT --to-destination 192.168.3.7
После этого пакет с инет имеет адрес отправителя инетовский адрес и адрес получателя - локальный адрес 3.7

2) FORWARD -d 192.168.3.7 -p tcp --dport 5800 -j ACCEPT
это правило пропустит пакет с адресом получаетя 3.7

Это есть

azure написал(а):
Далее клиент примет пакет, отошлет ответный на адрес с инет адресом. ты должен его корректно занатить назад. для этого должно быть
1)-t nat POSTROUTING -s 192.168.3.7 -j SNAT --to-source my. inet .ip.addr

а я добавил

POSTROUTING -d 192.168.3.7 -j SNAT --to-source my. local .ip.addr

чтобы в пакете поменялось src снаружи<=>192.168.3.1 dst (мой внешний)<=>192.168.3.7
иначе с локальной сети не будет работать.
Попробовал поменять local на inet не помогло.

azure написал(а):
2)FORWARD должен пропускать ответные пакеты. Не уверен, но по-моему -m state --state ESTABLISHED должно быть достаточно. но думай какие порты в таком случае нужно указывать, тут уже
FORWARD -p tcp --sport 5800 -s 192.168.3.7 -j ACCEPT (а не dport, как у тебя написано)

этого должно быть достаточно. проверь чтоб форвардинг был включен

Ему недостаточно.
mail ~ # lynx 192.168.3.7:5800
mail ~ # lynx x.x.x.x:5800

TightVNC desktop [nelly]
   www.TightVNC.com

с сервера работает нормально.
С локальной сети работает.
Снаружи не идет FORWARD.

Там 4 правила - есть dport и sport, смотрите выше написано также. И без -m state --state ESTABLISHED то есть точно должно работать.
форвардинг включен - потому что в локалке работает.
не отправляется пакет, который пришел снаружи.

Еще один момент, который я не упомянул.
Может быть дело в нем и поэтому не работает.
внешний ip указан один, а routing на сервере настроен через другой интерфейс, когда он обратно будет отдавать не запутается?

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

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