Originally Posted by
sunlit
мужики, не издевайтесь, этот туториал можно 3 дня читать, мне всего надо строку iptables чтобы трафик фтп моего локального сервера (в локалке рутера) выходил на внешний айпи интернета, а не только на айпи внешней локальной сети. поможите
Зато, изучив iptables - все будующие заморочки вроде этой Вашей с ftp будут решаться "на раз-два-три". Это во-первых.
Во-вторых, iptables - это такой файрвол! ну такой! после него все другие файрволы покажуться полным г.
А втретьих, такой проброс портов на своём компьютере и роутере я ни когда не делал - не было такой цели, но вооружившись здравым смыслом и указаным туториалом, предлагаю настроить вместе.
Итак, пусть у меня (клиента вашего ФТП) IP=82.82.82.82
Я не смогу направить запрос непосредственно на ваш локальный компьютер, потому что у него IP=192.168.1.88 - а это адрес из "серого" диапазона адресов. То есть такой адрес в сети Интернет не может встречаться - только в закрытых локальных подсетях. И любой маршрутизатор, на пути от моего компьютера (82.82.82.82) до вашего, увидев адрес назначения пакета 192.168.1.88, должен такой пакет сбросить.
Значит, ваш ФТП в Интернете не виден, но зато виден IP=80.70.231.83 - адрес вашего роутера.
Итак, я посылаю пакет со своего 82.82.82.82 на ваш 80.70.231.83 на порт 20.
Он попадет на ваш роутер на интерфейс ppp0. Но на роутере нет своего ФТП, открытого в Интернет, поэтому этот пакет не предназначен роутеру и не должен беспрепятственно пройти таблицу INPUT. Поэтому, правило
Originally Posted by
sunlit
# iptables -A INPUT -p tcp -m tcp -d 192.168.1.88 --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -d 192.168.1.88 --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp -d 192.168.1.88 --dport 20 -j ACCEPT
- лишнее.
Пакет должен попасть на ваш комп с IP=192.168.1.88, но он направлен на адрес 80.70.231.83, поэтому, мы дожны изменить заголовок пакета, подправив адрес назначения:
Originally Posted by
sunlit
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 20 -j DNAT --to-destination 192.168.1.88:20
в этой команде выполняется следующее:
в пакете, пришедшем на интерфейс ppp0 и на tcp порт 20, должен быть заменён адрес назначения на IP=192.168.1.88 и в порт 20.
Далее, после таблицы PREROUTING решается судьба пакета: пакет направить самому роутеру (в таблицу INPUT) или отправить компьютерам локальной сети (в таблицу FORWARD). АГА! - пакет пойдет в таблицу FORWARD, значит надо добавить в неё пропускающее правило:
Code:
iptables -I FORWARD -i ppp0 -p tcp -m tcp -d 192.168.1.88 --dport 20 -j ACCEPT
- tcp пакет пришедший с интерфейса ppp0 на адрес 192.168.1.88 (а мы в предидущей таблице PREROUTING уже этот адрес вписали), на порт 20 -- ПРОПУСТИТЬ на все другие интерфейсы.
Ну, тут уж ясно, что такой пакет попадет на интерфейс вашей локальной сети (br0), и с него - на ваш локальный компьютер с адресом 192.168.1.88 на порт 20, где его подхватит ваш ФТП-сервер.
А потом, ФТП сервер пошлет ответный пакет на адрес моего комьютера 82.82.82.82 - этот адрес сохранился неизменным в входящем пакете.
Итак, ответный пакет на адрес 82.82.82.82 с адреса 192.168.1.88
Поскольку, адреса 82.82.82.82 в вашей локальной сети нет, то такой пакет отправляется по маршруту "по-умолчанию" - на гейтвей. Гейтвеем в вашей сети служит роутер, с адресом 192.168.1.1 (это адрес роутера для локальной сети), где решается судьба этого пакета: самому роутеру он не нужен (а значит не попадёт в таблицу INPUT), но его нужно выпустить в Интернет, через таблицу FORWARD. Пишем разрешительное правило для этого пакета:
Code:
iptables -I FORWARD -o ppp0 -p tcp -m tcp -s 192.168.1.88 --sport 20 -j ACCEPT
- tcp пакет, направляемый на интерфейс ppp0 с адреса 192.168.1.88, с порта 20 -- ПРОПУСТИТЬ
И вот, такой пакет придет на мой компьтер (82.82.82.82), который обнаружит, что де привалил какой то пакет с "левого" адреса 192.168.1.88, а от туда мы ни чего не ждем-с, ну такой пакет на... Поэтому, на вашем роутере, нужно поменять адрес источника ответного пакета, с "серого" 192.168.1.88 на "белый" адрес роутера 80.70.231.83. Делается это в таблице POSTROUTING (после FORWARD) командой:
Code:
iptables -t nat -A POSTROUTING -p tcp -o ppp0 -s 192.168.1.88 --sport 20 -j SNAT --to-source 80.70.231.83
- в пакетах, направляемых на интерфейс ppp0, с адреса 192.168.1.88, и с порта 20, заменить локальный адрес отправителя 192.168.1.88, на внешний адрес роутера 80.70.231.83
Originally Posted by
sunlit
пока успеха нету...
Попробуйте все эти действия произвести (сначала) вручную, из командной сроки роутера. Повторив все эти действия для порта 21, убедитесь, что ФТП заработал, и только потом - вносите их в файл post-firewall
Удачи.