Машина с Linux является шлюзом в инет, соответственно имеет два интерфейса eth0 - в инет и eth1 в локалку. Для точности надо упомянуть и маршрутизатор cisco 2621 между провайдером и линухой, как он запрограммирован я не знаю. Стоит задача подключиться извне к одному из локальных компов используя vpn-pptp (WinXP->WinXp). Задача вроде как сегодня распространенная. Ядро 2.4.18. По ходу удалось сделать доступным для инета iis одного из локальных компов добавлением по сути одного правила в iptables
*nat
-A PREROUTING -p tcp -d $LIN_EXT_IP --dport 1717 -j DNAT --to-destination 192.168.1.1
где на порт 1717 настроен iis локальной машины, а 192.168.1.1 - ее ipНу, второе правило
*filter
-A FORWARD -i eth0 -d 192.168.1.1 -p tcp --dport 1717 -j ACCEPTуже было до нас.
Подключился к инет через модем, ввел в браузере $LIN_EXT_IP:1717 - и увидел родную домашнюю страничку нашего локального iis.
Теперь самое время проделать тоже с vpn. Делаем все по инструкции:
*nat
-A PREROUTING -p tcp -d $LIN_EXT_IP --dport 1723 -j DNAT --to-destination 192.168.1.1
-A PREROUTING -d $LIN_EXT_IP -p 47 -j DNAT --to-destination 192.168.1.1
*filter
-A FORWARD -i eth0 -j ACCEPTПодключился к инет через модем, создаем vpn подключение и... запиваем холодной водой.
TCPView на машине 192.168.1.1 на несколько секунд показывает попытки подключения строкой типа
locname.domain.suf:1253 $LIN_EXT_IP:pptp SYN_SENT
команда iptables -t nat -nvxL на линуксе показывает
Chain PREROUTING
pkts bytes target prot opt in out source destination
1 48 DNAT tcp -- * * 0.0.0.0/0 $LIN_EXT_IP tcp dpt:1723 to:192.168.1.1
Т.е. один пакет проходит и на этом все... :(
Подскажите, пожалуйста, что еще нужно?
Уточнения: tcpview - это я сморозил, показывал пакет отправленный по модему. Ethereal показал, что на сетевой интерфей локальной машины не приходит ни одного пакета. Хотя листинг iptables утверждает следующее:Chain PREROUTING (policy ACCEPT 342137 packets, 35872611 bytes)
pkts bytes target prot opt in out source destination
1 48 DNAT tcp -- * * 0/0 $LIN_EXT_IP tcp dpt:1723 to:192.168.1.1
0 0 DNAT 47 -- * * 0/0 $LIN_EXT_IP to:192.168.1.1
...
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out
2 96 ACCEPT all -- eth0 eth1Непонятно, почему пакеты прошедшие цепочку forward не достигают локальной машины и почему их два? :(
Так вот они нормально достигали локальной машины. Просто был неправильно настроен фильтр снифера. Каюсь. Но ответ локальная машина не отправляла, поскольку не знала куда. Сеть источника то чужеродная. Очевидно в доках на эту тему считают, что у всех в мире в настройках ip протокола шлюзом настроен ip роутера. Так вот в нашем случае шлюзом был совершенно непричастный ко всем этим проблемам сервак, служащий другим, не менее благородным целям. Короче, решилась проблема добавлением еще двух правил в iptables:
-A POSTROUTING -d 192.168.1.1 -p tcp --dport 1723 -j SNAT --to-source $LIN_LOC_IP
-A POSTROUTING -d 192.168.0.30 -p 47 -j SNAT --to-source $LIN_LOC_IP
Меняющие в пакетах и адрес источника.
Возможно, сработал бы и вариант добалвения еще одного шлюза в настройках локального компа.
Спасибо всем за помощь. :)