Простите за то, что вновь поднял тему...
Люди.. Бьюсь об стену. :-(
Вот задача.
http://img300.imageshack.us/img300/613/troublebg5.gif
Т.е. в каждом из VLAN есть прямой адрес, хотелось бы сделать доступ к локальному компьютеру с _любого_ из запрашиваемых с внешней сетки адресов
Как пример: берем порт 80. Вот post-firewall
#!/bin/sh
iptables -A INPUT -i vlan2 -m state --state NEW -j SECURITY
iptables -A FORWARD -i vlan2 -m state --state NEW -j SECURITY
iptables -t nat -A PREROUTING -p tcp -d 89.207.220.xxx/255.255.255.255 --dport 80 -j DNAT --to 192.168.1.2:80
iptables -t nat -A PREROUTING -p tcp -d 89.179.244.xxx/255.255.255.255 --dport 80 -j DNAT --to 192.168.1.2:80
iptables -t nat -A POSTROUTING -o vlan2 ! -s 89.207.220.122 -j MASQUERADE
В web-интерфейсе убрали Virtual-Server для 80 порта, считаем, что post-firewall сам все сделает.
Действительно, 89.179.244.xxx отображается и изнутри и снаружи.
С 89.207.220.xxx - только изнутри. С внешнего сервера не хочет заходить :-(
В статус логе Web-интерфейса (Port Forwarding):
Destination Proto. Port Range Redirect to
89.179.244.xxx TCP 80 192.168.1.2
89.207.220.xxx TCP 80 192.168.1.2
Настройки на локальном компе естесственно одинаковы. При подключении 2 сетевух, соответственно 2-х провов, все пашет..
Если грубо прописываешь
iptables -t nat -A PREROUTING -p tcp -d 0/0 --dport 80 -j DNAT --to 192.168.1.2:80
Все пашет само собой (кроме web-интерфейса самого роутера :-) ). Но хотелось бы так, чтобы каждый vlan со своим адресатом общался..
И.. Вот в-общем проблема..
Помогите, плз..
А так не пробовал?
iptables -i vlan2 -t nat -A PREROUTING -p tcp -d 89.207.220.xxx/255.255.255.255 --dport 80 -j DNAT --to 192.168.1.2:80
iptables -i vlan1 -t nat -A PREROUTING -p tcp -d 89.179.244.xxx/255.255.255.255 --dport 80 -j DNAT --to 192.168.1.2:80
Сдается мне что сервак все пакеты получает, только вот ответы шлет на дефолтный интерфейс, ессесно принимающая сторона об этом не догадывается.
То же самое :-(
Порты, вроде ему назначены жестко. т.к. прямые. Выходить-то в сеть я могу спокойно, по разным vlan
только вот ответы шлет на дефолтный интерфейс
"сервак", в смысле http-сервер на внутреннем компе? ессно по дефолту на 192.168.1.1
А вот пляска с тем, как разбросать на роутере меня и интересует.. Т.е. неужели он не держит каждый коннект на "контроле", откуда вызов пришел (с какого VLAN) туда и отсылать ответ? Тогда это не 2 WAN, а бяка сплошная :-(
Вот это еще попробуй убрать.
iptables -t nat -A POSTROUTING -o vlan2 ! -s 89.207.220.122 -j MASQUERADE
Та ж бяка :-(
ага.. при указании vlan1 и vlan2 соответственно - умирает связь с внешнего сервера уже по любому адресу..
Вот дамп на запрос к 89.207.220.xxx
20:09:41.279260 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:09:44.278200 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:09:47.474965 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:09:53.870443 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,sackOK,eol>
20:10:03.264702 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,sackOK,eol>
20:10:39.645996 IP 212.92.zzz.yyy.64230 > 89.207.220.xxx.80: S 1415162643:1415162643(0) win 65535 <mss 1300,sackOK,eol>
Понятно, что ответа нет, но и 192.168.1.2 ничего не пересылается..
А вот дамп к Корбине:
20:13:05.696234 IP 212.92.zzz.yyy.50252 > 89.179.244.xxx.80: S 1888264730:1888264730(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:13:05.696486 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: S 1888264730:1888264730(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:13:05.696502 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: S 1888264730:1888264730(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:13:05.696526 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: S 1888264730:1888264730(0) win 65535 <mss 1460,nop,wscale 1,nop,nop,timestamp[|tcp]>
20:13:05.697174 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: S 4095366492:4095366492(0) ack 1888264731 win 65535 <mss 1460,nop,wscale 0,nop,nop,timestamp[|tcp]>
20:13:05.697174 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: S 4095366492:4095366492(0) ack 1888264731 win 65535 <mss 1460,nop,wscale 0,nop,nop,timestamp[|tcp]>
20:13:05.697342 IP 89.179.244.xxx.80 > 212.92.zzz.yyy.50252: S 4095366492:4095366492(0) ack 1888264731 win 65535 <mss 1460,nop,wscale 0,nop,nop,timestamp[|tcp]>
20:13:05.715503 IP 212.92.zzz.yyy.50252 > 89.179.244.xxx.80: . ack 1 win 33304 <nop,nop,timestamp 224506546 0>
20:13:05.715613 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: . ack 1 win 33304 <nop,nop,timestamp 224506546 0>
20:13:05.715628 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: . ack 1 win 33304 <nop,nop,timestamp 224506546 0>
20:13:05.715649 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: . ack 1 win 33304 <nop,nop,timestamp 224506546 0>
20:13:05.727051 IP 212.92.zzz.yyy.50252 > 89.179.244.xxx.80: P 1:162(161) ack 1 win 33304 <nop,nop,timestamp 224506556 0>
20:13:05.727160 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: P 1:162(161) ack 1 win 33304 <nop,nop,timestamp 224506556 0>
20:13:05.727174 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: P 1:162(161) ack 1 win 33304 <nop,nop,timestamp 224506556 0>
20:13:05.727196 IP 212.92.zzz.yyy.50252 > 192.168.1.2.80: P 1:162(161) ack 1 win 33304 <nop,nop,timestamp 224506556 0>
20:13:05.868578 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . ack 162 win 65374 <nop,nop,timestamp 1197404 224506556>
20:13:05.868578 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . ack 162 win 65374 <nop,nop,timestamp 1197404 224506556>
20:13:05.869158 IP 89.179.244.xxx.80 > 212.92.zzz.yyy.50252: . ack 162 win 65374 <nop,nop,timestamp 1197404 224506556>
20:13:06.488395 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . 1:1349(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
20:13:06.488395 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . 1:1349(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
20:13:06.488596 IP 89.179.244.xxx.80 > 212.92.zzz.yyy.50252: . 1:1349(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
20:13:06.488902 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . 1349:2697(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
20:13:06.488902 IP 192.168.1.2.80 > 212.92.zzz.yyy.50252: . 1349:2697(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
20:13:06.490080 IP 89.179.244.xxx.80 > 212.92.zzz.yyy.50252: . 1349:2697(1348) ack 162 win 65374 <nop,nop,timestamp 1197410 224506556>
ну и т.д.
Т.е. не работает сам форвардинг на леальте, получается.. Интересно почему..
Хм... Вроде заработало. Не было правила для цепочки SECURITY в iptables
iptables -I SECURITY -p tcp -j ACCEPT
Только не знаю, правильное это решение или нет...
Сейчас iptables выглядят так:
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere state NEW
SECURITY all -- anywhere anywhere state NEW
DROP all -- anywhere anywhere
SECURITY all -- anywhere anywhere state NEW
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- anywhere anywhere state INVALID
TCPMSS tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN TCPMSS clamp to PMTU
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
SECURITY all -- anywhere anywhere state NEW
ACCEPT all -- anywhere anywhere ctstate DNAT
DROP all -- anywhere anywhere
SECURITY all -- anywhere anywhere state NEW
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain MACS (0 references)
target prot opt source destination
Chain SECURITY (4 references)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere
RETURN udp -- anywhere anywhere udp dpts:16002:16254
RETURN tcp -- anywhere anywhere tcp flags:SYN,RST,ACK/SYN limit: avg 1/sec burst 5
RETURN tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5
RETURN udp -- anywhere anywhere limit: avg 5/sec burst 5
RETURN icmp -- anywhere anywhere limit: avg 5/sec burst 5
DROP all -- anywhere anywhere
Chain logaccept (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `ACCEPT '
ACCEPT all -- anywhere anywhere
Chain logdrop (0 references)
target prot opt source destination
LOG all -- anywhere anywhere state NEW LOG level warning tcp-sequence tcp-options ip-options prefix `DROP '
DROP all -- anywhere anywhere
тьфу.. Поторопился.. ничего не работает.
Кончились деньги на lealte, и пров мне выдал страничку Мол доступ ограничен.. Но выдал-то со своего сайта. Т.е. грубо говоря, перехватил мой запрос.. А я уж обрадовался.
В-общем, вопрос открыт.. Уже и с SNAT пробовал - ноль..
Читал http://gazette.linux.ru.net/rus/articles/iptables-tutorial.html
Действие DNAT достаточно сложно в использовании и требует дополнительного пояснения. Рассмотрим простой пример. У нас есть WEB сервер и мы хотим разрешить доступ к нему из Интернет. Мы имеем только один реальный IP адрес, а WEB-сервер расположен в локальной сети. Реальный IP адрес $INET_IP назначен брандмауэру, HTTP сервер имеет локальный адрес $HTTP_IP и, наконец брандмауэр имеет локальный алрес $LAN_IP. Для начала добавим простое правило в цепочку PREROUTING таблицы nat:
iptables -t nat -A PREROUTING --dst $INET_IP -p tcp --dport 80 -j DNAT \
--to-destination $HTTP_IP
В соответствии с этим правилом, все пакеты, поступающие на 80-й порт адреса $INET_IP перенаправляются на наш внутренний WEB-сервер. Если теперь обратиться к WEB-серверу из Интернет, то все будет работать прекрасно.
Угу.. Должно..
Обнули все цепочки и добавь оба правила