Подскажите, где я дурак

CORPSE аватар

Бен, это Данила. Ай нид зе хелп!
Пытаюсь пробросить порт внутренней машины из локалки наружу и буксую. Все мануалы скурены, не могу понять, где я сабж.

Есть машина (1) с двумя интерфейсами:
eth0.10 192.168.0.181/24 - lan
eth0.155 x.x.x.x/yy - wan (белый статический)

Есть машина (2) в локальной сети:
win 192.168.0.128/255.255.255.0
Для чистоты эксперимента файрвол отключен.

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

corpse@monitor:~$ nmap -p 5800 192.168.0.128

Starting Nmap 4.11 ( <a href="http://www.insecure.org/nmap/" title="http://www.insecure.org/nmap/">http://www.insecure.org/nmap/</a> ) at 2010-07-22 10:45 YEKST
Interesting ports on 192.168.0.128:
PORT     STATE SERVICE
5800/tcp open  vnc-http 

На машине 1 для чистоты эксперимента выставляем политику всех таблиц в ACCEPT по дефолту и делаем следующее:

iptables -F INPUT
iptables -F FORWARD
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t nat -A PREROUTING -i eth0.155 -d x.x.x.x -p tcp -m tcp --dport 5000 -j DNAT --to-destination 192.168.0.128:5800
iptables -A FORWARD -i eth0.155 -d 192.168.0.128 -p tcp --dport 5800 -j ACCEPT 
iptables -A FORWARD -i eth0.10 -d x.x.x.x -p tcp --dport 5000 -j ACCEPT 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING --dst 192.168.0.128 -p tcp -m tcp --dport 5800 -j SNAT --to-source x.x.x.x:5000

iptables-save 
# Generated by iptables-save v1.4.2 on Thu Jul 22 10:58:07 2010
*filter
:INPUT ACCEPT [229413:265221649]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [271138:22860408]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A FORWARD -d 192.168.0.128/32 -i eth0.155 -p tcp -m tcp --dport 5800 -j ACCEPT 
-A FORWARD -d x.x.x.x/32 -i eth0.10 -p tcp -m tcp --dport 5000 -j ACCEPT 
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT 
COMMIT
# Completed on Thu Jul 22 10:58:07 2010
# Generated by iptables-save v1.4.2 on Thu Jul 22 10:58:07 2010
*nat
:PREROUTING ACCEPT [6656:976099]
:POSTROUTING ACCEPT [8837:629342]
:OUTPUT ACCEPT [8831:628950]
-A PREROUTING -d x.x.x.x/32 -i eth0.155 -p tcp -m tcp --dport 5000 -j DNAT --to-destination 192.168.0.128:5800 
-A POSTROUTING -d 192.168.0.128/32 -p tcp -m tcp --dport 5800 -j SNAT --to-source x.x.x.x 
COMMIT
# Completed on Thu Jul 22 10:58:07 2010

При скане снаружи:

corpse:~# tcpdump -i eth0.155 port 5000 -vv
tcpdump: listening on eth0.155, link-type EN10MB (Ethernet), capture size 96 bytes
11:00:20.291300 IP (tos 0x0, ttl 57, id 34438, offset 0, flags [DF], proto TCP (6), length 60) hostn.static.corbina.ru.58591 > corpse.local.5000: S, cksum 0xef07 (correct), 1464122683:1464122683(0) win 65535 
11:00:23.075798 IP (tos 0x0, ttl 57, id 39599, offset 0, flags [DF], proto TCP (6), length 60) hostn.static.corbina.ru.58591 > corpse.local.5000: S, cksum 0xe34e (correct), 1464122683:1464122683(0) win 65535 

corpse:~# tcpdump -i eth0.10 host 192.168.0.128 -vv
tcpdump: listening on eth0.10, link-type EN10MB (Ethernet), capture size 96 bytes
11:01:54.520697 IP (tos 0x0, ttl 56, id 338, offset 0, flags [DF], proto TCP (6), length 60) corpse.local.5000 > 192.168.0.128.5800: S, cksum 0x7321 (correct), 1694897657:1694897657(0) win 65535 
11:01:57.526165 IP (tos 0x0, ttl 56, id 5742, offset 0, flags [DF], proto TCP (6), length 60) corpse.local.5000 > 192.168.0.128.5800: S, cksum 0x6768 (correct), 1694897657:1694897657(0) win 65535 

Т.е. получается так, что машина 1 пакеты извне получает, пересылает их на машину 2, но ответы на машину 1 не возвращаются. Соответственно nmap снаружи говорит, что порт filtered. Поможите, кто чем может.

Форвардинг включен, если что.

CORPSE аватар

Тему можно закрывать. Проблема была связана с непониманием следующего - заголовок пакета, попадающий на машину 1 изменяется машиной 1, после чего передаётся машине 2. Для ответа в обратном направлении машина 2 должна иметь доступ к внешнему миру. Передача пакета в обратном направлении невозможно средствами голого SNAT. Был не прав, исправлюсь.

iptables -t nat -A PREROUTING -i eth0.155 -d x.x.x.x -p tcp -m tcp --dport 5000 -j DNAT --to-destination 192.168.0.128:5800
iptables -A FORWARD -i eth0.155 -d 192.168.0.128 -p tcp --dport 5000 -j ACCEPT 
iptables -A FORWARD -i eth0.10 -d x.x.x.x -p tcp --dport 5800 -j ACCEPT

monitor:~# tcpdump -i eth0.10 host 192.168.0.128
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1.10, link-type EN10MB (Ethernet), capture size 96 bytes
11:33:38.469662 IP x.x.x.x.62458 > 192.168.0.128.5800: S 391929160:391929160(0) win 65535 
11:33:38.469860 IP 192.168.0.128.5800 > x.x.x.x.62458: S 1145601927:1145601927(0) ack 391929161 win 17640 
11:33:38.532814 IP x.x.x.x.62458 > 192.168.0.128.5800: . ack 1 win 8268 
11:33:38.533053 IP x.x.x.x.62458 > 192.168.0.128.5800: F 1:1(0) ack 1 win 8268 
11:33:38.533154 IP 192.168.0.128.5800 > x.x.x.x.62458: . ack 2 win 17640 
11:33:38.533524 IP 192.168.0.128.5800 > x.x.x.x.62458: F 1:1(0) ack 2 win 17640 
11:33:38.607607 IP x.x.x.x.62458 > 192.168.0.128.5800: . ack 2 win 8267 

Как можно видеть из следующих двух строк вывода tcpdump, пакеты в сторону удалённого узла уходят напрямую, а не на локальный ип машины 1:
[code]11:33:38.533154 IP 192.168.0.128.5800 > x.x.x.x.62458: . ack 2 win 17640
11:33:38.533524 IP 192.168.0.128.5800 > x.x.x.x.62458: F 1:1(0) ack 2 win 17640

Эм... А в чем сакральный смысл такого обзывания сетевых интерфейсов?

CORPSE аватар

Это не сакральный смысл, это т.н. vlan - http://www.xgu.ru/wiki/VLAN - тут довольно подробно написано. Если в вкратце, то каждый пакет, проходящий через устройство, поддерживающее vlan, может дополнительно маркироваться и в последствии у тебя на одном физическом интерфейсе может существовать несколько виртуальных, тех самых vlan.
eth0 - физический интерфейс
eth0.100, eth0.200 - сотый и двухсотый вланы на интерфейсе eth0, с которыми ты уже можешь работать как с отдельными интерфейсами, на каждый из которых попадают лишь те пакеты, которые для них предназначены, т.е. которые соответствующим образом промаркированы другим оборудованием, например, коммутатором с поддержкой vlan. Т.е. ты можешь спокойно настраивать маршрутизацию между десятком сетей на сервере с одной физической сетевухой. Винда не знала, что такое влан, кажется до 2003-й. Под той же XP вланы можно реализовать кажется, только при установке определённой сетевой карточки от интел. Точно не помню.

Век живи - век учись. Thx =)

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

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